lyh
2025-03-19 ed839069a1df066d9559263129e999de7e9c2ccc
修改产品结构树,修改指派程序至设备
已添加1个文件
已修改31个文件
687 ■■■■ 文件已修改
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/aspect/DncFlowDictAspect.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskDataVo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/ext/AssignFileStreamExt.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/AssignFileStreamMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/FlowTaskController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
@@ -10,6 +11,7 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Getter
@@ -34,6 +36,9 @@
    // ç±»åž‹
    @TableField(value = "tree_type")
    private Integer type;
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "create_time")
    private Date createTime;
    //展示名称
    private transient String label;
@@ -41,7 +46,7 @@
    private transient List<ProductMix> children = new ArrayList<>();
    public ProductMix(Long id, Long parentId, String name, String code, Integer type) {
    public ProductMix(Long id, Long parentId, String name, String code, Integer type, Date createTime) {
        this.id = id;
        this.parentId = parentId;
        this.name = name;
@@ -49,10 +54,29 @@
        this.type = type;
        this.children = new ArrayList<>();
        this.label="["+code+"]"+name;
        this.createTime = createTime;
    }
    public void addChild(ProductMix child) {
        this.children.add(child);
    }
    public ProductMix(Date createTime) {
        this.createTime = createTime;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Override
    public String toString() {
        return "ProductMix{createTime=" + createTime + '}';
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml
@@ -8,7 +8,8 @@
                mix.name,
            mix.parent_id,
            mix.tree_type AS 'type',
                mix.extend
                mix.extend,
                mix.create_time
        FROM
            nc_product_mix mix -- è¿žæŽ¥æƒé™è¡¨ï¼Œç­›é€‰éƒ¨é—¨ç›¸å…³è®°å½•
                LEFT JOIN nc_permission_stream_new nps_depart ON mix.id = nps_depart.business_id
@@ -25,7 +26,8 @@
                AND nps_user.delete_flag = '0'
        WHERE
            nps_depart.business_id IS NOT NULL
          AND nps_user.business_id IS NOT NULL;
          AND nps_user.business_id IS NOT NULL
        order by mix.tree_type, mix.create_time asc
    </select>
    <select id="loadProductMixAll" resultType="org.jeecg.modules.dnc.entity.ProductMix">
        SELECT DISTINCT
@@ -34,13 +36,15 @@
        mix.name,
        mix.parent_id,
        mix.tree_type AS 'type',
        mix.extend
        mix.extend,
        mix.create_time
        FROM
        nc_product_mix mix -- è¿žæŽ¥æƒé™è¡¨ï¼Œç­›é€‰éƒ¨é—¨ç›¸å…³è®°å½•
        LEFT JOIN nc_permission_stream_new nps_user ON mix.id = nps_user.business_id
        AND nps_user.user_id = #{userId}
        AND nps_user.delete_flag = '0'
        WHERE
         nps_user.business_id IS NOT NULL;
         nps_user.business_id IS NOT NULL
        order by mix.tree_type, mix.create_time asc
    </select>
</mapper>
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java
@@ -89,4 +89,12 @@
     * @return
     */
    List<PermissionStreamNew> loadPermissionStreamNewByBusinessIdsAndDepartIds(List<String> businessIds,List<String> departIds,String businessType);
    /**
     * é€šè¿‡æ·»åŠ æƒé™
     * @param permissionStream
     * @return
     */
    boolean addPermissionStreamNew(PermissionStreamNew permissionStream);
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
@@ -24,10 +24,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
@Service
public class ComponentInfoSeServiceImpl extends ServiceImpl<ComponentInfoMapper, ComponentInfo> implements IComponentInfoService {
@@ -121,15 +118,22 @@
            ExceptionCast.cast(ProductInfoCode.PRODUCT_SAVE_ERROR);
        }
        //添加结构树
        ProductMix productMix = new ProductMix(Long.parseLong(componentInfo.getComponentId()),Long.parseLong(productInfo.getProductId())
                ,componentInfo.getComponentName(),componentInfo.getComponentCode(),2);
        ProductMix productMix=null;
        if (componentInfo.getParentId() != null) {
            //子部件
            productMix = new ProductMix(Long.parseLong(componentInfo.getComponentId()),Long.parseLong(componentInfo.getParentId())
                    ,componentInfo.getComponentName(),componentInfo.getComponentCode(),2,new Date());
        }else {
            productMix = new ProductMix(Long.parseLong(componentInfo.getComponentId()),Long.parseLong(productInfo.getProductId())
                    ,componentInfo.getComponentName(),componentInfo.getComponentCode(),2,new Date());
        }
        productMixService.save(productMix);
        //添加权限
        PermissionStreamNew stream = new PermissionStreamNew();
        stream.setUserId(userId);
        stream.setBusinessId(componentInfo.getComponentId());
        stream.setBusinessType("2");
        return permissionStreamNewService.save(stream);
        return permissionStreamNewService.addPermissionStreamNew(stream);
    }
    @Override
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java
@@ -8,6 +8,7 @@
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.dnc.entity.DevicePermission;
import org.jeecg.modules.dnc.mapper.DevicePermissionMapper;
import org.jeecg.modules.dnc.service.IDevicePermissionService;
import org.jeecg.modules.dnc.ucenter.UserDepartExt;
import org.jeecg.modules.dnc.utils.ValidateUtil;
import org.jeecg.modules.mdc.entity.MdcEquipment;
@@ -16,9 +17,9 @@
import org.jeecg.modules.mdc.util.FindsEquipmentProductionUtil;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.dnc.service.IDevicePermissionService;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.IMdcUserProductionService;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -36,6 +37,8 @@
    private IMdcUserProductionService mdcUserProductionService;
    @Resource
    private MdcEquipmentMapper mdcEquipmentMapper;
    @Resource
    private ISysUserService sysUserService;
    @Override
    public DevicePermission getByUserIdAndDeviceId(String userId, String deviceId) {
@@ -144,6 +147,12 @@
                List<MdcEquipment> equipmentList = mdcEquipmentMapper.queryByProductionIdAndType(mdcEquipmentTree.getKey(),deviceIds);
                if (equipmentList != null && !equipmentList.isEmpty()) {
                    for (MdcEquipment mdcEquipment : equipmentList) {
                        if (mdcEquipment.getCreateBy()!=null&& !mdcEquipment.getCreateBy().isEmpty()){
                            mdcEquipment.setCreateBy(sysUserService.getUserByName(mdcEquipment.getCreateBy()).getRealname());
                        }
                        if (mdcEquipment.getUpdateBy()!=null&& !mdcEquipment.getUpdateBy().isEmpty()){
                            mdcEquipment.setUpdateBy(sysUserService.getUserByName(mdcEquipment.getUpdateBy()).getRealname());
                        }
                        MdcEquipmentTree tree = new MdcEquipmentTree().convert(mdcEquipment);
                        tree.setParentId(mdcEquipmentTree.getKey());
                        tree.setEntity(mdcEquipment);
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java
@@ -24,10 +24,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
@Service
public class PartsInfoServiceImpl extends ServiceImpl<PartsInfoMapper, PartsInfo> implements IPartsInfoService {
@@ -111,14 +108,14 @@
        }
        //添加结构树
        ProductMix productMix = new ProductMix(Long.parseLong(partsInfo.getPartsId()),Long.parseLong(partsInfo.getComponentId())
                ,partsInfo.getPartsName(),partsInfo.getPartsCode(),3);
                ,partsInfo.getPartsName(),partsInfo.getPartsCode(),3,new Date());
        productMixService.save(productMix);
        //添加用户权限
        PermissionStreamNew stream = new PermissionStreamNew();
        stream.setBusinessId(partsInfo.getPartsId());
        stream.setBusinessType("3");
        stream.setUserId(userId);
        return permissionStreamNewService.save(stream);
        return permissionStreamNewService.addPermissionStreamNew(stream);
    }
    @Override
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java
@@ -10,13 +10,19 @@
import org.jeecg.modules.dnc.entity.ProductMix;
import org.jeecg.modules.dnc.mapper.PermissionStreamNewMapper;
import org.jeecg.modules.dnc.service.IPermissionStreamNewService;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Service
public class PermissionStreamNewServiceImpl extends ServiceImpl<PermissionStreamNewMapper, PermissionStreamNew> implements IPermissionStreamNewService {
    @Autowired
    private ISysUserService sysUserService;
    /**
     * æ ¹æ®ç”¨æˆ·id获取结构树权限
@@ -240,4 +246,41 @@
        return total;
    }
    /**
     * é€šè¿‡æ·»åŠ æƒé™
     * @param permissionStream
     * @return
     */
    @Override
    public boolean addPermissionStreamNew(PermissionStreamNew permissionStream) {
        // éªŒè¯å‚数有效性
        if (permissionStream == null) {
            return false;
        }
        // èŽ·å–ç®¡ç†å‘˜ç”¨æˆ·
        SysUser adminUser = sysUserService.getUserByName("admin");
        if (adminUser == null) {
            // è‹¥ç®¡ç†å‘˜ç”¨æˆ·ä¸å­˜åœ¨ï¼Œå¯æ ¹æ®å®žé™…情况处理,这里简单返回 false
            return false;
        }
        try {
            boolean isAdmin = Objects.equals(permissionStream.getUserId(), adminUser.getId());
            // ä¿å­˜æœ¬èº«æƒé™
            super.save(permissionStream);
            if (!isAdmin) {
                // è‹¥ä¸æ˜¯ç®¡ç†å‘˜ï¼Œå¤åˆ¶ä¸€ä¸ªæ–°çš„ PermissionStreamNew å¯¹è±¡å¹¶è®¾ç½®ä¸ºç®¡ç†å‘˜ ID åŽä¿å­˜
                PermissionStreamNew adminPermissionStream = new PermissionStreamNew();
                adminPermissionStream.setUserId(adminUser.getId());
                adminPermissionStream.setBusinessId(permissionStream.getBusinessId());
                adminPermissionStream.setBusinessType(permissionStream.getBusinessType());
                super.save(adminPermissionStream);
            }
            return true;
        } catch (Exception e) {
            // è®°å½•异常信息,方便后续排查问题
            e.printStackTrace();
            return false;
        }
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
@@ -21,10 +21,7 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
@Service
public class ProcessSpecVersionServiceImpl extends ServiceImpl<ProcessSpecVersionMapper, ProcessSpecVersion> implements IProcessSpecVersionService{
@@ -155,14 +152,15 @@
        }
        //添加结构树
        ProductMix productMix = new ProductMix(Long.parseLong(ProcessSpecVersion.getId()),Long.parseLong(ProcessSpecVersion.getPartsId())
                ,ProcessSpecVersion.getProcessSpecVersionName(),ProcessSpecVersion.getProcessSpecVersionCode(),4);
                ,ProcessSpecVersion.getProcessSpecVersionName(),
                ProcessSpecVersion.getProcessSpecVersionCode(),4,new Date());
        productMixService.save(productMix);
        //添加用户权限
        PermissionStreamNew stream = new PermissionStreamNew();
        stream.setBusinessId(ProcessSpecVersion.getId());
        stream.setBusinessType("4");
        stream.setUserId(userId);
        return permissionStreamNewService.save(stream);
        return permissionStreamNewService.addPermissionStreamNew(stream);
    }
    /**
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java
@@ -21,10 +21,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
@Service
public class ProcessStreamServiceImpl extends ServiceImpl<ProcessStreamMapper, ProcessStream> implements IProcessStreamService {
@@ -135,10 +132,10 @@
        ProductMix productMix;
        if (stream.getPsvId() != null) {
            productMix = new ProductMix(Long.parseLong(stream.getProcessId()),Long.parseLong(stream.getPsvId())
                    ,stream.getProcessName(),stream.getProcessCode(),5);
                    ,stream.getProcessName(),stream.getProcessCode(),5,new Date());
        }else {
            productMix = new ProductMix(Long.parseLong(stream.getProcessId()),Long.parseLong(stream.getComponentId())
                    ,stream.getProcessName(),stream.getProcessCode(),5);
                    ,stream.getProcessName(),stream.getProcessCode(),5,new Date());
        }
        productMixService.save(productMix);
        //添加权限验证
@@ -146,7 +143,7 @@
        permissionStream.setUserId(userId);
        permissionStream.setBusinessId(stream.getProcessId());
        permissionStream.setBusinessType("5");
        return permissionStreamNewService.save(permissionStream);
        return permissionStreamNewService.addPermissionStreamNew(permissionStream);
    }
    @Override
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java
@@ -108,14 +108,31 @@
            ExceptionCast.cast(ProductInfoCode.PRODUCT_SAVE_ERROR);
        }
        //添加结构树
        ProductMix productMix = new ProductMix(Long.parseLong(productInfo.getProductId()),0L,productInfo.getProductName(),productInfo.getProductNo(),1);
        ProductMix productMix = new ProductMix(Long.parseLong(productInfo.getProductId()),0L,
                productInfo.getProductName(),productInfo.getProductNo(),1,new Date());
        productMixService.save(productMix);
        //添加用户部门
        if(StrUtil.isNotBlank(user.getProductionIds())){
            String[] split = user.getProductionIds().split(",");
            String[] departIds = split;
            for (String departId : departIds) {
                ProductDepartment productDepartment = new ProductDepartment();
                productDepartment.setProductId(productInfo.getProductId());
                productDepartment.setDepartId(departId);
                productDepartmentService.save(productDepartment);
                PermissionStreamNew stream = new PermissionStreamNew();
                stream.setBusinessId(productInfo.getProductId());
                stream.setDepartId(departId);
                stream.setBusinessType("1");
                permissionStreamNewService.save(stream);
            }
        }
        //添加用户权限
        PermissionStreamNew stream = new PermissionStreamNew();
        stream.setBusinessId(productInfo.getProductId());
        stream.setUserId(userId);
        stream.setBusinessType("1");
        return permissionStreamNewService.save(stream);
        return permissionStreamNewService.addPermissionStreamNew(stream);
    }
    @Override
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
@@ -11,9 +11,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
@Service
public class ProductMixServiceImpl extends ServiceImpl<ProductMixMapper, ProductMix> implements IProductMixService {
@@ -40,6 +38,8 @@
                cleanResult.getValidNodes(),
                cleanResult.getNodeMap()
        );
        return builder.assembleTree(sorted, cleanResult.getNodeMap());
        List<ProductMix> result =builder.assembleTree(sorted, cleanResult.getNodeMap());
        result.sort(Comparator.comparing(ProductMix::getCreateTime, Comparator.nullsLast(Date::compareTo)));
        return result;
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java
@@ -22,10 +22,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
/**
 * @Description: TODO
@@ -122,6 +119,7 @@
                pd.setStepId(workStep.getId());
                workStepDepartmentList.add(pd);
                PermissionStreamNew perm = new PermissionStreamNew();
                perm.setDepartId(item.getDepartId());
                perm.setBusinessId(workStep.getId());
                perm.setBusinessType("6");
                permissionStreamList.add(perm);
@@ -144,14 +142,14 @@
        }
        //添加结构树
        ProductMix productMix = new ProductMix(Long.parseLong(workStep.getId()),Long.parseLong(workStep.getProcessId())
                ,workStep.getStepName(),workStep.getStepCode(),6);
                ,workStep.getStepName(),workStep.getStepCode(),6,new Date());
        productMixService.save(productMix);
        //添加权限验证
        PermissionStreamNew permissionStream = new PermissionStreamNew();
        permissionStream.setUserId(userId);
        permissionStream.setBusinessId(workStep.getId());
        permissionStream.setBusinessType("6");
        return permissionStreamNewService.save(permissionStream);
        return permissionStreamNewService.addPermissionStreamNew(permissionStream);
    }
    /**
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java
@@ -110,7 +110,8 @@
                    node.getParentId(),
                    node.getName(),
                    node.getCode(),
                    node.getType()
                    node.getType(),
                    node.getCreateTime()
            );
            treeMap.put(newNode.getId(), newNode);
        });
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/aspect/DncFlowDictAspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package org.jeecg.modules.dncFlow.aspect;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.system.aspect.DicAspectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * @Description: Dnc字典aopç±»
 * @Version: 1.0
 */
@Aspect
@Component
@Slf4j
public class DncFlowDictAspect {
    @Autowired
    private DicAspectService dicAspectService;
    // å®šä¹‰åˆ‡ç‚¹Pointcut
    @Pointcut("execution(public * org.jeecg.modules.dncFlow..*.*Controller.*(..))")
    public void excudeService() {
    }
    @Around("excudeService()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        long time1=System.currentTimeMillis();
        Object result = pjp.proceed();
        long time2=System.currentTimeMillis();
        log.debug("获取JSON数据 è€—时:"+(time2-time1)+"ms");
        long start=System.currentTimeMillis();
        this.parseDictText(result);
        long end=System.currentTimeMillis();
        log.debug("解析注入JSON数据  è€—æ—¶"+(end-start)+"ms");
        return result;
    }
    /**
     * æœ¬æ–¹æ³•针对返回对象为Result çš„IPage的分页列表数据进行动态字典注入
     * å­—典注入实现 é€šè¿‡å¯¹å®žä½“类添加注解@dict æ¥æ ‡è¯†éœ€è¦çš„字典内容,字典分为单字典code即可 ï¼Œtable字典 code table text配合使用与原来jeecg的用法相同
     * ç¤ºä¾‹ä¸ºSysUser   å­—段为sex æ·»åŠ äº†æ³¨è§£@Dict(dicCode = "sex") ä¼šåœ¨å­—典服务立马查出来对应的text ç„¶åŽåœ¨è¯·æ±‚list的时候将这个字典text,已字段名称加_dictText形式返回到前端
     * ä¾‹è¾“入当前返回值的就会多出一个sex_dictText字段
     * {
     *      sex:1,
     *      sex_dictText:"男"
     * }
     * å‰ç«¯ç›´æŽ¥å–值sext_dictText在table里面无需再进行前端的字典转换了
     *  customRender:function (text) {
     *               if(text==1){
     *                 return "男";
     *               }else if(text==2){
     *                 return "女";
     *               }else{
     *                 return text;
     *               }
     *             }
     *             ç›®å‰vue是这么进行字典渲染到table上的多了就很麻烦了 è¿™ä¸ªç›´æŽ¥åœ¨æœåŠ¡ç«¯æ¸²æŸ“å®Œæˆå‰ç«¯å¯ä»¥ç›´æŽ¥ç”¨
     * @param result
     */
    private void parseDictText(Object result) {
        if (result instanceof Result) {
            if (((Result) result).getResult() instanceof IPage) {
                List<JSONObject> items = dicAspectService.detailDict(((IPage) ((Result) result).getResult()).getRecords());
                ((IPage) ((Result) result).getResult()).setRecords(items);
            }
            else if(((Result) result).getResult() instanceof List){
                List<JSONObject> items = dicAspectService.detailDict(((List) ((Result) result).getResult()));
                ((Result) result).setResult(items);
            }
        }
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamController.java
@@ -45,15 +45,6 @@
        return new ResponseResult(CommonCode.FAIL);
    }
//    @AutoLog(value = "DNC指派设备流程操作-获取当前用户的待办及可拾取的任务")
//    @ApiOperation(value = "DNC指派设备流程操作-获取当前用户的待办及可拾取的任务", notes = "DNC指派设备流程操作-获取当前用户的待办及可拾取的任务")
//    @GetMapping("/find/task/list")
//    public Result<?> getUndoTaskList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
//                                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
//        IPage<ActTaskExt> actTaskExtIPage = assignFileStreamService.getUndoTaskList(pageNo,pageSize);
//        return Result.ok(actTaskExtIPage);
//    }
    @AutoLog(value = "DNC指派设备流程操作-批量指派到设备")
    @ApiOperation(value = "DNC指派设备流程操作-批量指派到设备", notes = "DNC指派设备流程操作-批量指派到设备")
    @PostMapping("/assign/file/batch/apply")
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java
@@ -10,10 +10,8 @@
import org.flowable.engine.*;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.image.ProcessDiagramGenerator;
import org.flowable.task.api.Task;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.dncFlow.entity.HisWorkTask;
import org.jeecg.modules.dncFlow.entity.WorkTaskData;
import org.jeecg.modules.dncFlow.entity.WorkTaskDataVo;
import org.jeecg.modules.dncFlow.service.IAssignFileStreamService;
@@ -72,11 +70,20 @@
        Page page = new Page(pageNo, pageSize);
        IPage<FlowMyBusinessDto> pageList = flowMyBusinessService.getPageList(page, flowMyBusinessDto);
        pageList.getRecords().forEach(item -> {
            //去除[]
            item.setTodoUsers(item.getTodoUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
            item.setTodoUsers(item.getTodoUsers().replaceAll("\"", ""));
            item.setDoneUsers(item.getDoneUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
            item.setDoneUsers(item.getDoneUsers().replaceAll("\"", ""));
            if (item.getTodoUsers() == null){
                item.setTodoUsers("");
            }else{
                //去除[]
                item.setTodoUsers(item.getTodoUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
                item.setTodoUsers(item.getTodoUsers().replaceAll("\"", ""));
            }
            if (item.getDoneUsers() == null){
                item.setDoneUsers("");
            }else {
                //去除[]
                item.setDoneUsers(item.getDoneUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
                item.setDoneUsers(item.getDoneUsers().replaceAll("\"", ""));
            }
        });
        return Result.OK(pageList);
    }
@@ -111,25 +118,26 @@
    @ApiOperation(value = "获取已办任务", response = FlowTaskDto.class)
    @GetMapping(value = "/finishedList")
    public Result finishedList(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNo,
                               @ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize) {
        return flowTaskService.finishedList(pageNo, pageSize);
    public Result<?> finishedList(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNo,
                               @ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize,
                                  FlowMyBusinessDto flowMyBusinessDto) {
        return flowTaskService.finishedList(pageNo, pageSize,flowMyBusinessDto);
    }
    @ApiOperation(value = "获取工作流历史任务", response = FlowTaskDto.class)
    @GetMapping(value = "/queryHisTaskList")
    public Result<List<HisWorkTask>> queryHisTaskList(@RequestParam(name = "drapprovedataId") String drapprovedataId) {
    public Result<?> queryHisTaskList(@RequestParam(name = "drapprovedataId") String drapprovedataId) {
        return Result.OK(hisWorkTaskService.queryHisTaskList(drapprovedataId));
    }
    @ApiOperation(value = "审批任务-查看流程图")
    @GetMapping("/diagramView")
    public void showImages(@RequestParam(name = "taskId") String taskId, HttpServletResponse response) throws IOException {
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        String processDefinitionId = task.getProcessDefinitionId();
    public void showImages(@RequestParam(name = "processDefinitionId") String processDefinitionId,
                           @RequestParam(name = "processInstanceId") String processInstanceId,
                           @RequestParam(name = "TaskDefinitionKey") String TaskDefinitionKey,
                           HttpServletResponse response) throws IOException {
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        String processInstanceId = task.getProcessInstanceId();
        List<HistoricActivityInstance> historyProcess = historyService.createHistoricActivityInstanceQuery()
                .processInstanceId(processInstanceId)
                .finished()
@@ -146,7 +154,7 @@
                activityIds.add(hi.getActivityId());
            }
        }
        activityIds.add(task.getTaskDefinitionKey());
        activityIds.add(TaskDefinitionKey);
        ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration();
        ProcessDiagramGenerator processDiagramGenerator = engConf.getProcessDiagramGenerator();
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java
@@ -27,6 +27,8 @@
    private String processId;
    @TableField(value = "step_id")
    private String stepId;
    @TableField(value = "device_type_id")
    private String deviceTypeId;
    @TableField(value = "doc_id")
    private String docId;
    @TableField(value = "file_id")
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java
@@ -6,6 +6,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
@@ -39,5 +40,6 @@
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private String endTime;
    @Dict(dicCode = "dnc_assign_stream_status")
    private transient String status;
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskDataVo.java
@@ -4,6 +4,8 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
@@ -66,6 +68,23 @@
    @ApiModelProperty(value = "流程名称")
    private transient String flowName;
    @ApiModelProperty(value = "流程类型")
    @Dict(dicCode = "flow_type")
    private transient String category;
    /**流程定义key ä¸€ä¸ªkey会有多个版本的id*/
    @Excel(name = "流程定义key ä¸€ä¸ªkey会有多个版本的id", width = 15)
    @ApiModelProperty(value = "流程定义key ä¸€ä¸ªkey会有多个版本的id")
    private String processDefinitionKey;
    /**流程定义id ä¸€ä¸ªæµç¨‹å®šä¹‰å”¯ä¸€*/
    @Excel(name = "流程定义id ä¸€ä¸ªæµç¨‹å®šä¹‰å”¯ä¸€", width = 15)
    @ApiModelProperty(value = "流程定义id ä¸€ä¸ªæµç¨‹å®šä¹‰å”¯ä¸€")
    private String processDefinitionId;
    /**流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€*/
    @Excel(name = "流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€", width = 15)
    @ApiModelProperty(value = "流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€")
    private String processInstanceId;
//    /**暂时用不上*/
//    @TableField("task_def_id_")
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/ext/AssignFileStreamExt.java
@@ -18,4 +18,6 @@
    private String approveUser;
    private String deviceName;
    private String docSuffix;
    private String deviceManagementName;
    private String deviceManagementCode;
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/AssignFileStreamMapper.xml
@@ -24,6 +24,8 @@
        , pt.parts_name as partsName
        , ps.process_name as processName
        , wt.step_name as stepName
        , dem.device_management_name as deviceManagementName
        , dem.device_management_code as deviceManagementCode
        , dc.doc_name as docName
        , dc.publish_version as version
        , dc.doc_suffix as docSuffix
@@ -47,7 +49,10 @@
        on a.doc_id=dc.doc_id
        left join mdc_equipment de
        on a.device_id=de.id
        left join nc_device_type type
        on a.device_type_id=type.id
        left join nc_device_management dem
        on type.device_management_id=dem.id
    </select>
    <select id="findByPage" resultType="org.jeecg.modules.dncFlow.ext.AssignFileStreamExt" parameterType="String">
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml
@@ -9,15 +9,19 @@
            atask.proc_inst_id_ AS procInstId,
            atask.proc_def_id_ AS procDefId,
            atask.name_ AS name,
            atask.task_def_key_ AS taskDefKey,
            su.realname AS assignee,
            atask.task_def_key_ as taskDefKey,
            su.realname as assignee,
            atask.priority_ AS priority,
            atask.create_time_ AS createTime,
            atask.suspension_state_ AS suspensionState,
            fmb.act_status AS actStatus,
            fmb.title AS title,
            fmb.data_id AS dataId,
            pro.name_ as flowName
            fmb.process_definition_key AS processDefinitionKey,
            fmb.process_definition_id AS processDefinitionId,
            fmb.process_instance_id AS processInstanceId,
            pro.name_ as flowName,
            pro.CATEGORY_ as category
        FROM
            act_ru_task AS atask,
            flow_my_business AS fmb,
@@ -40,6 +44,9 @@
          <if test="flowMy.endTime!= null and flowMy.endTime!= ''">
              AND atask.create_time_ &lt;= #{flowMy.endTime}
          </if>
          <if test="flowMy.category!= null and flowMy.category!= ''">
              AND pro.CATEGORY_ = #{flowMy.category}
          </if>
        ORDER BY
            create_time_ DESC
    </select>
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
@@ -48,7 +48,6 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -91,15 +90,11 @@
    @Autowired
    private ISynchronizedFlagService synchronizedFlagService;
    @Autowired
    private IDeviceGroupService deviceGroupService;
    @Autowired
    private IDeviceCharactersService iDeviceCharactersService;
    @Autowired
    private IMdcEquipmentService iMdcEquipmentService;
    @Autowired
    private IMdcProductionService iMdcProductionService;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private TaskService taskService;
    @Resource
@@ -108,6 +103,8 @@
    private IFlowDefinitionService flowDefinitionService;
    @Autowired
    private IFlowTaskService flowTaskService;
    @Autowired
    private IDeviceTypeService deviceTypeService;
    @Value("${securedoc.whether}")
    private String whether;
@@ -192,15 +189,18 @@
        DocInfo docInfo = getDocInfo(stream);
        MdcEquipment mdcEquipment = getMdcEquipment(stream);
        DocFile docFile = docFileService.getById(stream.getFileId());
        DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, stream.getDeviceId());
        DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 7, stream.getDeviceId());
        if (deviceDoc != null) {
            handleExistingDeviceDoc(docFile, mdcEquipment, stream.getDeviceId());
        }
        deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId());
        deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 7, stream.getDeviceId());
        if (deviceDoc != null) {
            handleExistingDeviceDoc(docFile, mdcEquipment, stream.getDeviceId());
        }
        PermissionStreamNew permissionStreams = getPermissionStreams(stream);
        if (permissionStreams==null){
            return Result.error("用户没有权限");
        }
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        saveBusinessObject(stream, userId);
@@ -209,8 +209,19 @@
                stream.getStreamId(), "IAssignFileStreamService", "assign_nc_to_device", null);
        Map<String, Object> variables = new HashMap<>();
        variables.put("dataId", stream.getStreamId());
        variables.put("organization", stream.getApplyReason());
        return flowDefinitionService.startProcessInstanceByKey("assign_nc_to_device", variables);
        if (stream.getApplyReason() != null) {
            variables.put("organization", stream.getApplyReason());
        }else {
            variables.put("organization", "");
        }
        Result result= flowDefinitionService.startProcessInstanceByKey("assign_nc_to_device", variables);
        if (result.isSuccess()){
            return Result.OK("操作成功");
        }else {
            super.removeById(stream.getStreamId());
            return Result.error("操作失败");
        }
    }
    @Override
@@ -221,7 +232,7 @@
        DocInfo docInfo = getDocInfo(stream);
        MdcEquipment mdcEquipment = getMdcEquipment(stream);
        DocFile docFile = getDocFile(stream);
        DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, stream.getDeviceId());
        DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 7, stream.getDeviceId());
        if(deviceDoc != null) {
            // åˆ é™¤ å¤‡ä»½  è¦†ç›– åŽŸæœ‰çš„
            List<String> strings=iMdcProductionService.findListParentTreeAll(mdcEquipment.getId());
@@ -231,16 +242,6 @@
                        docFile.getFileName(), docFile.getFileSuffix());
            }
        }
        /*deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId());
        if(deviceDoc != null) {
            // åˆ é™¤ å¤‡ä»½  è¦†ç›– åŽŸæœ‰çš„
            List<String> strings =  deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
            if (strings != null && !strings.isEmpty()) {
                String path = StringUtils.join(strings.toArray(), "/");
                boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(),
                        docFile.getFileName(), docFile.getFileSuffix());
            }
        }*/
        getPermissionStreams(stream);
        //插入文档到设备发送文档
        if(deviceDoc == null) {
@@ -250,7 +251,7 @@
            DocRelative docRelative = new DocRelative();
            docRelative.setDocId(docInfo.getDocId());
            docRelative.setClassificationId(classification.getClassificationId());
            docRelative.setAttributionType(4);
            docRelative.setAttributionType(7);
            docRelative.setAttributionId(stream.getDeviceId());
            boolean b = docRelativeService.save(docRelative);
            if(!b) {
@@ -303,20 +304,20 @@
            DocInfo docInfo;
            //同意操作
            if (StrUtil.isNotEmpty(en.getStepId())){
                //工步指派
                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 6, en.getStepId());
                //工步下设备类指派
                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 6, en.getDeviceTypeId());
            }else {
                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getProcessId());
                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getDeviceTypeId());
            }
            if(docInfo == null || docInfo.getDocStatus() == 3)
                ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
                               ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
            MdcEquipment mdcEquipment = iMdcEquipmentService.getById(en.getDeviceId());
            if(mdcEquipment == null)
                ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
            DocFile docFile = docFileService.getById(en.getFileId());
            if(docFile == null)
                ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
            DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),4, en.getDeviceId());
            DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),7, en.getDeviceId());
            if(deviceDoc != null) {
                // åˆ é™¤ å¤‡ä»½  è¦†ç›– åŽŸæœ‰çš„
                List<String> strings =  iMdcProductionService.findListParentTreeAll(mdcEquipment.getId());
@@ -325,7 +326,7 @@
                    boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ mdcEquipment.getEquipmentId(),
                            docFile.getFileName(), docFile.getFileSuffix());
                  /*  //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId());
                    boolean doc = docRelativeService.deleteCopyDocByAttrNext(deviceDoc.getDocId(),4,stream.getDeviceId());
                    boolean doc = docRelativeService.deleteCopyDocByAttrNext(deviceDoc.getDocId(),7,stream.getDeviceId());
                    if (!doc) {
                        ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE);
                    }*/
