From ed839069a1df066d9559263129e999de7e9c2ccc Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 19 三月 2025 13:40:58 +0800
Subject: [PATCH] 修改产品结构树,修改指派程序至设备

---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java                      |   40 ++-
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java |   12 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java                                                  |   26 ++
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java            |    8 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java                  |   13 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java                                 |    6 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java                                                      |    4 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskDataVo.java                                          |   19 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamController.java                          |    9 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/FlowTaskController.java                            |    8 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java                            |   18 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/aspect/DncFlowDictAspect.java                                       |   81 ++++++
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java                                   |   19 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java                       |  125 +++++----
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java                                        |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java                                   |   10 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java                                             |    2 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java                         |   63 +---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml                                     |   13 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/AssignFileStreamMapper.xml                               |    7 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java                                 |    8 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java                           |   11 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml                                |   12 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java                                |   21 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java                                |    8 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java                                                  |    3 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java                        |   43 +++
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml         |   64 +++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java                              |   11 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/ext/AssignFileStreamExt.java                                        |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java                                  |    9 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java                         |   10 
 32 files changed, 500 insertions(+), 187 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java
index d49a1f1..5cd7a3d 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java
+++ b/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 + '}';
+    }
+
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml
index de844de..7511418 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml
+++ b/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>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java
index 15b4436..71b1f1f 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPermissionStreamNewService.java
+++ b/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);
+
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
index c8a6245..2c31d2c 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
+++ b/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
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java
index a980d40..498a9e9 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java
+++ b/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);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java
index ef03230..59fcce6 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java
+++ b/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
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java
index a41ec75..074a073 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PermissionStreamNewServiceImpl.java
+++ b/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;
+        }
+    }
+
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
index bec7eda..22055f0 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
+++ b/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);
     }
 
     /**
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java
index 819c3bf..d080ac3 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java
+++ b/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
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java
index 4204924..ee700e9 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java
+++ b/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
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
index ef787db..d9eb74e 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
+++ b/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;
     }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java
index 4415e17..90a1463 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java
+++ b/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);
     }
 
     /**
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java
index 7387b27..16ded6a 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java
+++ b/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);
         });
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/aspect/DncFlowDictAspect.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/aspect/DncFlowDictAspect.java
new file mode 100644
index 0000000..cf918fd
--- /dev/null
+++ b/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("瑙f瀽娉ㄥ叆JSON鏁版嵁  鑰楁椂"+(end-start)+"ms");
+        return result;
+    }
+
+    /**
+     * 鏈柟娉曢拡瀵硅繑鍥炲璞′负Result 鐨処Page鐨勫垎椤靛垪琛ㄦ暟鎹繘琛屽姩鎬佸瓧鍏告敞鍏�
+     * 瀛楀吀娉ㄥ叆瀹炵幇 閫氳繃瀵瑰疄浣撶被娣诲姞娉ㄨВ@dict 鏉ユ爣璇嗛渶瑕佺殑瀛楀吀鍐呭,瀛楀吀鍒嗕负鍗曞瓧鍏竎ode鍗冲彲 锛宼able瀛楀吀 code table text閰嶅悎浣跨敤涓庡師鏉eecg鐨勭敤娉曠浉鍚�
+     * 绀轰緥涓篠ysUser   瀛楁涓簊ex 娣诲姞浜嗘敞瑙Dict(dicCode = "sex") 浼氬湪瀛楀吀鏈嶅姟绔嬮┈鏌ュ嚭鏉ュ搴旂殑text 鐒跺悗鍦ㄨ姹俵ist鐨勬椂鍊欏皢杩欎釜瀛楀吀text锛屽凡瀛楁鍚嶇О鍔燺dictText褰㈠紡杩斿洖鍒板墠绔�
+     * 渚嬭緭鍏ュ綋鍓嶈繑鍥炲�肩殑灏变細澶氬嚭涓�涓猻ex_dictText瀛楁
+     * {
+     *      sex:1,
+     *      sex_dictText:"鐢�"
+     * }
+     * 鍓嶇鐩存帴鍙栧�約ext_dictText鍦╰able閲岄潰鏃犻渶鍐嶈繘琛屽墠绔殑瀛楀吀杞崲浜�
+     *  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);
+            }
+        }
+    }
+
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamController.java
index 79df2f8..5b8d49b 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamController.java
+++ b/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")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java
index a991f2d..c4f0052 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java
+++ b/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();
 
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java
index ec105d8..4f258ee 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java
+++ b/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")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java
index 4bc94eb..4e9aa2d 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java
+++ b/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;
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskDataVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskDataVo.java
index eb57e51..c52e8b6 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskDataVo.java
+++ b/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 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d*/
+    @Excel(name = "娴佺▼瀹氫箟key 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d", width = 15)
+    @ApiModelProperty(value = "娴佺▼瀹氫箟key 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d")
+    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_")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/ext/AssignFileStreamExt.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/ext/AssignFileStreamExt.java
index c59cdb1..5681754 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/ext/AssignFileStreamExt.java
+++ b/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;
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/AssignFileStreamMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/AssignFileStreamMapper.xml
index 2dd41e9..b2322e1 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/AssignFileStreamMapper.xml
+++ b/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">
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml
index 4658443..1a23ed3 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml
+++ b/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>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
index df6ebb3..a3c1e93 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
+++ b/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) {
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java
index da94872..0326124 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java
@@ -30,4 +30,8 @@
      * 缁撴潫鏃堕棿
      */
     private String endTime;
+    /**
+     * 娴佺▼鍒嗙被
+     */
+    private String category;
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java
index a15c0b1..a4cd3b5 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java
+++ b/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;
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java
index 6922fac..78a07d1 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java
+++ b/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);
 
     /**
      * 娴佺▼鎬诲彴璐�
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml
index 221ab77..27b7a5e 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml
+++ b/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>
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java
index 3ad18b5..b1bf9e6 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java
+++ b/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
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/FlowTaskController.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/FlowTaskController.java
index 0de7455..f747af6 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/FlowTaskController.java
+++ b/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) {
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java
index 4fdec9a..4fc8beb 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java
+++ b/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("涓氬姟琛╥d锛岀悊璁哄敮涓�")
+    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 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d*/
+    @Excel(name = "娴佺▼瀹氫箟key 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d", width = 15)
+    @ApiModelProperty(value = "娴佺▼瀹氫箟key 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d")
+    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;
+
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
index 71749a5..52766d2 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
+++ b/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);
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
index b2d0ca1..2bb58bd 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
+++ b/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);
     }
 

--
Gitblit v1.9.3