From bc263d8bed5d1405f275bb8638a9bec9eaf06585 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期一, 31 三月 2025 09:42:00 +0800
Subject: [PATCH] 添加审签逻辑,移动flow通用代码,添加根据角色查询用户,新增时间工具类,修改指派设备bug

---
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusiness.java                  |    2 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowHistoricalVo.java                               |   73 ++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserRoleMapper.xml                  |   18 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java |   64 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java                                                  |    2 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskService.java                                 |    4 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskDataVo.java                                 |   90 ++
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImpl.java                         |    8 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java                                       |    2 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java                     |   13 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java                    |   63 -
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IHisWorkTaskMapper.java                                |   21 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java                                        |    3 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/HisWorkTaskServiceImpl.java                      |   39 +
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskVoMapper.xml                               |   18 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml                                            |    1 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowTaskVo.java                                     |    3 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java                                      |   37 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java                                                     |    4 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocRelativeMapper.xml                                        |    2 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskMapper.xml                                 |    4 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskVoMapper.java                                 |   11 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/util/TimeUtil.java                                            |  111 +++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java                          |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java                                   |   42 +
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowInstanceServiceImpl.java                     |    6 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IHisWorkTaskService.java                              |   20 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java                                    |   49 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/DispatchFileMapper.xml                                   |    5 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/HisWorkTask.java                                    |    2 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskServiceVo.java                               |    6 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImplVo.java                       |   31 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/AssignFlowTaskVo.java                                            |   41 -
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java                  |   17 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java                              |  192 ++++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/DispatchFileMapper.java                                      |   14 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java                   |   13 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java                       |    4 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskData.java                                   |    2 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java                         |   23 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/DispatchFile.java                                            |  112 +++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java                  |   13 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml                                |   29 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml                              |   57 +
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java          |   22 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskMapper.java                                   |    4 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java                 |   62 ++
 /dev/null                                                                                                                   |   37 -
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoQueryRequest.java                                        |    4 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml         |   27 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java                              |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java                           |  359 +++++++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java        |   15 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowMy.java                                         |    2 
 54 files changed, 1,557 insertions(+), 250 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java
index 280bfce..ec33919 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java
@@ -18,7 +18,6 @@
 public class DocInfo {
     @TableId(value = "doc_id")
     private String docId;
-
     @TableField(value = "doc_name")
     private String docName;
     @TableField(value = "doc_alias")
@@ -30,6 +29,9 @@
     @TableField(value = "doc_status")
     @Dict(dicCode = "dnc_product_status")
     private Integer docStatus;
+    @TableField(value = "doc_dispatch_status")
+    @Dict(dicCode = "nc_doc_dispatch_status")
+    private Integer docDispatchStatus;
     @TableField(value = "publish_file_id")
     private String publishFileId;
     @TableField(value = "publish_version")
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 5cd7a3d..81e49a1 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
@@ -28,7 +28,7 @@
     @TableField(value = "parent_id")
     private Long parentId;
     // 鍚嶇О
-    @TableField(value = "name")
+    @TableField(value = "tree_name")
     private String name;
     // code
     @TableField(value = "tree_code")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml
index 6184958..6f4ebd9 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml
@@ -12,6 +12,7 @@
         ,r.attribution_type
         ,r.attribution_id
         ,u.doc_status
+        ,u.doc_dispatch_status
         ,u.publish_file_id
         ,u.publish_version
         ,u.description
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocRelativeMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocRelativeMapper.xml
index 3d25f8a..ac06bb5 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocRelativeMapper.xml
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocRelativeMapper.xml
@@ -25,7 +25,7 @@
        WHERE
         nr.doc_id = #{docId}
          AND nr.delete_flag = 0
-         AND nr.attribution_type = 4
+         AND nr.attribution_type = 7
          AND nr.attribution_id = d.id
       );
     </select>
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 7511418..e7552dc 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
@@ -5,7 +5,7 @@
         SELECT DISTINCT
             mix.id,
             mix.tree_code 'code',
-                mix.name,
+                mix.tree_name 'name',
             mix.parent_id,
             mix.tree_type AS 'type',
                 mix.extend,
@@ -30,21 +30,18 @@
         order by mix.tree_type, mix.create_time asc
     </select>
     <select id="loadProductMixAll" resultType="org.jeecg.modules.dnc.entity.ProductMix">
-        SELECT DISTINCT
-        mix.id,
-        mix.tree_code 'code',
-        mix.name,
-        mix.parent_id,
-        mix.tree_type AS 'type',
-        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
+        SELECT DISTINCT mix.id,
+                        mix.tree_code    'code',
+                        mix.tree_name    'name',
+                        mix.parent_id,
+                        mix.tree_type AS 'type',
+                        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
         order by mix.tree_type, mix.create_time asc
     </select>
 </mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoQueryRequest.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoQueryRequest.java
index a574652..5b2adb1 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoQueryRequest.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoQueryRequest.java
@@ -1,16 +1,16 @@
 package org.jeecg.modules.dnc.request;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.jeecg.common.aspect.annotation.Dict;
 
 @Data
 @NoArgsConstructor
 @ApiModel(value = "鏂囨。鏌ヨ鍙傛暟", description = "鏂囨。鏌ヨ鍙傛暟")
 public class DocInfoQueryRequest {
+    @ApiModelProperty(value = "鏂囨。id")
+    private String docId;
     @ApiModelProperty(value = "缁戝畾绫诲瀷 1 浜у搧 2 閮ㄤ欢 3 闆朵欢 4 璁惧 5 宸ュ簭", example = "1", required = true)
     private Integer attributionType;
     @ApiModelProperty(value = "缁戝畾绫诲瀷瀵瑰簲鐨刬d 1 浜у搧id 2 閮ㄤ欢id 3 闆朵欢id 4 璁惧id 5 宸ュ簭id", example = "234324234",  required = true)
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java
index a9299d5..3e25420 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java
@@ -9,4 +9,6 @@
     private String attributionId;
     private Integer attributionType;
     private String docClassCode;
+    /**鏄惁杩涘叆瀹$娴佺▼*/
+    private Boolean isApprove = true;
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
index 809ae76..7d4f340 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
@@ -1,7 +1,6 @@
 package org.jeecg.modules.dnc.service.impl;
 
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -13,21 +12,19 @@
 import org.jeecg.common.api.vo.FileUploadResult;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.dnc.entity.*;
 import org.jeecg.modules.dnc.exception.ExceptionCast;
 import org.jeecg.modules.dnc.mapper.DocInfoMapper;
+import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
+import org.jeecg.modules.dnc.request.DocInfoUploadRequest;
+import org.jeecg.modules.dnc.response.*;
 import org.jeecg.modules.dnc.service.*;
 import org.jeecg.modules.dnc.utils.CamelToSnakeRegex;
 import org.jeecg.modules.dnc.utils.ValidateUtil;
-
-
-import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
-import org.jeecg.modules.dnc.request.DocInfoUploadRequest;
 import org.jeecg.modules.dnc.utils.file.FileUtilS;
-
-import org.jeecg.modules.dnc.entity.*;
-import org.jeecg.modules.dnc.response.*;
+import org.jeecg.modules.dncFlow.entity.DispatchFile;
+import org.jeecg.modules.dncFlow.service.IDispatchFileService;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
-import org.jeecg.modules.system.service.ISysDictService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -59,7 +56,8 @@
     private IDeviceInfoService deviceInfoService;
     @Autowired
     private IDeviceGroupService deviceGroupService;
-
+    @Autowired
+    private IDispatchFileService dispatchFileService;
 
     /*澶囦唤澶勭悊*/
     @Override
@@ -137,11 +135,22 @@
 
                 }
             }
-
         }
         boolean saveBool = super.save(docInfo);
+        if (uploadRequest.getIsApprove()&&saveBool){
+            //瑙﹀彂瀹$
+            DispatchFile dispatchFile = new DispatchFile();
+            dispatchFile.setDocId(docInfo.getDocId());
+            dispatchFile.setFileId(docFile.getFileId());
+            dispatchFile.setAttributionId(uploadRequest.getAttributionId());
+            dispatchFile.setAttributionType(String.valueOf(uploadRequest.getAttributionType()));
+            dispatchFile.setDocClassCode(uploadRequest.getDocClassCode());
+            dispatchFileService.saveDispatchFile(dispatchFile);
+        }
         return saveBool;
     }
+
+
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
@@ -161,7 +170,7 @@
         }
         String  recF =  pathFile.substring(0,recNum);//灏嗚繑鍥瀌ef}ab
         Integer equipmentId = recF.lastIndexOf("\\");
-        String deviceNo = recF.substring(equipmentId+1,recF.length());
+        String deviceNo = recF.substring(equipmentId+1);
         if (StringUtils.isEmpty(deviceNo)) {
             return false;
         }
@@ -528,10 +537,12 @@
         }
         queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"u.create_time",docQuery.getStartTime()+" 00:00:00");
         queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"u.create_time",docQuery.getEndTime()+" 23:59:59");
-        if (("desc").equals(docQuery.getOrder())){
-            queryWrapper.orderByDesc("u."+ CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
-        }else {
-            queryWrapper.orderByAsc("u."+CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
+        if (StrUtil.isNotEmpty(docQuery.getColumn())){
+            if (("desc").equals(docQuery.getOrder())){
+                queryWrapper.orderByDesc("u."+ CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
+            }else {
+                queryWrapper.orderByAsc("u."+CamelToSnakeRegex.camelToSnake(docQuery.getColumn()));
+            }
         }
     }
 
@@ -659,10 +670,7 @@
     @Transactional(rollbackFor = {Exception.class})
     public boolean deleteByDocAttr(Integer attrType, String attrId) {
         int i = super.getBaseMapper().deleteByDocAttr(attrType, attrId);
-        if(i >= 0) {
-            return true;
-        }
-        return false;
+        return i >= 0;
     }
 
     @Override
@@ -789,6 +797,7 @@
         }
 
         QueryWrapper<DocInfo> queryWrapper = Wrappers.query();
+        queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocId()),"u.doc_id",docQuery.getDocId());
         queryWrapper.eq("r.attribution_type", docQuery.getAttributionType()).eq("r.attribution_id", docQuery.getAttributionId())
                 .eq("r.classification_id", docClassification.getClassificationId());
         if (StringUtils.isNotEmpty(docQuery.getDocName())) {
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 d080ac3..b5e0bb4 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
@@ -161,7 +161,7 @@
         stream.setComponentId(null);
         stream.setPartsId(null);
         stream.setProcessName(stream.getProcessName().toUpperCase());
-        stream.setProcessCode(null);
+        stream.setProcessCode(stream.getProcessCode().toUpperCase());
         boolean b = super.updateById(stream);
         //鍚屾淇敼缁撴瀯鏍�
         ProductMix productMix = productMixService.getById(Long.parseLong(id));
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java
index dec1d4f..e799e3a 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java
@@ -10,7 +10,6 @@
 import org.jeecg.modules.dnc.service.*;
 import org.jeecg.modules.dnc.ucenter.UserDepartExt;
 import org.jeecg.modules.dnc.utils.ValidateUtil;
-import org.jeecg.modules.system.entity.DncDevicePermission;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -133,6 +132,7 @@
             case "4":
                 //宸ヨ壓瑙勭▼鐗堟湰鍙�
                 processSpecVersionPermissionService.save(new ProcessSpecVersionPermission(id, userId));
+                break;
             case "5":
                 // 宸ュ簭鏉冮檺
                 processStreamPermissionService.save(new ProcessionPermission(id, userId));
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java
new file mode 100644
index 0000000..6e7f712
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java
@@ -0,0 +1,192 @@
+package org.jeecg.modules.dncFlow.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.dncFlow.entity.DispatchFile;
+import org.jeecg.modules.dncFlow.service.IDispatchFileService;
+import org.jeecg.modules.dncFlow.vo.DispatchFileFlowTaskVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+ /**
+ * @Description: nc绋嬪簭涓庣數瀛愬浘鐗堢娲�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Api(tags="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�")
+@RestController
+@RequestMapping("/dncFlow/dispatchFile")
+@Slf4j
+public class DispatchFileController extends JeecgController<DispatchFile, IDispatchFileService> {
+	@Autowired
+	private IDispatchFileService dispatchFileService;
+
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param dispatchFile
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鍒嗛〉鍒楄〃鏌ヨ", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<DispatchFile>> queryPageList(DispatchFile dispatchFile,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<DispatchFile> queryWrapper = QueryGenerator.initQueryWrapper(dispatchFile, req.getParameterMap());
+		Page<DispatchFile> page = new Page<DispatchFile>(pageNo, pageSize);
+		IPage<DispatchFile> pageList = dispatchFileService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	 /**
+	  * 閲嶆柊鍚姩
+	  * @param id
+	  * @return
+	  */
+	 @AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閲嶆柊鍚姩")
+	 @ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閲嶆柊鍚姩", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閲嶆柊鍚姩")
+	 @GetMapping(value = "/saveDispatchFile")
+	 public Result<?> saveDispatchFile(String id){
+		 return dispatchFileService.reStartDispatchFile(id);
+	 }
+
+
+	 /**
+	  * 瀹℃壒鎿嶄綔
+	  * @param dispatchFileFlowTaskVo
+	  * @return
+	  */
+	 @AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-瀹℃壒鎿嶄綔")
+	 @ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-瀹℃壒鎿嶄綔", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-瀹℃壒鎿嶄綔")
+	 @GetMapping(value = "/approval")
+	 public Result<?> approval(DispatchFileFlowTaskVo dispatchFileFlowTaskVo){
+		 return dispatchFileService.auditDispatchFile(dispatchFileFlowTaskVo);
+	 }
+
+	/**
+	 *   娣诲姞
+	 *
+	 * @param dispatchFile
+	 * @return
+	 */
+	@AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-娣诲姞")
+	@ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-娣诲姞", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-娣诲姞")
+	//@RequiresPermissions("org.jeecg.modules:nc_dispatch_file:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody DispatchFile dispatchFile) {
+		dispatchFileService.save(dispatchFile);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+
+	/**
+	 *  缂栬緫
+	 *
+	 * @param dispatchFile
+	 * @return
+	 */
+	@AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-缂栬緫")
+	@ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-缂栬緫", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-缂栬緫")
+	//@RequiresPermissions("org.jeecg.modules:nc_dispatch_file:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody DispatchFile dispatchFile) {
+		dispatchFileService.updateById(dispatchFile);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閫氳繃id鍒犻櫎", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閫氳繃id鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:nc_dispatch_file:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		dispatchFileService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鎵归噺鍒犻櫎")
+	@ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鎵归噺鍒犻櫎", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鎵归噺鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:nc_dispatch_file:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.dispatchFileService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閫氳繃id鏌ヨ")
+	@ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閫氳繃id鏌ヨ", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<DispatchFile> queryById(@RequestParam(name="id",required=true) String id) {
+		DispatchFile dispatchFile = dispatchFileService.getById(id);
+		if(dispatchFile==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(dispatchFile);
+	}
+
+	 @GetMapping(value = "/selectVoById")
+	 public Result<?> selectVoById(@RequestParam(name="id") String id){
+		 return dispatchFileService.queryDispatchFile(id);
+	 }
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param dispatchFile
+    */
+    //@RequiresPermissions("org.jeecg.modules:nc_dispatch_file:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, DispatchFile dispatchFile) {
+        return super.exportXls(request, dispatchFile, DispatchFile.class, "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("nc_dispatch_file:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, DispatchFile.class);
+    }
+
+}
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 4f258ee..833ab90 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
@@ -23,6 +23,9 @@
     private String componentId;
     @TableField(value = "parts_id")
     private String partsId;