@@ -339,7 +340,7 @@
                DocRelative docRelative = new DocRelative();
                docRelative.setDocId(docInfo.getDocId());
                docRelative.setClassificationId(classification.getClassificationId());
                docRelative.setAttributionType(4);
                docRelative.setAttributionType(7);
                docRelative.setAttributionId(en.getDeviceId());
                b = docRelativeService.save(docRelative);
            }
@@ -471,7 +472,7 @@
        if(deviceInfo == null)
            ExceptionCast.cast(DeviceCode.DEVICE_NOT_EXIST);
        //删除原来设备下的所有文档
        docRelativeService.deleteByDocAttr(4, deviceInfo.getDeviceId());
        docRelativeService.deleteByDocAttr(7, deviceInfo.getDeviceId());
        List<DocInfo> docInfoList = docInfoService.getByProcessIds(streams);
        if(docInfoList == null || docInfoList.isEmpty())
            ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST);
@@ -490,7 +491,7 @@
            DocRelative docRelative = new DocRelative();
            docRelative.setDocId(docInfo.getDocId());
            docRelative.setClassificationId(classification.getClassificationId());
            docRelative.setAttributionType(4);
            docRelative.setAttributionType(7);
            docRelative.setAttributionId(deviceInfo.getDeviceId());
            boolean b = docRelativeService.save(docRelative);
            if(!b)
@@ -559,8 +560,8 @@
            if (!copyFileNc) {
                ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
            } else {
                DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(deviceId, 4, deviceId);
                boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(), 4, deviceId);
                DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(deviceId, 7, deviceId);
                boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(), 7, deviceId);
                if (!doc) {
                    ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE);
                }
@@ -568,40 +569,56 @@
        }
    }
    //权限校验
    private PermissionStreamNew getPermissionStreams(AssignFileStream stream) {
        PermissionStreamNew permissionStreams;
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        DeviceType deviceType = deviceTypeService.getById(stream.getAttributionId());
        String attributionId = deviceType != null ? deviceType.getAttributionId() : stream.getAttributionId();
        PermissionStreamNew permissionStreams;
        if (stream.getAttributionType().equals("5")) {
            // å·¥åº
            ProcessStream processStream = processStreamService.getById(stream.getAttributionId());
            if (processStream == null) {
                ExceptionCast.cast(CommonCode.INVALID_PARAM);
            }
            stream.setProductId(processStream.getProductId());
            stream.setComponentId(processStream.getComponentId());
            stream.setPartsId(processStream.getPartsId());
            stream.setProcessId(processStream.getProcessId());
            permissionStreams = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(),user.getId(),"5");
            permissionStreams = handleProcess(stream, attributionId, user);
        } else {
            // å·¥æ­¥
            WorkStep workStep = workStepService.getById(stream.getAttributionId());
            if (workStep == null) {
                ExceptionCast.cast(CommonCode.INVALID_PARAM);
            }
            stream.setProductId(workStep.getProductId());
            stream.setComponentId(workStep.getComponentId());
            stream.setPartsId(workStep.getPartsId());
            stream.setProcessId(workStep.getProcessId());
            stream.setStepId(workStep.getId());
            permissionStreams = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(workStep.getId(),user.getId(),"6");
            permissionStreams = handleWorkStep(stream, attributionId, user);
        }
        if (permissionStreams == null ) {
        if (permissionStreams == null) {
            ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
        }
        return permissionStreams;
    }
    private PermissionStreamNew handleProcess(AssignFileStream stream, String attributionId, LoginUser user) {
        ProcessStream processStream = processStreamService.getById(attributionId);
        if (processStream == null) {
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        }
        stream.setProductId(processStream.getProductId());
        stream.setComponentId(processStream.getComponentId());
        stream.setPartsId(processStream.getPartsId());
        stream.setProcessId(processStream.getProcessId());
        if (deviceTypeService.getById(stream.getAttributionId()) != null) {
            stream.setDeviceTypeId(deviceTypeService.getById(stream.getAttributionId()).getId());
        }
        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(), user.getId(), "5");
    }
    private PermissionStreamNew handleWorkStep(AssignFileStream stream, String attributionId, LoginUser user) {
        WorkStep workStep = workStepService.getById(attributionId);
        if (workStep == null) {
            ExceptionCast.cast(CommonCode.INVALID_PARAM);
        }
        stream.setProductId(workStep.getProductId());
        stream.setComponentId(workStep.getComponentId());
        stream.setPartsId(workStep.getPartsId());
        stream.setProcessId(workStep.getProcessId());
        stream.setStepId(workStep.getId());
        if (deviceTypeService.getById(stream.getAttributionId()) != null) {
            stream.setDeviceTypeId(deviceTypeService.getById(stream.getAttributionId()).getId());
        }
        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(workStep.getId(), user.getId(), "6");
    }
    //获取部门信息
    //todo ä¿®æ”¹
    private List<String> getDepartIds(List<PermissionStream> permissionStreams, String userId) {
lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java
@@ -30,4 +30,8 @@
     * ç»“束时间
     */
    private String endTime;
    /**
     * æµç¨‹åˆ†ç±»
     */
    private String category;
}
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java
@@ -64,6 +64,9 @@
    @Excel(name = "流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€", width = 15)
    @ApiModelProperty(value = "流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€")
    private String processInstanceId;
    @ApiModelProperty(value = "流程类型")
    @Dict(dicCode = "flow_type")
    private String category;
    /**流程业务简要描述*/
    @Excel(name = "流程业务简要描述", width = 15)
    @ApiModelProperty(value = "流程业务简要描述")