+    //宸ヨ壓瑙勭▼id
+    @TableField(value = "psv_id")
+    private String psvId;
     @TableField(value = "process_id")
     private String processId;
     @TableField(value = "step_id")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/DispatchFile.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/DispatchFile.java
new file mode 100644
index 0000000..b70bfee
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/DispatchFile.java
@@ -0,0 +1,112 @@
+package org.jeecg.modules.dncFlow.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: nc绋嬪簭涓庣數瀛愬浘鐗堢娲�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("nc_dispatch_file")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="nc_dispatch_file瀵硅薄", description="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�")
+public class  DispatchFile implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**浜у搧id*/
+	@Excel(name = "浜у搧id", width = 15)
+    @ApiModelProperty(value = "浜у搧id")
+    private String productId;
+	/**閮ㄤ欢id*/
+	@Excel(name = "閮ㄤ欢id", width = 15)
+    @ApiModelProperty(value = "閮ㄤ欢id")
+    private String componentId;
+	/**闆朵欢id*/
+	@Excel(name = "闆朵欢id", width = 15)
+    @ApiModelProperty(value = "闆朵欢id")
+    private String partsId;
+	/**宸ヨ壓瑙勭▼id*/
+	@Excel(name = "宸ヨ壓瑙勭▼id", width = 15)
+    @ApiModelProperty(value = "宸ヨ壓瑙勭▼id")
+    private String psvId;
+	/**宸ュ簭id*/
+	@Excel(name = "宸ュ簭id", width = 15)
+    @ApiModelProperty(value = "宸ュ簭id")
+    private String processId;
+	/**宸ユid*/
+	@Excel(name = "宸ユid", width = 15)
+    @ApiModelProperty(value = "宸ユid")
+    private String stepId;
+    /**鎵�灞濱D*/
+    @Excel(name = "鎵�灞濱D", width = 15)
+    @ApiModelProperty(value = "鎵�灞濱D")
+    private String attributionId;
+    /**鎵�灞瀟ype*/
+    @Excel(name = "鎵�灞瀟ype", width = 15)
+    @ApiModelProperty(value = "鎵�灞瀟ype")
+    private String attributionType;
+    /**鏂囦欢绫诲瀷*/
+    @Excel(name = "鏂囦欢绫诲瀷", width = 15)
+    @ApiModelProperty(value = "鏂囦欢绫诲瀷")
+    private String docClassCode;
+	/**璁惧绫籭d*/
+	@Excel(name = "璁惧绫籭d", width = 15)
+    @ApiModelProperty(value = "璁惧绫籭d")
+    private String deviceTypeId;
+	/**鏂囨。id*/
+	@Excel(name = "鏂囨。id", width = 15)
+    @ApiModelProperty(value = "鏂囨。id")
+    private String docId;
+	/**鏂囦欢琛╥d*/
+	@Excel(name = "鏂囦欢琛╥d", width = 15)
+    @ApiModelProperty(value = "鏂囦欢琛╥d")
+    private String fileId;
+	/**褰撳墠鑺傜偣*/
+	@Excel(name = "褰撳墠鑺傜偣", width = 15)
+    @ApiModelProperty(value = "褰撳墠鑺傜偣")
+    private String currentNode;
+	/**鑺傜偣鐘舵��*/
+	@Excel(name = "鑺傜偣鐘舵��", width = 15)
+    @ApiModelProperty(value = "鑺傜偣鐘舵��")
+    private String nodeState;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+
+    /**鐢宠鐞嗙敱*/
+    @ApiModelProperty(value = "鐢宠鐞嗙敱")
+    private transient String organization;
+}
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
deleted file mode 100644
index c52e8b6..0000000
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskDataVo.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.jeecg.modules.dncFlow.entity;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-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;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * @Description:宸ヤ綔娴佷换鍔℃暟鎹�
- */
-@Data
-@ApiModel(value="act_ru_task", description="鎴戠殑寰呭姙")
-public class WorkTaskDataVo implements Serializable {
-	/**涓婚敭*/
-//    @TableField("id_")
-    private String id;
-    /**鐗堟湰鍙凤紝鐢ㄤ簬涔愯閿佹帶鍒跺苟鍙戞洿鏂�*/
-//    @TableField("rev_")
-    private int rev;
-    /**鎵ц瀹炰緥ID锛屼笌鎵ц瀹炰緥琛ㄤ腑鐨処D瀛楁鍏宠仈*/
-//    @TableField("execution_id_")
-    private String executionId;
-    /**娴佺▼瀹炰緥ID锛屼笌娴佺▼瀹炰緥琛ㄤ腑鐨処D瀛楁鍏宠仈*/
-//    @TableField("proc_inst_id_")
-    private String procInstId;
-    /**娴佺▼瀹氫箟ID锛屼笌娴佺▼瀹氫箟琛ㄤ腑鐨処D瀛楁鍏宠仈*/
-//    @TableField("proc_def_id_")
-    private String procDefId;
-    /**浠诲姟鍚嶇О*/
-//    @TableField("name_")
-    private String name;
-    /**浠诲姟瀹氫箟Key锛屼笌娴佺▼瀹氫箟琛ㄤ腑鐨凨EY瀛楁鍏宠仈*/
-//    @TableField("task_def_key_")
-    private String taskDefKey;
-    /**浠诲姟鐨勫姙鐞嗕汉锛屽嵆瀹為檯鎵ц浠诲姟鐨勭敤鎴�*/
-//    @TableField("assignee_")
-    private String assignee;
-    /**浠诲姟鐨勪紭鍏堢骇*/
-//    @TableField("priority_")
-    private int priority;
-    /**	浠诲姟鍒涘缓鏃堕棿*/
-//    @TableField("create_time_")
-    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-    /**		浠诲姟鐨勬殏鍋滅姸鎬侊紝鐢ㄤ簬鎺у埗浠诲姟鐨勬殏鍋滃拰鎭㈠*/
-//    @TableField("suspension_state_")
-    private int suspensionState;
-    /**	娴佺▼鍙橀噺*/
-    private Map<String,Object> variables;
-//    @TableField("act_status")
-    @ApiModelProperty(value = "娴佺▼鐘舵�佽鏄庯紝鏈夛細鍚姩  鎾ゅ洖  椹冲洖  瀹℃壒涓�  瀹℃壒閫氳繃  瀹℃壒寮傚父")
-    private String actStatus;
-//    @TableField("title")
-    @ApiModelProperty(value = "娴佺▼涓氬姟绠�瑕佹弿杩�")
-    private String title;
-//    @TableField("data_id")
-    @ApiModelProperty(value = "涓氬姟琛╥d锛岀悊璁哄敮涓�")
-    private String dataId;
-
-    @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_")
-//    private String taskDefId;
-//    /**鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("scope_id_")
-//    private String scopeId;
-//    /**鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("sub_scope_id_")
-//    private String subScopeId;
-//    /**鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("scope_type_")
-//    private String scopeType;
-//    /**鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("scope_definition_id_")
-//    private String scopeDefinitionId;
-//    /**鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("propagated_stage_inst_id_")
-//    private String propagatedStageInstId;
-//    /**鐖朵换鍔D锛岀敤浜庤〃绀轰换鍔$殑灞傜骇鍏崇郴 鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("parent_task_id_")
-//    private String parentTaskId;
-//    /**	浠诲姟鎻忚堪 鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("description_")
-//    private String description;
-//    /**浠诲姟鐨勬墍鏈夎�咃紝鍗充换鍔″垎閰嶇粰鐨勭敤鎴� 鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("owner_")
-//    private String owner;
-//    /**濮旀淳浜猴紝鐢ㄤ簬璁板綍浠诲姟鐨勫娲句汉锛堝鏋滄湁濮旀淳鎿嶄綔锛� 鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("delegation_")
-//    private String delegation;
-//    /**	浠诲姟鎴鏃ユ湡 鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("due_date_")
-//    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-//    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-//    private Date dueDate;
-//    /**	浠诲姟鐨勫垎绫� 鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("category_")
-//    private String category;
-//    /**	浠诲姟琛ㄥ崟Key锛岀敤浜庝笌琛ㄥ崟寮曟搸闆嗘垚 鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("form_key_")
-//    private String formKey;
-//    /**	鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("claim_time_")
-//    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-//    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-//    private Date claimTime;
-//    /**	鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("is_count_enabled_")
-//    private int iscountEnabled;
-//    /**	鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("var_count_")
-//    private int varCount;
-//    /**	鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("id_link_count_")
-//    private int idLinkCount;
-//    /**	鏆傛椂鐢ㄤ笉涓�*/
-//    @TableField("sub_task_count_")
-//    private int subtaskCount;
-}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/DispatchFileMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/DispatchFileMapper.java
new file mode 100644
index 0000000..aeee2f1
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/DispatchFileMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.dncFlow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.dncFlow.entity.DispatchFile;
+
+/**
+ * @Description: nc绋嬪簭涓庣數瀛愬浘鐗堢娲�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface DispatchFileMapper extends BaseMapper<DispatchFile> {
+
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IHisWorkTaskMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IHisWorkTaskMapper.java
deleted file mode 100644
index e7318d6..0000000
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IHisWorkTaskMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.jeecg.modules.dncFlow.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Param;
-import org.jeecg.modules.dncFlow.entity.HisWorkTask;
-
-import java.util.List;
-
-public interface IHisWorkTaskMapper extends BaseMapper<HisWorkTask> {
-
-    List<HisWorkTask> queryHisTaskList(@Param("drapprovedataId") String drapprovedataId);
-
-    List<HisWorkTask> queryJjHisTaskByJjId(@Param("id") String id);
-    List<HisWorkTask> queryJjGgHisTaskByJjId(@Param("id") String id);
-    List<HisWorkTask> queryLsHisTaskByJjId(@Param("id") String id);
-    List<HisWorkTask> queryFxHisTaskByJjId(@Param("id") String id);
-}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/DispatchFileMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/DispatchFileMapper.xml
new file mode 100644
index 0000000..c19062e
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/DispatchFileMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.dncFlow.mapper.DispatchFileMapper">
+
+</mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/HisWorkTaskMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/HisWorkTaskMapper.xml
deleted file mode 100644
index c164cb5..0000000
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/HisWorkTaskMapper.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.jeecg.modules.dncFlow.mapper.IHisWorkTaskMapper">
-    <select id="queryHisTaskList" resultType="org.jeecg.modules.dncFlow.entity.HisWorkTask">
-        SELECT
-            fb.id AS id,
-            aht.NAME_ AS name,
-            aht.DESCRIPTION_ AS cause,
-            su.realname AS assignee,
-            aht.START_TIME_ AS startTime,
-            aht.END_TIME_ AS endTime,
-            assign.status as status
-        FROM
-            flow_my_business fb,
-            act_hi_taskinst aht,
-            NC_ASSIGN_FILE_STREAM assign,
-            sys_user su
-        WHERE
-            fb.data_id= #{drapprovedataId}
-          AND fb.process_instance_id= aht.PROC_INST_ID_
-          AND su.username= aht.ASSIGNEE_
-          AND fb.data_id= assign.STREAM_ID
-        ORDER BY
-            aht.START_TIME_ ASC
-    </select>
-    <select id="queryJjHisTaskByJjId" resultType="org.jeecg.modules.dncFlow.entity.HisWorkTask">
-        select fb.id            as id,
-               aht.NAME_        as name,
-               su.realname      as assignee,
-               aht.START_TIME_  as startTime,
-               aht.END_TIME_    as endTime,
-               aht.DESCRIPTION_ as cause
-        from flow_my_business fb
-                 left join plm_mbom_jijiagy_approval pmjja on pmjja.id = fb.data_id
-                 left join plm_mbom_procedurespecification pmjj on pmjj.id = pmjja.details
-                 left join act_hi_taskinst aht on fb.process_instance_id = aht.PROC_INST_ID_
-                 left join sys_user su on su.username = aht.ASSIGNEE_
-        where pmjj.id = #{id}
-        ORDER BY aht.START_TIME_ ASC
-    </select>
-
-    <select id="queryJjGgHisTaskByJjId" resultType="org.jeecg.modules.dncFlow.entity.HisWorkTask">
-        select fb.id           as id,
-               aht.NAME_       as name,
-               su.realname   as assignee,
-               aht.START_TIME_ as startTime,
-               aht.END_TIME_   as endTime,
-               aht.DESCRIPTION_ as cause
-        from flow_my_business fb
-                 left join plm_mbom_jjgg_approval pmjja on pmjja.id = fb.data_id
-                 left join plm_mbom_jjgg pmjj on pmjj.id = pmjja.details
-                 left join act_hi_taskinst aht on fb.process_instance_id = aht.PROC_INST_ID_
-                 left join sys_user su on su.username = aht.ASSIGNEE_
-        where pmjj.id = #{id}
-        ORDER BY aht.START_TIME_ ASC
-    </select>
-
-    <select id="queryLsHisTaskByJjId" resultType="org.jeecg.modules.dncFlow.entity.HisWorkTask">
-        select fb.id           as id,
-               aht.NAME_       as name,
-               su.realname   as assignee,
-               aht.START_TIME_ as startTime,
-               aht.END_TIME_   as endTime,
-               aht.DESCRIPTION_ as cause
-        from flow_my_business fb
-                 left join plm_mbom_approval_lsgy pmjja on pmjja.id = fb.data_id
-                 left join plm_mbom_lsgy pmjj on pmjj.id = pmjja.details
-                 left join act_hi_taskinst aht on fb.process_instance_id = aht.PROC_INST_ID_
-                 left join sys_user su on su.username = aht.ASSIGNEE_
-        where pmjj.id = #{id}
-        ORDER BY aht.START_TIME_ ASC
-    </select>
-
-    <select id="queryFxHisTaskByJjId" resultType="org.jeecg.modules.dncFlow.entity.HisWorkTask">
-        select fb.id           as id,
-               aht.NAME_       as name,
-               su.realname   as assignee,
-               aht.START_TIME_ as startTime,
-               aht.END_TIME_   as endTime,
-               aht.DESCRIPTION_ as cause
-        from flow_my_business fb
-                 left join plm_mbom_approval_fxgy pmjja on pmjja.id = fb.data_id
-                 left join plm_mbom_fxgy pmjj on pmjj.id = pmjja.details
-                 left join act_hi_taskinst aht on fb.process_instance_id = aht.PROC_INST_ID_
-                 left join sys_user su on su.username = aht.ASSIGNEE_
-        where pmjj.id = #{id}
-        ORDER BY aht.START_TIME_ ASC
-    </select>
-</mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java
new file mode 100644
index 0000000..cdacf7e
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java
@@ -0,0 +1,42 @@
+package org.jeecg.modules.dncFlow.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.dncFlow.entity.DispatchFile;
+import org.jeecg.modules.dncFlow.vo.DispatchFileFlowTaskVo;
+
+/**
+ * @Description: nc绋嬪簭涓庣數瀛愬浘鐗堢娲�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+public interface IDispatchFileService extends IService<DispatchFile> {
+
+    /**
+     * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹�
+     * @param dispatchFile
+     * @return
+     */
+    Result<?> saveDispatchFile(DispatchFile dispatchFile);
+
+    /**
+     * 閲嶆柊鍚姩
+     * @param id
+     */
+    Result<?> reStartDispatchFile(String id);
+
+    /**
+     * 瀹℃壒鎿嶄綔
+     * @param dispatchFileFlowTaskVo
+     * @return
+     */
+    Result<?> auditDispatchFile(DispatchFileFlowTaskVo dispatchFileFlowTaskVo);
+
+    /**
+     * 鏌ヨ瀹$鍩烘湰淇℃伅
+     * @param id
+     */
+    Result<?> queryDispatchFile(String id);
+
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IHisWorkTaskService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IHisWorkTaskService.java
deleted file mode 100644
index 2ce2595..0000000
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IHisWorkTaskService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.jeecg.modules.dncFlow.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.dncFlow.entity.HisWorkTask;
-
-import java.util.List;
-
-public interface IHisWorkTaskService extends IService<HisWorkTask> {
-
-    List<HisWorkTask> queryHisTaskList(String drapprovedataId);
-    List<HisWorkTask> queryJjHisTaskByJjId(String id);
-
-    List<HisWorkTask> queryJjGgHisTaskByJjId(String id);
-    List<HisWorkTask> queryLsHisTaskByJjId(String id);
-    List<HisWorkTask> queryFxHisTaskByJjId(String id);
-}
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 a3c1e93..34d3494 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
@@ -289,6 +289,10 @@
         //flowable澶勭悊
         FlowTaskVo flowTaskVo = new FlowTaskVo();
         BeanUtils.copyProperties(assignFlowTaskVo, flowTaskVo);
+        Map<String, Object> values=new HashMap<>();
+        values.put("dataId", assignFlowTaskVo.getDataId());
+        flowTaskVo.setTaskId(assignFlowTaskVo.getTaskId());
+        flowTaskVo.setValues(values);
         flowTaskService.complete(flowTaskVo);
         //鏇存柊瀵硅薄灏佽
         AssignFileStream up = new AssignFileStream();
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java
new file mode 100644
index 0000000..b768b7e
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java
@@ -0,0 +1,359 @@
+package org.jeecg.modules.dncFlow.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import org.apache.shiro.SecurityUtils;
+import org.flowable.engine.TaskService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.dnc.entity.*;
+import org.jeecg.modules.dnc.exception.ExceptionCast;
+import org.jeecg.modules.dnc.mapper.DocInfoMapper;
+import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
+import org.jeecg.modules.dnc.response.ActivitiCode;
+import org.jeecg.modules.dnc.response.CommonCode;
+import org.jeecg.modules.dnc.response.UcenterCode;
+import org.jeecg.modules.dnc.service.*;
+import org.jeecg.modules.dnc.utils.ValidateUtil;
+import org.jeecg.modules.dncFlow.entity.DispatchFile;
+import org.jeecg.modules.dncFlow.mapper.DispatchFileMapper;
+import org.jeecg.modules.dncFlow.service.IDispatchFileService;
+import org.jeecg.modules.dncFlow.vo.DispatchFileFlowTaskVo;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
+import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
+import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
+import org.jeecg.modules.flowable.service.IFlowDefinitionService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: nc绋嬪簭涓庣數瀛愬浘鐗堢娲�
+ * @Author: jeecg-boot
+ * @Date:   2025-03-19
+ * @Version: V1.0
+ */
+@Service("IDispatchFileService")
+public class DispatchFileServiceImpl extends ServiceImpl<DispatchFileMapper, DispatchFile> implements IDispatchFileService, FlowCallBackServiceI {
+
+    @Autowired
+    @Lazy
+    private IDocInfoService docInfoService;
+    @Autowired
+    private IProcessStreamService processStreamService;
+    @Autowired
+    private IWorkStepService workStepService;
+    @Autowired
+    private IPermissionStreamNewService permissionStreamNewService;
+    @Resource
+    private FlowCommonService flowCommonService;
+    @Resource
+    private IFlowDefinitionService flowDefinitionService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
+    @Autowired
+    private IDeviceTypeService deviceTypeService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    private DocInfoMapper docInfoMapper;
+    /**
+     * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹�
+     * @param dispatchFile
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public Result<?> saveDispatchFile(DispatchFile dispatchFile){
+        //鏍¢獙鍙傛暟
+        checkParam(dispatchFile);
+        //鑾峰彇鏂囦欢淇℃伅
+        DocInfo docInfo = docInfoService.getById(dispatchFile.getDocId());
+        PermissionStreamNew permissionStreams = getPermissionStreams(dispatchFile);
+        if (permissionStreams==null){
+            return Result.error("鐢ㄦ埛娌℃湁鏉冮檺");
+        }
+        dispatchFile.setAttributionType(dispatchFile.getAttributionType());
+        dispatchFile.setAttributionId(dispatchFile.getAttributionId());
+        dispatchFile.setDocClassCode(dispatchFile.getDocClassCode());
+        super.save(dispatchFile);
+        System.out.println("NC绋嬪簭鍜岀數瀛愭牱鏉垮绛炬祦绋嬶細" + dispatchFile.getDocId());
+        flowCommonService.initActBusiness(docInfo.getDocName()+"."+docInfo.getDocSuffix()+"鏂囦欢杩涜瀹$",
+                dispatchFile.getId(), "IDispatchFileService", "nc_dispatch_file", null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", dispatchFile.getId());
+        variables.put("organization", "瀵煎叆鏂囨。榛樿鍚姩娴佺▼");
+        variables.put("proofreading",true);
+        Result result= flowDefinitionService.startProcessInstanceByKey("nc_dispatch_file", variables);
+        if (!result.isSuccess()) {
+            super.removeById(dispatchFile.getId());
+        }else {
+            docInfo.setDocDispatchStatus(1);
+            docInfoService.updateById(docInfo);
+        }
+        return result;
+    }
+
+    /**
+     * 閲嶆柊鍚姩
+     * @param id
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public Result<?> reStartDispatchFile(String id){
+        DispatchFile dispatchFile = this.getById(id);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (!dispatchFile.getCreateBy().equals(user.getUsername())){
+            return Result.error("鎮ㄦ病鏈夋潈闄愰噸鏂板惎鍔�");
+        }
+        FlowMyBusiness flowMyBusiness=flowMyBusinessService.list(new QueryWrapper<FlowMyBusiness>()
+                .eq("data_id",dispatchFile.getId())).get(0);
+        String processInstanceId = flowMyBusiness.getProcessInstanceId();
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", dispatchFile.getId());
+        variables.put("organization", "閲嶆柊鍚姩");
+        String TaskId=taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult().getId();
+        taskService.complete(TaskId, variables);
+        return Result.ok("閲嶆柊鍚姩鎴愬姛");
+    }
+
+    /**
+     * 瀹℃壒鎿嶄綔
+     * @param dispatchFileFlowTaskVo
+     * @return
+     */
+    @Override
+    public Result<?> auditDispatchFile(DispatchFileFlowTaskVo dispatchFileFlowTaskVo) {
+        try {
+            // 鍙傛暟鏍¢獙
+            if (!ValidateUtil.validateString(dispatchFileFlowTaskVo.getTaskId()) || !ValidateUtil.validateString(dispatchFileFlowTaskVo.getDataId())) {
+                return Result.error(CommonCode.INVALID_PARAM.toString());
+            }
+            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+            String userId = user.getId();
+            dispatchFileFlowTaskVo.setAssignee(user.getUsername());
+            if (!ValidateUtil.validateString(userId)) {
+                return Result.error(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST.toString());
+            }
+
+            // 鏁版嵁鏌ヨ
+            DispatchFile dispatchFile = this.getById(dispatchFileFlowTaskVo.getDataId());
+            if (dispatchFile == null) {
+                return Result.error(CommonCode.INVALID_PARAM.toString());
+            }
+            DocInfo docInfo = docInfoService.getById(dispatchFile.getDocId());
+            if (docInfo == null) {
+                return Result.error(ActivitiCode.ACT_DOC_ERROR.toString());
+            }
+
+            // 璁剧疆娴佺▼鍙橀噺
+            Map<String, Object> values = setProcessVariables(dispatchFile, userId, dispatchFileFlowTaskVo);
+            dispatchFileFlowTaskVo.setValues(values);
+
+            // 瀹屾垚娴佺▼浠诲姟
+            Result result = flowTaskService.complete(dispatchFileFlowTaskVo);
+            if (result.isSuccess()) {
+                // 鏇存柊鐘舵��
+                updateStatus(dispatchFile, docInfo, dispatchFileFlowTaskVo);
+                docInfoService.updateById(docInfo);
+                this.updateById(dispatchFile);
+            } else {
+                return result;
+            }
+
+            return Result.OK("鎿嶄綔鎴愬姛");
+        } catch (Exception e) {
+            return Result.error("鎿嶄綔澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ瀹$鍩烘湰淇℃伅
+     * @param id
+     */
+    public Result<?> queryDispatchFile(String id){
+        DispatchFile dispatchFile=this.getById(id);
+        if (dispatchFile==null){
+            return Result.error("瀹$鍩烘湰淇℃伅涓嶅瓨鍦�");
+        }
+        DocInfoQueryRequest docInfoQueryRequest=new DocInfoQueryRequest();
+        docInfoQueryRequest.setDocId(dispatchFile.getDocId());
+        docInfoQueryRequest.setAttributionId(dispatchFile.getAttributionId());
+        docInfoQueryRequest.setAttributionType(Integer.valueOf(dispatchFile.getAttributionType()));
+        docInfoQueryRequest.setDocClassCode(dispatchFile.getDocClassCode());
+        List<DocInfo> docInfoList = docInfoService.findList(docInfoQueryRequest);
+        return Result.OK(docInfoList);
+    }
+
+    private Map<String, Object> setProcessVariables(DispatchFile dispatchFile, String userId, DispatchFileFlowTaskVo dispatchFileFlowTaskVo) {
+        Map<String, Object> values = new HashMap<>();
+        values.put("dataId", dispatchFile.getId());
+        values.put("organization", dispatchFile.getOrganization());
+        values.put("assignee", userId);
+        values.put("comment", dispatchFileFlowTaskVo.getComment());
+
+        if (StrUtil.isNotBlank(dispatchFileFlowTaskVo.getProofreadStatus())) {
+            values.put("proofreadStatus", dispatchFileFlowTaskVo.getProofreadStatus());
+        }
+        if (dispatchFileFlowTaskVo.getRatify() != null) {
+            values.put("ratify", dispatchFileFlowTaskVo.getRatify());
+        }
+        if (dispatchFileFlowTaskVo.getCut() != null) {
+            values.put("cut", dispatchFileFlowTaskVo.getCut());
+        }
+        if (dispatchFileFlowTaskVo.getStereotype() != null) {
+            values.put("stereotype", dispatchFileFlowTaskVo.getStereotype());
+        }
+        return values;
+    }
+
+    private void updateStatus(DispatchFile dispatchFile, DocInfo docInfo, DispatchFileFlowTaskVo dispatchFileFlowTaskVo) {
+        if (StrUtil.isNotBlank(dispatchFileFlowTaskVo.getProofreadStatus())) {
+            switch (dispatchFileFlowTaskVo.getProofreadStatus()) {
+                case "1":
+                    // 鐩存帴瀹氬瀷
+                    dispatchFile.setCurrentNode("5");
+                    docInfo.setDocDispatchStatus(5);
+                    break;
+                case "2":
+                    // 鏍″閫氳繃
+                    dispatchFile.setCurrentNode("2");
+                    docInfo.setDocDispatchStatus(2);
+                    break;
+                default:
+                    // 鏍″涓嶉�氳繃
+                    dispatchFile.setCurrentNode("1");
+                    docInfo.setDocDispatchStatus(1);
+                    break;
+            }
+        }
+        if (dispatchFileFlowTaskVo.getRatify() != null && dispatchFileFlowTaskVo.getRatify()) {
+            dispatchFile.setCurrentNode("3");
+            docInfo.setDocDispatchStatus(3);
+        }
+        if (dispatchFileFlowTaskVo.getCut() != null && dispatchFileFlowTaskVo.getCut()) {
+            dispatchFile.setCurrentNode("4");
+            docInfo.setDocDispatchStatus(4);
+        }
+        if (dispatchFileFlowTaskVo.getStereotype() != null && dispatchFileFlowTaskVo.getStereotype()) {
+            dispatchFile.setCurrentNode("5");
+            docInfo.setDocDispatchStatus(5);
+        }
+    }
+
+    //浼犲弬楠岃瘉
+    public boolean checkParam(DispatchFile dispatchFile) {
+        if (dispatchFile == null) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+        if (!ValidateUtil.validateString(dispatchFile.getAttributionId()) || !ValidateUtil.validateString(dispatchFile.getDocId())
+                || !ValidateUtil.validateString(dispatchFile.getFileId()) || !ValidateUtil.validateString(dispatchFile.getAttributionType())) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        if (!ValidateUtil.validateString(userId)) {
+            ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
+        }
+        return true;
+    }
+
+    //鑾峰彇鏂囦欢淇℃伅
+    private DocInfo getDocInfo(DispatchFile dispatchFile) {
+        DocInfo docInfo = docInfoService.getByDocAttrAndDocId(dispatchFile.getDocId(),
+                Integer.parseInt(dispatchFile.getAttributionType()), dispatchFile.getAttributionId());
+        if (docInfo == null || docInfo.getDocStatus() == 3) {
+            ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
+        }
+        return docInfo;
+    }
+
+
+    private PermissionStreamNew getPermissionStreams(DispatchFile dispatchFile) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        DeviceType deviceType = deviceTypeService.getById(dispatchFile.getAttributionId());
+        String attributionId = deviceType != null ? deviceType.getAttributionId() : dispatchFile.getAttributionId();
+
+        PermissionStreamNew permissionStreams;
+        if (dispatchFile.getAttributionType().equals("5")) {
+            // 宸ュ簭
+            permissionStreams = handleProcess(dispatchFile, attributionId, user);
+        } else {
+            // 宸ユ
+            permissionStreams = handleWorkStep(dispatchFile, attributionId, user);
+        }
+        if (permissionStreams == null) {
+            ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
+        }
+        return permissionStreams;
+    }
+
+    private PermissionStreamNew handleProcess(DispatchFile dispatchFile, String attributionId, LoginUser user) {
+        ProcessStream processStream = processStreamService.getById(attributionId);
+        if (processStream == null) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+        dispatchFile.setProductId(processStream.getProductId());
+        dispatchFile.setComponentId(processStream.getComponentId());
+        dispatchFile.setPartsId(processStream.getPartsId());
+        dispatchFile.setPsvId(processStream.getPsvId());
+        dispatchFile.setProcessId(processStream.getProcessId());
+        if (deviceTypeService.getById(dispatchFile.getAttributionId()) != null) {
+            dispatchFile.setDeviceTypeId(deviceTypeService.getById(dispatchFile.getAttributionId()).getId());
+        }
+        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(), user.getId(), "5");
+    }
+
+    private PermissionStreamNew handleWorkStep(DispatchFile dispatchFile, String attributionId, LoginUser user) {
+        WorkStep workStep = workStepService.getById(attributionId);
+        if (workStep == null) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+        dispatchFile.setProductId(workStep.getProductId());
+        dispatchFile.setComponentId(workStep.getComponentId());
+        dispatchFile.setPartsId(workStep.getPartsId());
+        dispatchFile.setPsvId(workStep.getPsvId());
+        dispatchFile.setProcessId(workStep.getProcessId());
+        dispatchFile.setStepId(workStep.getId());
+        if (deviceTypeService.getById(dispatchFile.getAttributionId()) != null) {
+            dispatchFile.setDeviceTypeId(deviceTypeService.getById(dispatchFile.getAttributionId()).getId());
+        }
+        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(workStep.getId(), user.getId(), "6");
+    }
+
+    @Override
+    public void afterFlowHandle(FlowMyBusiness business) {
+        business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣
+        business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟
+        business.getActStatus();
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return this.getById(dataId);
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return null;
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        String dataId = values.get("dataId").toString();
+        FlowMyBusiness flowMyBusiness=flowMyBusinessService.list(new QueryWrapper<FlowMyBusiness>().eq("data_id",dataId)).get(0);
+        return Lists.newArrayList(flowMyBusiness.getCreateBy());
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/HisWorkTaskServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/HisWorkTaskServiceImpl.java
deleted file mode 100644
index e33d63a..0000000
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/HisWorkTaskServiceImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.jeecg.modules.dncFlow.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.jeecg.modules.dncFlow.entity.HisWorkTask;
-import org.jeecg.modules.dncFlow.mapper.IHisWorkTaskMapper;
-import org.jeecg.modules.dncFlow.service.IHisWorkTaskService;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-@Service
-public class HisWorkTaskServiceImpl extends ServiceImpl<IHisWorkTaskMapper,HisWorkTask> implements IHisWorkTaskService {
-    @Override
-    public List<HisWorkTask> queryHisTaskList(String drapprovedataId) {
-        return baseMapper.queryHisTaskList(drapprovedataId);
-    }
-
-    @Override
-    public List<HisWorkTask> queryJjHisTaskByJjId(String id) {
-        return baseMapper.queryJjHisTaskByJjId(id);
-    }
-
-    @Override
-    public List<HisWorkTask> queryJjGgHisTaskByJjId(String id) {
-        return baseMapper.queryJjGgHisTaskByJjId(id);
-    }
-
-    @Override
-    public List<HisWorkTask> queryLsHisTaskByJjId(String id) {
-        return baseMapper.queryLsHisTaskByJjId(id);
-    }
-
-    @Override
-    public List<HisWorkTask> queryFxHisTaskByJjId(String id) {
-        return baseMapper.queryFxHisTaskByJjId(id);
-    }
-}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/WorkTaskServiceImplVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/WorkTaskServiceImplVo.java
deleted file mode 100644
index 94ae51c..0000000
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/WorkTaskServiceImplVo.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.jeecg.modules.dncFlow.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.flowable.engine.ProcessEngine;
-import org.flowable.engine.TaskService;
-import org.jeecg.modules.dncFlow.entity.WorkTaskDataVo;
-import org.jeecg.modules.dncFlow.mapper.IWorkTaskVoMapper;
-import org.jeecg.modules.dncFlow.service.IWorkTaskServiceVo;
-import org.jeecg.modules.dncFlow.vo.FlowMy;
-import org.jeecg.modules.system.service.ISysUserService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Map;
-
-@Service
-public class WorkTaskServiceImplVo extends ServiceImpl<IWorkTaskVoMapper, WorkTaskDataVo> implements IWorkTaskServiceVo {
-    @Autowired
-    ProcessEngine processEngine;
-    @Autowired
-    private ISysUserService sysUserService;
-    @Override
-    public IPage<WorkTaskDataVo> toTaskBySelf(FlowMy flowMy, Page page) {
-        IPage<WorkTaskDataVo> workTaskDataVoList = baseMapper.taskBySelf(flowMy,page);
-        workTaskDataVoList.getRecords().forEach(workTaskDataVo -> {
-            TaskService taskService = processEngine.getTaskService();
-            String taskId=workTaskDataVo.getId();
-            Map<String, Object> variables = taskService.getVariables(taskId);
-            String realname=sysUserService.getUserByName((String) variables.get("INITIATOR")).getRealname();
-            variables.put("INITIATOR",realname);
-            workTaskDataVo.setVariables(variables);
-        });
-        return workTaskDataVoList;
-    }
-}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/AssignFlowTaskVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/AssignFlowTaskVo.java
index 87c67d3..e26360e 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/AssignFlowTaskVo.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/AssignFlowTaskVo.java
@@ -1,47 +1,16 @@
 package org.jeecg.modules.dncFlow.vo;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
 
-import java.util.List;
-import java.util.Map;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
 
 /**
  * <p>娴佺▼浠诲姟<p>
  *
  */
 @Data
-@ApiModel("宸ヤ綔娴佷换鍔$浉鍏�--璇锋眰鍙傛暟")
-public class AssignFlowTaskVo {
-
-    @ApiModelProperty("鏁版嵁Id")
-    private String dataId;
-    @ApiModelProperty("浠诲姟Id")
-    private String taskId;
-
-    @ApiModelProperty("鐢ㄦ埛Id")
-    private String userId;
-
-    @ApiModelProperty("浠诲姟鎰忚")
-    private String comment;
-
-    @ApiModelProperty("娴佺▼瀹炰緥Id")
-    private String instanceId;
-
-    @ApiModelProperty("鑺傜偣")
-    private String targetKey;
-
-    @ApiModelProperty("娴佺▼鍙橀噺淇℃伅")
-    private Map<String, Object> values;
-
-    @ApiModelProperty("瀹℃壒浜�")
-    private String assignee;
-
-    @ApiModelProperty("鍊欓�変汉")
-    private List<String> candidateUsers;
-
-    @ApiModelProperty("瀹℃壒缁�")
-    private List<String> candidateGroups;
+@ApiModel("鎸囨淳璁惧宸ヤ綔娴佷换鍔$浉鍏�--璇锋眰鍙傛暟")
+public class AssignFlowTaskVo extends FlowTaskVo {
 
     private String xiugaiId;
 
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java
new file mode 100644
index 0000000..4dca430
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java
@@ -0,0 +1,37 @@
+package org.jeecg.modules.dncFlow.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
+@Data
+@ApiModel("NC绛炬淳宸ヤ綔娴佷换鍔$浉鍏�--璇锋眰鍙傛暟")
+public class DispatchFileFlowTaskVo extends FlowTaskVo {
+
+    /**鏍″绫诲瀷
+     * 1:鐩存帴瀹氬瀷
+     * 2:鏍″閫氳繃
+     * 3:鏍″涓嶉�氳繃
+     */
+    private String proofreadStatus;
+
+    /**
+     * 鎵瑰噯绫诲瀷
+     * true:鎵瑰噯閫氳繃
+     * false:鎵瑰噯涓嶉�氳繃
+     */
+    private Boolean ratify ;
+
+    /**
+     * 璇曞垏绫诲瀷
+     * true:璇曞垏閫氳繃
+     * false:璇曞垏涓嶉�氳繃
+     */
+    private Boolean cut;
+
+    /**
+     * 瀹氬瀷绫诲瀷
+     * true:瀹氬瀷閫氳繃
+     * false:瀹氬瀷涓嶉�氳繃
+     */
+    private Boolean stereotype;
+}
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 a4cd3b5..5c99fc1 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
@@ -128,11 +128,24 @@
     private transient String flowName;
 
     /**娴佺▼寮�濮嬫椂闂�*/
-    private transient String startTime;
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private transient Date startTime;
 
     /**娴佺▼缁撴潫鏃堕棿*/
-    private transient String endTime;
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private transient Date endTime;
 
     /**褰撳墠鐢ㄦ埛*/
     private transient String currentUser;
+
+    @ApiModelProperty(value = "鍓嶉┍鑺傜偣")
+    private transient String preNode;
+
+    /**澶勭悊鏃堕暱锛堝垎閽燂級*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "澶勭悊鏃堕暱锛堝垎閽燂級")
+    private transient String duration;
+
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusiness.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusiness.java
index da88ca8..2746244 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusiness.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusiness.java
@@ -29,7 +29,7 @@
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
 @ApiModel(value="flow_my_business瀵硅薄", description="娴佺▼涓氬姟鎵╁睍琛�")
-public class FlowMyBusiness implements Serializable {
+public class  FlowMyBusiness implements Serializable {
     private static final long serialVersionUID = 1L;
 
 	/**涓婚敭ID*/
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 27b7a5e..cf2f3ad 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
@@ -3,17 +3,24 @@
 <mapper namespace="org.jeecg.modules.flowable.apithird.business.mapper.FlowMyBusinessMapper">
     <select id="PageList" resultType="org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto">
         SELECT
-            flow_my_business.*,
-            ACT_HI_PROCINST.START_TIME_ as start_time,
-            ACT_HI_PROCINST.END_TIME_ as end_time,
-            ACT_RE_PROCDEF.NAME_ as flowName,
-            ACT_RE_PROCDEF.CATEGORY_ as category
+        flow_my_business.id,
+        flow_my_business.title,
+        flow_my_business.proposer,
+        flow_my_business.task_name,
+        flow_my_business.task_id,
+        ACT_RU_TASK.ASSIGNEE_ as todoUsers,
+        flow_my_business.done_Users,
+        ACT_HI_PROCINST.START_TIME_ AS start_time,
+        ACT_HI_PROCINST.END_TIME_ AS end_time,
+        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_
-        where
-            1 = 1
+        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 ACT_RU_TASK on flow_my_business.task_id = ACT_RU_TASK.ID_
+        WHERE
+        1 = 1
         <if test="flowMyBusinessDto.category != null and flowMyBusinessDto.category != ''">
             and ACT_RE_PROCDEF.CATEGORY_ = #{flowMyBusinessDto.category}
         </if>
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 b1bf9e6..ce39c92 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
@@ -4,13 +4,21 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.flowable.engine.HistoryService;
+import org.flowable.engine.history.HistoricActivityInstance;
 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.mapper.FlowMyBusinessMapper;
 import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
 import org.jeecg.modules.flowable.domain.dto.FlowTaskDto;
+import org.jeecg.modules.flowable.util.TimeUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * @Description: 娴佺▼涓氬姟鎵╁睍琛�
@@ -23,6 +31,34 @@
     @Autowired
     private FlowMyBusinessMapper flowMyBusinessMapper;
 
+    @Autowired
+    private HistoryService historyService;
+
+    public HistoricActivityInstance getPreviousNode(String taskId) {
+        // 鑾峰彇褰撳墠浠诲姟鐨勬墽琛屽疄渚� ID
+        String executionId = historyService.createHistoricTaskInstanceQuery()
+                .taskId(taskId)
+                .singleResult()
+                .getExecutionId();
+
+        // 鏌ヨ鍘嗗彶娲诲姩瀹炰緥
+        List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery()
+                .executionId(executionId)
+                .activityType("userTask")
+                .finished()
+                .orderByHistoricActivityInstanceEndTime()
+                .desc()
+                .list();
+
+        // 鍙栫涓�涓粨鏋滐紝鍗充笂涓�绾ц妭鐐�
+        if (!historicActivityInstances.isEmpty()) {
+            return historicActivityInstances.get(0);
+        }
+
+        return null;
+    }
+
+    @Transactional(isolation = Isolation.READ_COMMITTED)    // 闄嶄綆闅旂绾у埆
     public FlowMyBusiness getByDataId(String dataId) {
         LambdaQueryWrapper<FlowMyBusiness> flowMyBusinessLambdaQueryWrapper = new LambdaQueryWrapper<>();
         flowMyBusinessLambdaQueryWrapper.eq(FlowMyBusiness::getDataId,dataId)
@@ -58,6 +94,32 @@
      * @return
      */
     public IPage<FlowMyBusinessDto> getPageList(Page page, FlowMyBusinessDto flowMyBusinessDto){
-        return flowMyBusinessMapper.PageList(page,flowMyBusinessDto);
+        IPage<FlowMyBusinessDto> flowMyBusinessDtoIPage =flowMyBusinessMapper.PageList(page,flowMyBusinessDto);
+        flowMyBusinessDtoIPage.getRecords().forEach(item -> {
+            if (!("").equals(item.getTaskId())&&item.getTaskId()!=null){
+                HistoricActivityInstance historicActivityInstance = getPreviousNode(item.getTaskId());
+                if (historicActivityInstance != null){
+                    item.setPreNode(historicActivityInstance.getActivityName());
+                }
+            }
+                if (item.getDoneUsers() == null){
+                    item.setDoneUsers("");
+                }else {
+                    //鍘婚櫎[]
+                    item.setDoneUsers(item.getDoneUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
+                    item.setDoneUsers(item.getDoneUsers().replaceAll("\"", ""));
+                }
+                //璁$畻澶勭悊鏃堕暱
+                Date kssj=item.getStartTime();
+                Date jssj;
+                if (item.getEndTime() != null){
+                    jssj=item.getEndTime();
+                }else {
+                    jssj=new Date();
+                }
+                item.setDuration(TimeUtil.howLong(kssj, jssj,2));
+
+        });
+        return flowMyBusinessDtoIPage;
     }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java
similarity index 72%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java
index c4f0052..19c20a9 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamFlowController.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java
@@ -1,4 +1,4 @@
-package org.jeecg.modules.dncFlow.controller;
+package org.jeecg.modules.flowable.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -7,22 +7,22 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.engine.*;
+import org.flowable.engine.HistoryService;
+import org.flowable.engine.ProcessEngine;
+import org.flowable.engine.ProcessEngineConfiguration;
+import org.flowable.engine.RepositoryService;
 import org.flowable.engine.history.HistoricActivityInstance;
 import org.flowable.image.ProcessDiagramGenerator;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.dncFlow.entity.WorkTaskData;
-import org.jeecg.modules.dncFlow.entity.WorkTaskDataVo;
-import org.jeecg.modules.dncFlow.service.IAssignFileStreamService;
-import org.jeecg.modules.dncFlow.service.IHisWorkTaskService;
-import org.jeecg.modules.dncFlow.service.IWorkTaskService;
-import org.jeecg.modules.dncFlow.service.IWorkTaskServiceVo;
-import org.jeecg.modules.dncFlow.vo.FlowMy;
 import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
 import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
 import org.jeecg.modules.flowable.domain.dto.FlowTaskDto;
+import org.jeecg.modules.flowable.domain.vo.FlowMy;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
 import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.jeecg.modules.flowable.service.IHisWorkTaskService;
+import org.jeecg.modules.flowable.service.IWorkTaskServiceVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -38,13 +38,11 @@
 import java.util.List;
 
 @RestController
-@RequestMapping("/nc/assign/flow")
+@RequestMapping("assign/flow")
 @Slf4j
-public class AssignFileStreamFlowController {
+public class AssignStreamFlowController {
     @Autowired
     FlowMyBusinessServiceImpl flowMyBusinessService;
-    @Autowired
-    IWorkTaskService workTaskService;
     @Autowired
     IFlowTaskService flowTaskService;
     @Autowired
@@ -52,16 +50,13 @@
     @Autowired
     IHisWorkTaskService hisWorkTaskService;
     @Autowired
-    private TaskService taskService;
-    @Autowired
     private RepositoryService repositoryService;
     @Autowired
     private HistoryService historyService;
     @Autowired
     private ProcessEngine processEngine;
-    @Autowired
-    private IAssignFileStreamService assignFileStreamService;
 
+    @ApiOperation(value = "鑾峰彇鎬诲彴璐�", response = FlowTaskDto.class)
     @GetMapping(value = "/list")
     public Result<IPage<FlowMyBusinessDto>> queryPageList(FlowMyBusinessDto flowMyBusinessDto,
                                                        @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@@ -69,37 +64,9 @@
                                                        HttpServletRequest req) {
         Page page = new Page(pageNo, pageSize);
         IPage<FlowMyBusinessDto> pageList = flowMyBusinessService.getPageList(page, flowMyBusinessDto);
-        pageList.getRecords().forEach(item -> {
-            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);
     }
-    /*
-    * 鑾峰彇鎵�鏈変换鍔″垪琛�
-    * */
-    @GetMapping(value = "/workTasklist")
-    public Result<IPage<WorkTaskData>> queryTaskPageList(WorkTaskData workTaskData,
-                                                         @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                                         @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                                         HttpServletRequest req) {
-        List<WorkTaskData> list = workTaskService.queryAllworkTask();
-        IPage<WorkTaskData> pageList = new Page<>(pageNo, pageSize, list.size());
-        pageList.setRecords(list);
-        return Result.OK(pageList);
-    }
+
     @ApiOperation(value = "鑾峰彇寰呭姙鍒楄〃", response = FlowTaskDto.class)
     @GetMapping(value = "/todoList")
     public Result todoList(@ApiParam(value = "褰撳墠椤电爜", required = true) @RequestParam (name="pageNum", defaultValue="1") Integer pageNum,
@@ -127,8 +94,8 @@
 
     @ApiOperation(value = "鑾峰彇宸ヤ綔娴佸巻鍙蹭换鍔�", response = FlowTaskDto.class)
     @GetMapping(value = "/queryHisTaskList")
-    public Result<?> queryHisTaskList(@RequestParam(name = "drapprovedataId") String drapprovedataId) {
-        return Result.OK(hisWorkTaskService.queryHisTaskList(drapprovedataId));
+    public Result<?> queryHisTaskList(@RequestParam(name = "procInstId") String procInstId) {
+        return Result.OK(hisWorkTaskService.queryHisTaskByProcInstId(procInstId));
     }
 
     @ApiOperation(value = "瀹℃壒浠诲姟-鏌ョ湅娴佺▼鍥�")
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowHistoricalVo.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowHistoricalVo.java
new file mode 100644
index 0000000..3dec366
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowHistoricalVo.java
@@ -0,0 +1,73 @@
+package org.jeecg.modules.flowable.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 宸ヤ綔娴佸巻鍙茶褰曪紙閫氱敤锛�
+ *
+ */
+@Data
+@ApiModel("宸ヤ綔娴�--宸ヤ綔娴佸巻鍙茶褰曪紙閫氱敤锛�")
+public class FlowHistoricalVo {
+    /**
+     * 娴佺▼瀹炰緥ID
+     */
+    private String procInstId;
+    /**
+     * 涓氬姟閿�
+     */
+    private String businessKey;
+    /**
+     * 娴佺▼寮�濮嬫椂闂�
+     */
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+    /**
+     * 娴佺▼缁撴潫鏃堕棿
+     */
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+    /**
+     * 鑺傜偣鍚嶇О
+     */
+    private String actName;
+    /**
+     * 鑺傜偣绫诲瀷
+     */
+    private String actType;
+    /**
+     * 鑺傜偣寮�濮嬫椂闂�
+     */
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date actStartTime;
+    /**
+     * 鑺傜偣缁撴潫鏃堕棿
+     */
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date actEndTime;
+    /**
+     * 浠诲姟鍚嶇О
+     */
+    private String taskName;
+    /**
+     * 澶勭悊浜�
+     */
+    private String assignee;
+    /**
+     * 浠诲姟鑰楁椂
+     */
+    private String duration;
+    /**
+     * 浠诲姟鎻忚堪
+     */
+    private String description;
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowMy.java
similarity index 92%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowMy.java
index 0326124..f8d311f 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/FlowMy.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowMy.java
@@ -1,4 +1,4 @@
-package org.jeecg.modules.dncFlow.vo;
+package org.jeecg.modules.flowable.domain.vo;
 
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowTaskVo.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowTaskVo.java
index b2e1b06..574c55a 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowTaskVo.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowTaskVo.java
@@ -44,7 +44,4 @@
     @ApiModelProperty("瀹℃壒缁�")
     private List<String> candidateGroups;
 
-    private String xiugaiId;
-
-    private Integer status;
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/HisWorkTask.java
similarity index 96%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/HisWorkTask.java
index 4e9aa2d..e579a4f 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/HisWorkTask.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/HisWorkTask.java
@@ -1,4 +1,4 @@
-package org.jeecg.modules.dncFlow.entity;
+package org.jeecg.modules.flowable.domain.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskData.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskData.java
similarity index 98%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskData.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskData.java
index b4c34a0..510285d 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/WorkTaskData.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskData.java
@@ -1,4 +1,4 @@
-package org.jeecg.modules.dncFlow.entity;
+package org.jeecg.modules.flowable.domain.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskDataVo.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskDataVo.java
new file mode 100644
index 0000000..b4f9f6b
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/WorkTaskDataVo.java
@@ -0,0 +1,90 @@
+package org.jeecg.modules.flowable.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+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;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @Description:宸ヤ綔娴佷换鍔℃暟鎹�
+ */
+@Data
+@ApiModel(value="act_ru_task", description="鎴戠殑寰呭姙")
+public class WorkTaskDataVo implements Serializable {
+	/**涓婚敭*/
+//    @TableField("id_")
+    private String id;
+    /**鐗堟湰鍙凤紝鐢ㄤ簬涔愯閿佹帶鍒跺苟鍙戞洿鏂�*/
+//    @TableField("rev_")
+    private int rev;
+    /**鎵ц瀹炰緥ID锛屼笌鎵ц瀹炰緥琛ㄤ腑鐨処D瀛楁鍏宠仈*/
+//    @TableField("execution_id_")
+    private String executionId;
+    /**娴佺▼瀹炰緥ID锛屼笌娴佺▼瀹炰緥琛ㄤ腑鐨処D瀛楁鍏宠仈*/
+//    @TableField("proc_inst_id_")
+    private String procInstId;
+    /**娴佺▼瀹氫箟ID锛屼笌娴佺▼瀹氫箟琛ㄤ腑鐨処D瀛楁鍏宠仈*/
+//    @TableField("proc_def_id_")
+    private String procDefId;
+    /**浠诲姟鍚嶇О*/
+//    @TableField("name_")
+    private String name;
+    /**浠诲姟瀹氫箟Key锛屼笌娴佺▼瀹氫箟琛ㄤ腑鐨凨EY瀛楁鍏宠仈*/
+//    @TableField("task_def_key_")
+    private String taskDefKey;
+    /**浠诲姟鐨勫姙鐞嗕汉锛屽嵆瀹為檯鎵ц浠诲姟鐨勭敤鎴�*/
+//    @TableField("assignee_")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String assignee;
+    /**浠诲姟鐨勪紭鍏堢骇*/
+//    @TableField("priority_")
+    private int priority;
+    /**	浠诲姟鍒涘缓鏃堕棿*/
+//    @TableField("create_time_")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /**		浠诲姟鐨勬殏鍋滅姸鎬侊紝鐢ㄤ簬鎺у埗浠诲姟鐨勬殏鍋滃拰鎭㈠*/
+//    @TableField("suspension_state_")
+    private int suspensionState;
+    /**	娴佺▼鍙橀噺*/
+    private Map<String,Object> variables;
+//    @TableField("act_status")
+    @ApiModelProperty(value = "娴佺▼鐘舵�佽鏄庯紝鏈夛細鍚姩  鎾ゅ洖  椹冲洖  瀹℃壒涓�  瀹℃壒閫氳繃  瀹℃壒寮傚父")
+    private String actStatus;
+//    @TableField("title")
+    @ApiModelProperty(value = "娴佺▼涓氬姟绠�瑕佹弿杩�")
+    private String title;
+//    @TableField("data_id")
+    @ApiModelProperty(value = "涓氬姟琛╥d锛岀悊璁哄敮涓�")
+    private String dataId;
+    @ApiModelProperty(value = "鍓嶉┍鑺傜偣")
+    private String preNode;
+
+    @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;
+}
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IHisWorkTaskMapper.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IHisWorkTaskMapper.java
new file mode 100644
index 0000000..b3a1ff0
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IHisWorkTaskMapper.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.flowable.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.flowable.domain.vo.FlowHistoricalVo;
+import org.jeecg.modules.flowable.domain.vo.HisWorkTask;
+
+import java.util.List;
+
+public interface IHisWorkTaskMapper extends BaseMapper<HisWorkTask> {
+
+    List<HisWorkTask> queryHisTaskList(@Param("drapprovedataId") String drapprovedataId);
+
+    /**
+     * 閫氳繃娴佺▼瀹炰緥id鏌ヨ鍘嗗彶浠诲姟銆�
+     * @param procInstId
+     * @return
+     */
+    List<FlowHistoricalVo> queryHisTaskByProcInstId(@Param("procInstId") String procInstId);
+
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IWorkTaskMapper.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskMapper.java
similarity index 65%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IWorkTaskMapper.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskMapper.java
index 668380e..0a39a3b 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IWorkTaskMapper.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskMapper.java
@@ -1,7 +1,7 @@
-package org.jeecg.modules.dncFlow.mapper;
+package org.jeecg.modules.flowable.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.jeecg.modules.dncFlow.entity.WorkTaskData;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskData;
 
 import java.util.List;
 
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IWorkTaskVoMapper.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskVoMapper.java
similarity index 62%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IWorkTaskVoMapper.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskVoMapper.java
index e111cbb..492a969 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/IWorkTaskVoMapper.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/IWorkTaskVoMapper.java
@@ -1,15 +1,14 @@
-package org.jeecg.modules.dncFlow.mapper;
+package org.jeecg.modules.flowable.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
-import org.jeecg.modules.dncFlow.entity.WorkTaskDataVo;
-import org.jeecg.modules.dncFlow.vo.FlowMy;
-
-import java.util.List;
+import org.jeecg.modules.flowable.domain.vo.FlowMy;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
 
 public interface IWorkTaskVoMapper extends BaseMapper<WorkTaskDataVo> {
+
     IPage<WorkTaskDataVo> taskBySelf(@Param("flowMy") FlowMy flowMy, @Param("page") Page page);
-    List<WorkTaskDataVo> allList(@Param("userId") String userId);
+
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml
new file mode 100644
index 0000000..ac9df17
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.flowable.mapper.IHisWorkTaskMapper">
+    <select id="queryHisTaskList" resultType="org.jeecg.modules.flowable.domain.vo.HisWorkTask">
+        SELECT
+            fb.id AS id,
+            aht.NAME_ AS name,
+            aht.DESCRIPTION_ AS cause,
+            su.realname AS assignee,
+            aht.START_TIME_ AS startTime,
+            aht.END_TIME_ AS endTime,
+            assign.status as status
+        FROM
+            flow_my_business fb,
+            act_hi_taskinst aht,
+            NC_ASSIGN_FILE_STREAM assign,
+            sys_user su
+        WHERE
+            fb.data_id= #{drapprovedataId}
+          AND fb.process_instance_id= aht.PROC_INST_ID_
+          AND su.username= aht.ASSIGNEE_
+          AND fb.data_id= assign.STREAM_ID
+        ORDER BY
+            aht.START_TIME_ ASC
+    </select>
+    <select id="queryHisTaskByProcInstId" resultType="org.jeecg.modules.flowable.domain.vo.FlowHistoricalVo">
+        SELECT
+            p.PROC_INST_ID_ AS procInstId,
+            p.BUSINESS_KEY_ AS businessKey,
+            p.START_TIME_ AS startTime,
+            p.END_TIME_ AS endTime,
+            a.ACT_NAME_ AS actName,
+            a.ACT_TYPE_ AS actType,
+            a.START_TIME_ AS actStartTime,
+            a.END_TIME_ AS actEndTime,
+            c.NAME_ AS taskName,
+            c.ASSIGNEE_ AS assignee,
+            CASE
+                WHEN c.DURATION_ IS NOT NULL THEN
+                    CASE
+                        WHEN FLOOR(c.DURATION_ / 1000.0) = 0 THEN NULL
+                        ELSE FLOOR(c.DURATION_ / 1000.0)
+                        END
+                ELSE NULL
+                END AS duration,
+            c.DESCRIPTION_ AS description
+        FROM
+            act_hi_procinst p
+                LEFT JOIN act_hi_actinst a ON p.PROC_INST_ID_ = a.PROC_INST_ID_
+                LEFT JOIN ACT_HI_TASKINST c ON a.TASK_ID_ = c.ID_
+        WHERE
+            p.PROC_INST_ID_ = #{procInstId}
+          AND a.ACT_NAME_ IS NOT NULL
+        ORDER BY
+            COALESCE(a.END_TIME_, '9999-12-31') ASC;
+    </select>
+</mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskMapper.xml b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskMapper.xml
similarity index 86%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskMapper.xml
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskMapper.xml
index 3020aa0..78cd2da 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskMapper.xml
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.jeecg.modules.dncFlow.mapper.IWorkTaskMapper">
-    <select id="queryAllworkTask" resultType="org.jeecg.modules.dncFlow.entity.WorkTaskData">
+<mapper namespace="org.jeecg.modules.flowable.mapper.IWorkTaskMapper">
+    <select id="queryAllworkTask" resultType="org.jeecg.modules.flowable.domain.vo.WorkTaskData">
         select id_,rev_,execution_id_,proc_inst_id_,proc_def_id_,name_,task_def_key_,assignee_,priority_,create_time_,suspension_state_,task_def_id_,scope_id_,sub_scope_id_,scope_type_,scope_definition_id_,propagated_stage_inst_id_,parent_task_id_,description_,owner_,delegation_,due_date_,category_,form_key_,claim_time_,is_count_enabled_,var_count_,id_link_count_,sub_task_count_
         from act_ru_task ORDER BY create_time_ DESC
     </select>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskVoMapper.xml
similarity index 74%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskVoMapper.xml
index 1a23ed3..4137c80 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/mapper/xml/WorkTaskVoMapper.xml
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/WorkTaskVoMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.jeecg.modules.dncFlow.mapper.IWorkTaskVoMapper">
-    <select id="taskBySelf" resultType="org.jeecg.modules.dncFlow.entity.WorkTaskDataVo">
+<mapper namespace="org.jeecg.modules.flowable.mapper.IWorkTaskVoMapper">
+    <select id="taskBySelf" resultType="org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo">
         SELECT
             atask.id_ AS id,
             atask.rev_ AS rev,
@@ -10,7 +10,6 @@
             atask.proc_def_id_ AS procDefId,
             atask.name_ AS name,
             atask.task_def_key_ as taskDefKey,
-            su.realname as assignee,
             atask.priority_ AS priority,
             atask.create_time_ AS createTime,
             atask.suspension_state_ AS suspensionState,
@@ -23,15 +22,11 @@
             pro.name_ as flowName,
             pro.CATEGORY_ as category
         FROM
-            act_ru_task AS atask,
-            flow_my_business AS fmb,
-            ACT_RE_PROCDEF AS pro,
-            sys_user AS su
+            act_ru_task AS atask
+            LEFT JOIN flow_my_business fmb on atask.id_ = fmb.task_id
+            LEFT JOIN ACT_RE_PROCDEF pro on atask.PROC_DEF_ID_ = pro.id_
         WHERE
             atask.assignee_ = #{flowMy.username}
-          AND atask.id_ = fmb.task_id
-          AND atask.PROC_DEF_ID_ = pro.id_
-          AND atask.assignee_ = su.username
           <if test="flowMy.flowName!= null and flowMy.flowName!= ''">
               AND pro.name_ LIKE CONCAT('%',#{flowMy.flowName},'%')
           </if>
@@ -49,8 +44,5 @@
           </if>
         ORDER BY
             create_time_ DESC
-    </select>
-    <select id="allList" parameterType="String" resultType="org.jeecg.modules.dncFlow.entity.WorkTaskDataVo">
-        select * from act_ru_task
     </select>
 </mapper>
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IHisWorkTaskService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IHisWorkTaskService.java
new file mode 100644
index 0000000..e269602
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IHisWorkTaskService.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.flowable.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.flowable.domain.vo.FlowHistoricalVo;
+import org.jeecg.modules.flowable.domain.vo.HisWorkTask;
+
+import java.util.List;
+
+public interface IHisWorkTaskService extends IService<HisWorkTask> {
+
+    List<HisWorkTask> queryHisTaskList(String drapprovedataId);
+
+    /**
+     * 閫氳繃娴佺▼瀹炰緥id鏌ヨ鍘嗗彶浠诲姟銆�
+     * @param procInstId
+     * @return
+     */
+    List<FlowHistoricalVo> queryHisTaskByProcInstId(@Param("procInstId") String procInstId);
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IWorkTaskService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskService.java
similarity index 66%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IWorkTaskService.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskService.java
index 4d3f5b6..ad7ca6a 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IWorkTaskService.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskService.java
@@ -1,7 +1,7 @@
-package org.jeecg.modules.dncFlow.service;
+package org.jeecg.modules.flowable.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.dncFlow.entity.WorkTaskData;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskData;
 
 import java.util.List;
 
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IWorkTaskServiceVo.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskServiceVo.java
similarity index 67%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IWorkTaskServiceVo.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskServiceVo.java
index 55e8841..d69e423 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IWorkTaskServiceVo.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IWorkTaskServiceVo.java
@@ -1,10 +1,10 @@
-package org.jeecg.modules.dncFlow.service;
+package org.jeecg.modules.flowable.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.dncFlow.entity.WorkTaskDataVo;
-import org.jeecg.modules.dncFlow.vo.FlowMy;
+import org.jeecg.modules.flowable.domain.vo.FlowMy;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
 
 public interface IWorkTaskServiceVo extends IService<WorkTaskDataVo> {
 
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java
index edf2eb1..1efec6c 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java
@@ -24,7 +24,6 @@
 import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
 import org.jeecg.modules.flowable.apithird.common.constant.ProcessConstants;
 import org.jeecg.modules.flowable.apithird.common.enums.FlowComment;
-import org.jeecg.modules.flowable.apithird.entity.ActStatus;
 import org.jeecg.modules.flowable.apithird.entity.SysUser;
 import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
 import org.jeecg.modules.flowable.apithird.service.IFlowThirdService;
@@ -237,6 +236,7 @@
      * @return
      */
     @Override
+    @Transactional(rollbackFor = {Exception.class})
     public Result<?> startProcessInstanceByKey(String procDefKey, Map<String, Object> variables) {
         ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                 .processDefinitionKey(procDefKey)
@@ -269,15 +269,10 @@
             ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
             // 缁欑涓�姝ョ敵璇蜂汉鑺傜偣璁剧疆浠诲姟鎵ц浜哄拰鎰忚
             Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).active().singleResult();
-            if (!sysUser.getUsername().equals(task.getAssignee())){
-                return Result.error("褰撳墠鐢ㄦ埛涓嶆槸娴佺▼鍙戣捣浜�");
-            }
             if (Objects.nonNull(task)) {
-                taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getRealname() + "鍙戣捣娴佺▼鐢宠");
+                taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), variables.get("organization").toString());
                 taskService.setAssignee(task.getId(), sysUser.getUsername());
                 task.setDescription(variables.get("organization").toString());
-                // 鏇存柊浠诲姟
-                taskService.saveTask(task);
                 //taskService.complete(task.getId(), variables);
             }
             //璁剧疆鎵�鏈夌敵璇蜂汉
@@ -334,7 +329,7 @@
 
             business.setProcessDefinitionId(procDefId)
                     .setProcessInstanceId(processInstance.getProcessInstanceId())
-                    .setActStatus(ActStatus.start)
+////                    .setActStatus(ActStatus.start)
                     .setProposer(sysUser.getUsername())
                     .setTaskId(task2.getId())
                     .setTaskName(nextTask.getName())
@@ -347,7 +342,7 @@
         //    **娌℃湁涓嬩竴涓妭鐐癸紝娴佺▼宸茬粡缁撴潫浜�
             business.setProcessDefinitionId(procDefId)
                     .setProcessInstanceId(processInstance.getProcessInstanceId())
-                    .setActStatus(ActStatus.pass)
+//                    .setActStatus(ActStatus.pass)
                     .setProposer(sysUser.getUsername())
                     .setDoneUsers(doneUserList.toJSONString())
             ;
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowInstanceServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowInstanceServiceImpl.java
index 4d5a3db..1d0581b 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowInstanceServiceImpl.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowInstanceServiceImpl.java
@@ -1,6 +1,5 @@
 package org.jeecg.modules.flowable.service.impl;
 
-
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -17,11 +16,10 @@
 import org.jeecg.common.util.SpringContextUtils;
 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.entity.ActStatus;
+import org.jeecg.modules.flowable.apithird.common.exception.CustomException;
 import org.jeecg.modules.flowable.apithird.entity.SysUser;
 import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
 import org.jeecg.modules.flowable.apithird.service.IFlowThirdService;
-import org.jeecg.modules.flowable.apithird.common.exception.CustomException;
 import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
 import org.jeecg.modules.flowable.factory.FlowServiceFactory;
 import org.jeecg.modules.flowable.service.IFlowInstanceService;
@@ -122,7 +120,7 @@
             doneUserList.add(sysUser.getUsername());
         }
             business
-                    .setActStatus(ActStatus.recall)
+//                    .setActStatus(ActStatus.recall)
                     .setTaskId("")
                     .setTaskName("宸叉挙鍥�")
                     .setPriority("")
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 2bb58bd..ab62a88 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
@@ -42,7 +42,6 @@
 import org.jeecg.modules.flowable.apithird.common.constant.ProcessConstants;
 import org.jeecg.modules.flowable.apithird.common.enums.FlowComment;
 import org.jeecg.modules.flowable.apithird.common.exception.CustomException;
-import org.jeecg.modules.flowable.apithird.entity.ActStatus;
 import org.jeecg.modules.flowable.apithird.entity.SysUser;
 import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
 import org.jeecg.modules.flowable.apithird.service.IFlowThirdService;
@@ -96,6 +95,10 @@
             taskService.saveTask(task);
         }
         SysUser loginUser = iFlowThirdService.getLoginUser();
+        //鍒ゆ柇鐢ㄦ埛鏄惁鏈夋潈闄�
+        if (!task.getAssignee().equals(loginUser.getUsername())){
+            return Result.error("褰撳墠鐢ㄦ埛鏃犳潈闄�");
+        }
         if (DelegationState.PENDING.equals(task.getDelegationState())) {
             taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), taskVo.getComment());
             //taskService.resolveTask(taskVo.getTaskId(), taskVo.getValues());
@@ -103,7 +106,6 @@
             System.out.println("taskVo.getTaskId()--->taskVo.getInstanceId()--->FlowComment.NORMAL.getType()--->taskVo.getComment()"+taskVo.getTaskId() + "---" + taskVo.getInstanceId() + "---" + FlowComment.NORMAL.getType() + "---"+taskVo.getComment() );
             taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.NORMAL.getType(), taskVo.getComment());
             taskService.setAssignee(taskVo.getTaskId(), loginUser.getUsername());
-            //taskService.complete(taskVo.getTaskId(), taskVo.getValues());
         }
         /*======================瀹℃壒缁撴潫  鍥炶皟浠ュ強鍏抽敭鏁版嵁淇濆瓨======================*/
         //涓氬姟鏁版嵁id
@@ -157,8 +159,8 @@
 
         if (task2!=null && task.getTaskDefinitionKey().equals(task2.getTaskDefinitionKey())){
         //    * 褰撳墠鑺傜偣鏄細绛捐妭鐐癸紝娌℃湁璧板畬
-            business.setActStatus(ActStatus.doing)
-                    .setTaskId(task2.getId())
+            business.setTaskId(task2.getId())
+//                    .setActStatus(ActStatus.doing)
                     .setDoneUsers(doneUserList.toJSONString())
             ;
             String todoUsersStr = business.getTodoUsers();
@@ -202,8 +204,9 @@
                     //    鍓嶇浼犲叆鍊欓�変汉
                     collect_username = candidateUsers;
                 }
-                business.setActStatus(ActStatus.doing)
+                business
                         .setTaskId(task2.getId())
+//                        .setActStatus(ActStatus.doing)
                         .setTaskNameId(nextTask.getId())
                         .setTaskName(nextTask.getName())
                         .setPriority(nextTask.getPriority())
@@ -234,7 +237,7 @@
 
             } else {
                 //    **娌℃湁涓嬩竴涓妭鐐癸紝娴佺▼宸茬粡缁撴潫浜�
-                business.setActStatus(ActStatus.pass)
+                business
                         .setDoneUsers(doneUserList.toJSONString())
                         .setTodoUsers("")
                         .setTaskId("")
@@ -250,11 +253,13 @@
         if (flowCallBackService!=null)flowCallBackService.afterFlowHandle(business);
         return Result.OK();
     }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeByDateId(FlowTaskVo flowTaskVo){
         return this.complete(flowTaskVo);
     }
+
     @Override
     public void taskRejectByDataId(FlowTaskVo flowTaskVo){
         FlowMyBusiness business = flowMyBusinessService.getByDataId(flowTaskVo.getDataId());
@@ -409,8 +414,9 @@
             if (!doneUserList.contains(loginUser.getUsername())){
                 doneUserList.add(loginUser.getUsername());
             }
-            business.setActStatus(ActStatus.reject)
+            business
                     .setTaskId(task2.getId())
+//                    .setActStatus(ActStatus.reject)
                     .setTaskNameId(task2.getTaskDefinitionKey())
                     .setTaskName(task2.getName())
                     .setDoneUsers(doneUserList.toJSONString())
@@ -588,8 +594,9 @@
                 //**璺宠浆鍒扮洰鏍囪妭鐐�
             List<Task> task2List = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().list();
             Task targetTask = task2List.get(0);
-                business.setActStatus(ActStatus.reject)
+                business
                         .setTaskId(targetTask.getId())
+//                        .setActStatus(ActStatus.reject)
                         .setTaskNameId(targetTask.getTaskDefinitionKey())
                         .setTaskName(targetTask.getName())
                         .setPriority(targetTask.getPriority()+"")
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/HisWorkTaskServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/HisWorkTaskServiceImpl.java
new file mode 100644
index 0000000..32fc6b0
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/HisWorkTaskServiceImpl.java
@@ -0,0 +1,39 @@
+package org.jeecg.modules.flowable.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.flowable.domain.vo.FlowHistoricalVo;
+import org.jeecg.modules.flowable.domain.vo.HisWorkTask;
+import org.jeecg.modules.flowable.mapper.IHisWorkTaskMapper;
+import org.jeecg.modules.flowable.service.IHisWorkTaskService;
+import org.jeecg.modules.flowable.util.TimeUtil;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Service
+
+public class HisWorkTaskServiceImpl extends ServiceImpl<IHisWorkTaskMapper,HisWorkTask> implements IHisWorkTaskService {
+    @Override
+    public List<HisWorkTask> queryHisTaskList(String drapprovedataId) {
+        return baseMapper.queryHisTaskList(drapprovedataId);
+    }
+
+
+    /**
+     * 閫氳繃娴佺▼瀹炰緥id鏌ヨ鍘嗗彶浠诲姟銆�
+     * @param procInstId
+     * @return
+     */
+    @Override
+    public List<FlowHistoricalVo> queryHisTaskByProcInstId(@Param("procInstId") String procInstId){
+        List<FlowHistoricalVo> flowHistoricalVoList=baseMapper.queryHisTaskByProcInstId(procInstId);
+        flowHistoricalVoList.forEach(flowHistoricalVo->{
+            //璁$畻鏃堕棿
+            if (StrUtil.isNotEmpty(flowHistoricalVo.getDuration())){
+                flowHistoricalVo.setDuration(TimeUtil.howLongByMillis(Long.parseLong(flowHistoricalVo.getDuration()),2));
+            }
+        });
+        return flowHistoricalVoList;
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/WorkTaskServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImpl.java
similarity index 63%
rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/WorkTaskServiceImpl.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImpl.java
index 14e763e..10f93c9 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/WorkTaskServiceImpl.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImpl.java
@@ -1,9 +1,9 @@
-package org.jeecg.modules.dncFlow.service.impl;
+package org.jeecg.modules.flowable.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.jeecg.modules.dncFlow.entity.WorkTaskData;
-import org.jeecg.modules.dncFlow.mapper.IWorkTaskMapper;
-import org.jeecg.modules.dncFlow.service.IWorkTaskService;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskData;
+import org.jeecg.modules.flowable.mapper.IWorkTaskMapper;
+import org.jeecg.modules.flowable.service.IWorkTaskService;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImplVo.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImplVo.java
new file mode 100644
index 0000000..1cf95eb
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/WorkTaskServiceImplVo.java
@@ -0,0 +1,31 @@
+package org.jeecg.modules.flowable.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.flowable.engine.history.HistoricActivityInstance;
+import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
+import org.jeecg.modules.flowable.domain.vo.FlowMy;
+import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
+import org.jeecg.modules.flowable.mapper.IWorkTaskVoMapper;
+import org.jeecg.modules.flowable.service.IWorkTaskServiceVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class WorkTaskServiceImplVo extends ServiceImpl<IWorkTaskVoMapper, WorkTaskDataVo> implements IWorkTaskServiceVo {
+    @Autowired
+    FlowMyBusinessServiceImpl flowMyBusinessService;
+    @Override
+    public IPage<WorkTaskDataVo> toTaskBySelf(FlowMy flowMy, Page page) {
+        IPage<WorkTaskDataVo> workTaskDataVoIPage=baseMapper.taskBySelf(flowMy,page);
+        workTaskDataVoIPage.getRecords().forEach(workTaskDataVo -> {
+            HistoricActivityInstance historicActivityInstance=flowMyBusinessService.getPreviousNode(workTaskDataVo.getId());
+            if (historicActivityInstance != null){
+                workTaskDataVo.setPreNode(historicActivityInstance.getActivityName());
+                workTaskDataVo.setAssignee(historicActivityInstance.getAssignee());
+            }
+        });
+        return workTaskDataVoIPage;
+    }
+}
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/util/TimeUtil.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/util/TimeUtil.java
new file mode 100644
index 0000000..7590e00
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/util/TimeUtil.java
@@ -0,0 +1,111 @@
+package org.jeecg.modules.flowable.util;
+
+import java.util.Date;
+
+/**
+ * 鎻忚堪锛氭椂闂村伐鍏风被
+ *
+ * @Date 2023/10/11
+ */
+public class TimeUtil {
+
+    /**涓�澶�*/
+    public static final long day    = 1000 * 60 * 60 * 24;
+    /**涓�灏忔椂*/
+    public static final long hour   = 1000 * 60 * 60;
+    /**涓�鍒嗛挓*/
+    public static final long minute = 1000 * 60;
+    /**涓�绉�*/
+    public static final long second = 1000;
+
+    /**
+     * 璁$畻涓や釜鏃堕棿宸紝浠ユ椂鍒嗙鐨勬柟寮忓睍鐜般��
+     * @param start
+     * @param end
+     * @param type 1淇濈暀姣 2淇濈暀绉� 3淇濈暀鍒嗛挓 4淇濈暀灏忔椂 5淇濈暀澶�
+     * @return
+     */
+    public static String howLong(Date start, Date end, int type){
+        if(start == null || end == null)
+            return "";
+        return howLong(start.getTime(), end.getTime(), type);
+    }
+
+    /**
+     * 璁$畻涓や釜鏃堕棿宸紝浠ユ椂鍒嗙鐨勬柟寮忓睍鐜般��
+     * @param start
+     * @param end
+     * @return
+     */
+    public static String howLong(Date start, Date end){
+        if(start == null || end == null)
+            return "";
+        return howLong(start.getTime(), end.getTime(), 1);
+    }
+
+    /**
+     * 璁$畻缁欏畾鏃堕棿璺濈鐜板湪鐨勬椂闂村樊锛屼互鏃跺垎绉掔殑鏂瑰紡灞曠幇銆�
+     * @param startTime
+     * @return
+     */
+    public static String howLong(long startTime){
+        return howLong(startTime, System.currentTimeMillis(),1);
+    }
+
+    /**
+     * 璁$畻鑰楁椂鏃堕暱
+     * @param startTime 璧风偣鏃堕棿锛屾绉掓暟
+     * @return
+     */
+    public static String howLong(long startTime, long endTime ,int type) {
+        long millis = endTime - startTime;
+        return howLongByMillis(millis, type);
+    }
+
+    /**
+     * 璁$畻鑰楁椂鏃堕暱
+     * @param millis
+     * @param type
+     * @return
+     */
+    public static String howLongByMillis(long millis, int type) {
+        if(millis <= 0) return "灏忎簬1绉�";
+
+        if(type > 5) return "鏍煎紡閿欒";
+
+        StringBuilder sb = new StringBuilder();
+
+        //澶�
+        if(millis >= day && type <=5){
+            long days = millis / day;
+            sb.append(days).append("澶�");
+            millis -= days * day;
+        }
+        // 灏忔椂璁�
+        if(millis >= hour && type <=4){
+            long hours = millis / hour;
+            sb.append(hours).append("灏忔椂");
+            millis -= hours * hour;
+        }
+
+        if(millis >= minute && type <=3){
+            long minutes = millis / minute;
+            sb.append(minutes).append("鍒嗛挓");
+            millis -= minutes * minute;
+        }
+
+        if(millis >= second && type <=2){
+            long seconds = millis / second;
+            sb.append(seconds).append("绉�");
+            millis -= seconds * second;
+        }
+
+        if(millis > 0 && type <=1){
+            sb.append(millis).append("姣");
+        }
+
+        return sb.toString();
+
+    }
+
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
index 6be0483..ba318e0 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
@@ -169,6 +169,68 @@
         return result;
     }
 
+    /**
+     * 鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁
+     * @param user
+     * @param req
+     * @return
+     */
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    public Result<List<SysUser>> listAll(SysUser user,HttpServletRequest req) {
+        Result<List<SysUser>> result = new Result<List<SysUser>>();
+        QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
+
+        //update-begin-Author:wangshuai--Date:20211119--for:銆恦ue3銆戦�氳繃閮ㄩ棬id鏌ヨ鐢ㄦ埛锛岄�氳繃code鏌ヨid
+        //閮ㄩ棬ID
+        String departId = req.getParameter("departId");
+        if(oConvertUtils.isNotEmpty(departId)){
+            LambdaQueryWrapper<SysUserDepart> query = new LambdaQueryWrapper<>();
+            query.eq(SysUserDepart::getDepId,departId);
+            List<SysUserDepart> list = sysUserDepartService.list(query);
+            List<String> userIds = list.stream().map(SysUserDepart::getUserId).collect(Collectors.toList());
+            //update-begin---author:wangshuai ---date:20220322  for锛歔issues/I4XTYB]鏌ヨ鐢ㄦ埛鏃讹紝褰撻儴闂╥d 涓嬫病鏈夊垎閰嶇敤鎴锋椂鎺ュ彛鎶ラ敊------------
+            if(oConvertUtils.listIsNotEmpty(userIds)){
+                queryWrapper.in("id",userIds);
+            }else{
+                return Result.OK();
+            }
+            //update-end---author:wangshuai ---date:20220322  for锛歔issues/I4XTYB]鏌ヨ鐢ㄦ埛鏃讹紝褰撻儴闂╥d 涓嬫病鏈夊垎閰嶇敤鎴锋椂鎺ュ彛鎶ラ敊------------
+        }
+        //鐢ㄦ埛ID
+        String code = req.getParameter("code");
+        if(oConvertUtils.isNotEmpty(code)){
+            queryWrapper.in("id",Arrays.asList(code.split(",")));
+        }
+        //update-end-Author:wangshuai--Date:20211119--for:銆恦ue3銆戦�氳繃閮ㄩ棬id鏌ヨ鐢ㄦ埛锛岄�氳繃code鏌ヨid
+
+        //update-begin-author:taoyan--date:20220104--for: JTC-372 銆愮敤鎴峰喕缁撻棶棰樸�� online鎺堟潈銆佺敤鎴风粍浠讹紝閫夋嫨鐢ㄦ埛閮借兘鐪嬪埌琚喕缁撶殑鐢ㄦ埛
+        String status = req.getParameter("status");
+        if(oConvertUtils.isNotEmpty(status)){
+            queryWrapper.eq("status", Integer.parseInt(status));
+        }
+        //update-end-author:taoyan--date:20220104--for: JTC-372 銆愮敤鎴峰喕缁撻棶棰樸�� online鎺堟潈銆佺敤鎴风粍浠讹紝閫夋嫨鐢ㄦ埛閮借兘鐪嬪埌琚喕缁撶殑鐢ㄦ埛
+
+        //TODO 澶栭儴妯℃嫙鐧婚檰涓存椂璐﹀彿锛屽垪琛ㄤ笉鏄剧ず
+        queryWrapper.ne("username","_reserve_user_external");
+        List<SysUser> list = sysUserService.list(queryWrapper);
+        //鎵归噺鏌ヨ鐢ㄦ埛鐨勬墍灞為儴闂�
+        //step.1 鍏堟嬁鍒板叏閮ㄧ殑 useids
+        //step.2 閫氳繃 useids锛屼竴娆℃�ф煡璇㈢敤鎴风殑鎵�灞為儴闂ㄥ悕瀛�
+        List<String> userIds = list.stream().map(SysUser::getId).collect(Collectors.toList());
+        Map<String, String> useProNames = sysUserService.getProNamesByUserIds(userIds);
+        if(userIds!=null && userIds.size()>0){
+            Map<String,String>  useDepNames = sysUserService.getDepNamesByUserIds(userIds);
+            list.forEach(item->{
+                item.setOrgCodeTxt(useDepNames.get(item.getId()));
+                item.setProductionName(useProNames.get(item.getId()));
+            });
+        }
+        result.setSuccess(true);
+        result.setResult(list);
+        log.info(list.toString());
+        return result;
+    }
+
     //@RequiresRoles({"admin"})
     //Permissions("system:user:add")
     @RequestMapping(value = "/add", method = RequestMethod.POST)
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
index 5393931..84fa63b 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
@@ -1,10 +1,12 @@
 package org.jeecg.modules.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.entity.SysUserRole;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
 
 /**
  * <p>
@@ -32,4 +34,11 @@
 	@Select("select id from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))")
 	List<String> getRoleIdByUserName(@Param("username") String username);
 
+	/**
+	 * 鏍规嵁瑙掕壊鏌ヨ鐢ㄦ埛
+	 * @param roleList role_code闆嗗悎
+	 * */
+	List<SysUser> getUsersByRoles(@Param("roleList") List<String> roleList);
+
+
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserRoleMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserRoleMapper.xml
new file mode 100644
index 0000000..c3812b4
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserRoleMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.mapper.SysUserRoleMapper">
+	<select id="getUsersByRoles" resultType="org.jeecg.modules.system.entity.SysUser">
+		select t.* from sys_user t where t.del_flag = 0
+		and t.id in (
+		select t1.user_id from sys_user_role t1
+		left join sys_role t2 on t1.role_id = t2.id
+		<if test="roleList!=null  and roleList.size()>0">
+			and t2.role_code in
+			<foreach collection="roleList" index="index" item="roleCode" open="(" separator="," close=")">
+				#{roleCode}
+			</foreach>
+		</if>
+		where t2.id is not null
+		)
+	</select>
+</mapper>
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java
index e031449..cb1ef5f 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java
@@ -1,10 +1,10 @@
 package org.jeecg.modules.system.service;
 
-import java.util.Map;
-
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.entity.SysUserRole;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
 
 /**
  * <p>
@@ -15,4 +15,11 @@
  * @since 2018-12-21
  */
 public interface ISysUserRoleService extends IService<SysUserRole> {
+
+    /**
+     * 鏍规嵁瑙掕壊鏌ヨ鐢ㄦ埛
+     * @param roleList 瑙掕壊缂栫爜闆嗗悎
+     * */
+    List<SysUser> queryUsersByRoles(List<String> roleList);
+
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
index 5bfc7ff..bc363c2 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -9,9 +9,11 @@
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.FillRuleConstant;
 import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.FillRuleUtil;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.*;
@@ -79,12 +81,25 @@
     @Override
     public List<MdcProductionTreeModel> queryTreeListByConfig(){
         SysParams sysParams = sysParamsService.getSysPramBySettingKey("dnc_production");
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         LambdaQueryWrapper<MdcProduction> query = new LambdaQueryWrapper<MdcProduction>();
         if (sysParams == null) {
             return null;
         }else {
+            List<String> productionIds = new ArrayList<>();
+            if (!("admin").equals(loginUser.getUsername())) {
+                //涓嶆槸瓒呯骇绠$悊鍛橈紝鑾峰彇鐢ㄦ埛鎷ユ湁鐨勪骇绾�
+                if (loginUser.getProductionIds() != null) {
+                    if (loginUser.getProductionIds().contains(",")) {
+                        productionIds = Arrays.asList(loginUser.getProductionIds().split(","));
+                    } else {
+                        productionIds = Collections.singletonList(loginUser.getProductionIds());
+                    }
+                }
+            }
             if (("0").equals(sysParams.getSettingValue())){
                 query.eq(MdcProduction::getOrgType,"2");
+                query.in(!productionIds.isEmpty(), MdcProduction::getId, productionIds);
                 query.eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
                 query.orderByAsc(MdcProduction::getProductionOrder);
                 List<MdcProduction> list = this.list(query);
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java
index 9af6f77..dad8e87 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java
@@ -1,20 +1,14 @@
 package org.jeecg.modules.system.service.impl;
 
-import java.util.IdentityHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.jeecg.modules.system.entity.SysRole;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.entity.SysUserRole;
 import org.jeecg.modules.system.mapper.SysUserRoleMapper;
-import org.jeecg.modules.system.service.ISysRoleService;
 import org.jeecg.modules.system.service.ISysUserRoleService;
-import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
 
 /**
  * <p>
@@ -27,4 +21,16 @@
 @Service
 public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements ISysUserRoleService {
 
+    @Autowired
+    private SysUserRoleMapper sysUserRoleMapper;
+
+    /**
+     * 鏍规嵁瑙掕壊鏌ヨ鐢ㄦ埛
+     * @param roleList 瑙掕壊缂栫爜闆嗗悎
+     * */
+    @Override
+    public List<SysUser> queryUsersByRoles(List<String> roleList) {
+        return sysUserRoleMapper.getUsersByRoles(roleList);
+    }
+
 }

--
Gitblit v1.9.3