@@ -119,11 +122,17 @@
    @TableField(exist = false)
    private String taskStatus;
    @ApiModelProperty("历史流程实例ID")
    private transient String hisProcInsId;
    private transient String flowName;
    /**流程开始时间*/
    private transient Date startTime;
    private transient String startTime;
    /**流程结束时间*/
    private transient Date endTime;
    private transient String endTime;
    /**当前用户*/
    private transient String currentUser;
}
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java
@@ -6,6 +6,7 @@
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.domain.dto.FlowTaskDto;
/**
 * @Description: æµç¨‹ä¸šåŠ¡æ‰©å±•è¡¨
@@ -14,6 +15,13 @@
 * @Version: V1.0
 */
public interface FlowMyBusinessMapper extends BaseMapper<FlowMyBusiness> {
    /**
     * æµç¨‹-我的已办
     * @param flowMyBusinessDto
     * @param page
     * @return
     */
    IPage<FlowTaskDto> PageListMyBusiness(@Param("page")Page page, @Param("flowMyBusinessDto") FlowMyBusinessDto flowMyBusinessDto);
    /**
     * æµç¨‹æ€»å°è´¦
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml
@@ -6,16 +6,74 @@
            flow_my_business.*,
            ACT_HI_PROCINST.START_TIME_ as start_time,
            ACT_HI_PROCINST.END_TIME_ as end_time,
            NC_ASSIGN_FILE_STREAM.STATUS as status,
            ACT_RE_PROCDEF.NAME_ as flowName
            ACT_RE_PROCDEF.NAME_ as flowName,
            ACT_RE_PROCDEF.CATEGORY_ as category
        FROM
            flow_my_business
                LEFT JOIN ACT_HI_PROCINST ON flow_my_business.process_instance_id = ACT_HI_PROCINST.ID_
                LEFT JOIN ACT_RE_PROCDEF ON flow_my_business.process_definition_id = ACT_RE_PROCDEF.ID_
                LEFT JOIN NC_ASSIGN_FILE_STREAM ON flow_my_business.data_id = NC_ASSIGN_FILE_STREAM.STREAM_ID
        where
            1 = 1
        <if test="flowMyBusinessDto.category != null and flowMyBusinessDto.category != ''">
            and ACT_RE_PROCDEF.CATEGORY_ = #{flowMyBusinessDto.category}
        </if>
        <if test="flowMyBusinessDto.flowName!= null and flowMyBusinessDto.flowName!= ''">
            AND ACT_RE_PROCDEF.name_ LIKE CONCAT('%',#{flowMyBusinessDto.flowName},'%')
        </if>
        <if test="flowMyBusinessDto.title != null and flowMyBusinessDto.title != ''">
            AND flow_my_business.title LIKE CONCAT('%',#{flowMyBusinessDto.title},'%')
        </if>
        <if test="flowMyBusinessDto.startTime!= null and flowMyBusinessDto.startTime!= ''">
            AND ACT_HI_PROCINST.START_TIME_ &gt;= #{flowMyBusinessDto.startTime}
        </if>
        <if test="flowMyBusinessDto.endTime!= null and flowMyBusinessDto.endTime!= ''">
            AND ACT_HI_PROCINST.END_TIME_ &lt;= #{flowMyBusinessDto.endTime}
        </if>
        ORDER BY
            flow_my_business.create_time desc
    </select>
    <select id="PageListMyBusiness" resultType="org.jeecg.modules.flowable.domain.dto.FlowTaskDto">
        SELECT
            task.ID_ as 'hisProcInsId',
            TASK.PROC_INST_ID_ AS 'taskId',
            ACT_RE_PROCDEF.CATEGORY_ AS 'category',
            ACT_RE_PROCDEF.NAME_ 'procDefName',
            flow_my_business.title AS 'Description',
            flow_my_business.data_id AS 'dataId',
            flow_my_business.process_definition_key AS 'processDefinitionKey',
            flow_my_business.process_definition_id AS 'processDefinitionId',
            flow_my_business.process_instance_id AS 'processInstanceId',
            TASK.EXECUTION_ID_ AS 'executionId',
            task.NAME_ AS 'taskName',
            task.DURATION_ 'duration',
            task.START_TIME_ AS 'createTime',
            task.END_TIME_ AS 'finishTime',
            task.TASK_DEF_KEY_ AS 'TaskDefKey'
        FROM
            ACT_HI_TASKINST TASK
                LEFT JOIN flow_my_business ON flow_my_business.process_instance_id = TASK.PROC_INST_ID_
                LEFT JOIN ACT_RE_PROCDEF ON flow_my_business.process_definition_id = ACT_RE_PROCDEF.ID_
        WHERE
           TASK.END_TIME_ IS NOT NULL
        <if test="flowMyBusinessDto.currentUser != null and flowMyBusinessDto.currentUser != ''">
            AND TASK.ASSIGNEE_ = #{flowMyBusinessDto.currentUser}
        </if>
        <if test="flowMyBusinessDto.category != null and flowMyBusinessDto.category != ''">
            and ACT_RE_PROCDEF.CATEGORY_ = #{flowMyBusinessDto.category}
        </if>
        <if test="flowMyBusinessDto.flowName!= null and flowMyBusinessDto.flowName!= ''">
            AND ACT_RE_PROCDEF.name_ LIKE CONCAT('%',#{flowMyBusinessDto.flowName},'%')
        </if>
        <if test="flowMyBusinessDto.title != null and flowMyBusinessDto.title != ''">
            AND flow_my_business.title LIKE CONCAT('%',#{flowMyBusinessDto.title},'%')
        </if>
        <if test="flowMyBusinessDto.startTime!= null and flowMyBusinessDto.startTime!= ''">
            AND TASK.START_TIME_ &gt;= #{flowMyBusinessDto.startTime}
        </if>
        <if test="flowMyBusinessDto.endTime!= null and flowMyBusinessDto.endTime!= ''">
            AND TASK.END_TIME_ &lt;= #{flowMyBusinessDto.endTime}
        </if>
        ORDER BY
            TASK.END_TIME_ DESC
    </select>
</mapper>
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java
@@ -8,6 +8,7 @@
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.mapper.FlowMyBusinessMapper;
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.domain.dto.FlowTaskDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -40,6 +41,17 @@
        FlowMyBusiness business = this.getOne(flowMyBusinessLambdaQueryWrapper);
        return business;
    }
    /**
     * æµç¨‹-我的已办
     * @param flowMyBusinessDto
     * @param page
     * @return
     */
    public IPage<FlowTaskDto> getPageListMyBusiness(Page page, FlowMyBusinessDto flowMyBusinessDto){
        return flowMyBusinessMapper.PageListMyBusiness(page,flowMyBusinessDto);
    }
    /**
     * æµç¨‹æ€»å°è´¦
     * @param flowMyBusinessDto
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/FlowTaskController.java
@@ -57,14 +57,6 @@
        return flowTaskService.todoList(pageNum, pageSize);
    }
    @ApiOperation(value = "获取已办任务", response = FlowTaskDto.class)
    @GetMapping(value = "/finishedList")
    public Result finishedList(@ApiParam(value = "当前页码", required = true) @RequestParam Integer pageNum,
                                   @ApiParam(value = "每页条数", required = true) @RequestParam Integer pageSize) {
        return flowTaskService.finishedList(pageNum, pageSize);
    }
    @ApiOperation(value = "流程历史流转记录", response = FlowTaskDto.class)
    @GetMapping(value = "/flowRecord")
    public Result flowRecord(String dataId) {
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java
@@ -5,6 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
import java.util.Date;
@@ -49,6 +51,7 @@
    private String startUserName;
    @ApiModelProperty("流程类型")
    @Dict(dicCode = "flow_type")
    private String category;
    @ApiModelProperty("流程变量信息")
@@ -87,6 +90,9 @@
    @ApiModelProperty("候选执行人")
    private String candidate;
    @ApiModelProperty("业务表id,理论唯一")
    private String dataId;
    @ApiModelProperty("任务创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
@@ -95,4 +101,17 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date finishTime;
    /**流程定义key ä¸€ä¸ªkey会有多个版本的id*/
    @Excel(name = "流程定义key ä¸€ä¸ªkey会有多个版本的id", width = 15)
    @ApiModelProperty(value = "流程定义key ä¸€ä¸ªkey会有多个版本的id")
    private String processDefinitionKey;
    /**流程定义id ä¸€ä¸ªæµç¨‹å®šä¹‰å”¯ä¸€*/
    @Excel(name = "流程定义id ä¸€ä¸ªæµç¨‹å®šä¹‰å”¯ä¸€", width = 15)
    @ApiModelProperty(value = "流程定义id ä¸€ä¸ªæµç¨‹å®šä¹‰å”¯ä¸€")
    private String processDefinitionId;
    /**流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€*/
    @Excel(name = "流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€", width = 15)
    @ApiModelProperty(value = "流程业务实例id ä¸€ä¸ªæµç¨‹ä¸šåŠ¡å”¯ä¸€ï¼Œæœ¬è¡¨ä¸­ä¹Ÿå”¯ä¸€")
    private String processInstanceId;
}
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
@@ -2,6 +2,7 @@
import org.flowable.task.api.Task;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
import org.jeecg.modules.flowable.domain.dto.FlowViewerDto;
import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
@@ -18,6 +19,7 @@
     * @param task è¯·æ±‚实体参数
     */
    Result complete(FlowTaskVo task);
    Result completeByDateId(FlowTaskVo flowTaskVo);
    /**
     * é©³å›žä»»åŠ¡
@@ -119,12 +121,12 @@
     * @param pageSize æ¯é¡µæ¡æ•°
     * @return
     */
    Result finishedList(Integer pageNum, Integer pageSize);
    Result finishedList(Integer pageNum, Integer pageSize,FlowMyBusinessDto flowMyBusinessDto);
    /**
     * æµç¨‹åŽ†å²æµè½¬è®°å½•
     *
     * @param procInsId æµç¨‹å®žä¾‹Id
     * @param dataId æµç¨‹å®žä¾‹Id
     * @return
     */
    Result flowRecord(String dataId);
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
@@ -6,6 +6,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
@@ -32,10 +33,10 @@
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
import org.jeecg.modules.flowable.apithird.common.constant.ProcessConstants;
@@ -969,58 +970,32 @@
     * @return
     */
    @Override
    public Result finishedList(Integer pageNum, Integer pageSize) {
        Page<FlowTaskDto> page = new Page<>();
    public Result finishedList(Integer pageNum, Integer pageSize, FlowMyBusinessDto flowMyBusinessDto) {
        //修改查询,添加查询条件
        Page page = new Page(pageNum, pageSize);
        String username = iFlowThirdService.getLoginUser().getUsername();
        HistoricTaskInstanceQuery taskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
                .includeProcessVariables()
                .finished()
                .taskAssignee(username)
                .orderByHistoricTaskInstanceEndTime()
                .desc();
        List<HistoricTaskInstance> historicTaskInstanceList = taskInstanceQuery.listPage((pageNum - 1)*pageSize, pageSize);
        List<FlowTaskDto> hisTaskList = Lists.newArrayList();
        for (HistoricTaskInstance histTask : historicTaskInstanceList) {
            FlowTaskDto flowTask = new FlowTaskDto();
            // å½“前流程信息
            flowTask.setTaskId(histTask.getId());
            // å®¡æ‰¹äººå‘˜ä¿¡æ¯
            flowTask.setCreateTime(histTask.getCreateTime());
            flowTask.setFinishTime(histTask.getEndTime());
            flowTask.setDuration(getDate(histTask.getDurationInMillis()));
            flowTask.setProcDefId(histTask.getProcessDefinitionId());
            flowTask.setTaskDefKey(histTask.getTaskDefinitionKey());
            flowTask.setTaskName(histTask.getName());
            FlowMyBusiness flowMyBusiness = flowMyBusinessService.getByProcessInstanceId(histTask.getProcessInstanceId());
            if (flowMyBusiness != null) {
                flowTask.setDescription(flowMyBusiness.getTitle());
            }
        flowMyBusinessDto.setCurrentUser(username);
        IPage<FlowTaskDto> flowTaskDtoIPage = flowMyBusinessService.getPageListMyBusiness(page,flowMyBusinessDto);
        flowTaskDtoIPage.getRecords().forEach(flowTaskDto -> {
            // æµç¨‹å®šä¹‰ä¿¡æ¯
            ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
                    .processDefinitionId(histTask.getProcessDefinitionId())
                    .processDefinitionId(flowTaskDto.getProcessDefinitionId())
                    .singleResult();
            flowTask.setDeployId(pd.getDeploymentId());
            flowTask.setProcDefName(pd.getName());
            flowTask.setProcDefVersion(pd.getVersion());
            flowTask.setProcInsId(histTask.getProcessInstanceId());
            flowTask.setHisProcInsId(histTask.getProcessInstanceId());
            flowTaskDto.setDeployId(pd.getDeploymentId());
            flowTaskDto.setProcDefName(pd.getName());
            flowTaskDto.setProcDefVersion(pd.getVersion());
            flowTaskDto.setCategory(pd.getCategory());
            // æµç¨‹å‘起人信息
            HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
                    .processInstanceId(histTask.getProcessInstanceId())
                    .processInstanceId(flowTaskDto.getTaskId())
                    .singleResult();
            SysUser startUser = iFlowThirdService.getUserByUsername(historicProcessInstance.getStartUserId());
            flowTask.setStartUserId(startUser.getUsername());
            flowTask.setStartUserName(startUser.getRealname());
            flowTaskDto.setStartUserId(startUser.getUsername());
            flowTaskDto.setStartUserName(startUser.getRealname());
            List<String> departNamesByUsername = iFlowThirdService.getDepartNamesByUsername(historicProcessInstance.getStartUserId());
            flowTask.setStartDeptName(CollUtil.join(departNamesByUsername,","));
            hisTaskList.add(flowTask);
        }
        page.setTotal(hisTaskList.size());
        page.setRecords(hisTaskList);
//        Map<String, Object> result = new HashMap<>();
//        result.put("result",page);
//        result.put("finished",true);
            flowTaskDto.setStartDeptName(CollUtil.join(departNamesByUsername,","));
            flowTaskDto.setTaskId(flowTaskDto.getHisProcInsId());
        });
        return Result.OK(page);
    }