From 1becd6d46123723bd2b898fd565b4331fb2cb2d8 Mon Sep 17 00:00:00 2001
From: lyh <liuyuanheng@xalxzn.com>
Date: 星期五, 28 二月 2025 15:51:50 +0800
Subject: [PATCH] 新增flow able 代办已办

---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskMapper.java                                            |   10 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/ext/AssignFileStreamExt.java                                           |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IAssignFileStreamService.java                                  |    9 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusiness.java                  |    8 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java |   23 +
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java            |   10 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/UserRole.java                                                   |   18 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImpl.java                                  |   20 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/FlowMy.java                                                         |   33 +
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java         |    4 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java                  |   59 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/AssignFileStreamMapper.xml                                  |   12 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/HisWorkTask.java                                                |   42 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskData.java                                               |  116 +++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/HisWorkTaskServiceImpl.java                               |   36 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImplVo.java                                |   38 +
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java                                   |    3 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/AssignFlowTaskVo.java                                               |   53 ++
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java                   |   15 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/request/AssignFileRequest.java                                         |    1 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IHisWorkTaskService.java                                       |   16 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/service/FlowCommonService.java                       |    1 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/PlmCommonUtilsMapper.java                                       |   11 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java                         |    4 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IPlmCommonUtilsService.java                                    |   10 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowTaskVo.java                                     |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IHisWorkTaskMapper.java                                         |   17 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/PlmCommonUtilsServiceImpl.java                            |   21 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/AssignFileStreamMapper.java                                     |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskServiceVo.java                                        |   14 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java                          |  144 +++--
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskMapper.xml                                          |    8 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/entity/ActStatus.java                                |    5 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskVoMapper.xml                                        |   49 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskDataVo.java                                             |  128 +++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/HisWorkTaskMapper.xml                                       |   89 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskService.java                                          |   11 
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml         |   17 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamFlowController.java                         |  170 +++++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamController.java                             |   21 
 lxzn-module-flowable/src/main/java/org/jeecg/FlowableDatabaseConfig.java                                                    |   19 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/PlmCommonUtilsMapper.xml                                    |   10 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskVoMapper.java                                          |   15 
 43 files changed, 1,192 insertions(+), 104 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamController.java
index c989068..7424f7a 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamController.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamController.java
@@ -12,6 +12,7 @@
 import org.jeecg.modules.flow.request.AssignFileRequest;
 import org.jeecg.modules.flow.request.AssignFileStreamQueryRequest;
 import org.jeecg.modules.dnc.response.*;
+import org.jeecg.modules.flow.vo.AssignFlowTaskVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -28,20 +29,15 @@
     @AutoLog(value = "DNC鎸囨淳璁惧娴佺▼鎿嶄綔-鍚姩娴佺▼ 淇濆瓨鐩稿簲鐨勬暟鎹� 缁戝畾businessKey")
     @ApiOperation(value = "DNC鎸囨淳璁惧娴佺▼鎿嶄綔-鍚姩娴佺▼ 淇濆瓨鐩稿簲鐨勬暟鎹� 缁戝畾businessKey", notes = "DNC鎸囨淳璁惧娴佺▼鎿嶄綔-鍚姩娴佺▼ 淇濆瓨鐩稿簲鐨勬暟鎹� 缁戝畾businessKey")
     @PostMapping("/assign/file/apply")
-    public ResponseResult applyAssignFile(@RequestBody AssignFileStream stream) {
-        ResponseResult b = assignFileStreamService.applyAssignFile(stream);
-        if(b.isSuccess()) {
-            return new ResponseResult(CommonCode.SUCCESS);
-        }
-        return b;
+    public Result<?> applyAssignFile(@RequestBody AssignFileStream stream) {
+        return assignFileStreamService.applyAssignFile(stream);
     }
 
     @AutoLog(value = "DNC鎸囨淳璁惧娴佺▼鎿嶄綔-瀹℃壒鏈嶅姟")
     @ApiOperation(value = "DNC鎸囨淳璁惧娴佺▼鎿嶄綔-瀹℃壒鏈嶅姟", notes = "DNC鎸囨淳璁惧娴佺▼鎿嶄綔-瀹℃壒鏈嶅姟")
-    @PostMapping("/assign/file/approve/{taskId}/{streamId}")
-    public ResponseResult approveAssignFile(@PathVariable("taskId") String taskId, @PathVariable("streamId") String streamId,
-                                            @RequestBody AssignFileStream stream) {
-        boolean b = assignFileStreamService.approveAssignFile(taskId, streamId, stream);
+    @PostMapping("/assign/file/approve")
+    public ResponseResult approveAssignFile(@RequestBody AssignFlowTaskVo assignFlowTaskVo) {
+        boolean b = assignFileStreamService.approveAssignFile(assignFlowTaskVo);
         if(b)
             return new ResponseResult(CommonCode.SUCCESS);
         return new ResponseResult(CommonCode.FAIL);
@@ -108,4 +104,9 @@
             return new ResponseResult(CommonCode.SUCCESS);
         return new ResponseResult(CommonCode.FAIL);
     }
+
+    @GetMapping(value = "/selectVoById")
+    public Result<AssignFileStream> selectVoById(@RequestParam(name="id") String id){
+        return Result.OK(assignFileStreamService.getAssignFileStreamDetail(id));
+    }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamFlowController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamFlowController.java
new file mode 100644
index 0000000..d6dedb0
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamFlowController.java
@@ -0,0 +1,170 @@
+package org.jeecg.modules.flow.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 io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.flowable.bpmn.model.BpmnModel;
+import org.flowable.engine.*;
+import org.flowable.engine.history.HistoricActivityInstance;
+import org.flowable.image.ProcessDiagramGenerator;
+import org.flowable.task.api.Task;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.flow.entity.HisWorkTask;
+import org.jeecg.modules.flow.entity.WorkTaskData;
+import org.jeecg.modules.flow.entity.WorkTaskDataVo;
+import org.jeecg.modules.flow.service.IAssignFileStreamService;
+import org.jeecg.modules.flow.service.IHisWorkTaskService;
+import org.jeecg.modules.flow.service.IWorkTaskService;
+import org.jeecg.modules.flow.service.IWorkTaskServiceVo;
+import org.jeecg.modules.flow.vo.FlowMy;
+import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
+import org.jeecg.modules.flowable.domain.dto.FlowTaskDto;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/nc/assign/flow")
+@Slf4j
+public class AssignFileStreamFlowController {
+    @Autowired
+    IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    IWorkTaskService workTaskService;
+    @Autowired
+    IFlowTaskService flowTaskService;
+    @Autowired
+    IWorkTaskServiceVo workTaskServicevo;
+    @Autowired
+    IHisWorkTaskService hisWorkTaskService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private RepositoryService repositoryService;
+    @Autowired
+    private HistoryService historyService;
+    @Autowired
+    private ProcessEngine processEngine;
+    @Autowired
+    private IAssignFileStreamService assignFileStreamService;
+
+    @GetMapping(value = "/list")
+    public Result<IPage<FlowMyBusinessDto>> queryPageList(FlowMyBusinessDto flowMyBusinessDto,
+                                                       @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                                       @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                                       HttpServletRequest req) {
+        Page<FlowMyBusinessDto> page = new Page<FlowMyBusinessDto>(pageNo, pageSize);
+        IPage<FlowMyBusinessDto> pageList = flowMyBusinessService.findPageList(page, flowMyBusinessDto);
+        pageList.getRecords().forEach(item -> {
+            //鍘婚櫎[]
+            item.setTodoUsers(item.getTodoUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
+            item.setTodoUsers(item.getTodoUsers().replaceAll("\"", ""));
+            item.setDoneUsers(item.getDoneUsers().replaceAll("\\[", "").replaceAll("\\]", ""));
+            item.setDoneUsers(item.getDoneUsers().replaceAll("\"", ""));
+        });
+        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,
+                           @ApiParam(value = "姣忛〉鏉℃暟", required = true) @RequestParam (name="pageSize", defaultValue="10") Integer pageSize) {
+        return flowTaskService.todoList(pageNum, pageSize);
+    }
+    @ApiOperation(value = "鑾峰彇鏈韩寰呭姙", response = FlowTaskDto.class)
+    @GetMapping(value = "/toTaskBySelf")
+    public Result<IPage<WorkTaskDataVo>> toTaskBySelf(FlowMy flowMy, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        Page page = new Page(pageNo, pageSize);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        flowMy.setUsername(user.getUsername());
+        return Result.OK(workTaskServicevo.toTaskBySelf(flowMy,page));
+    }
+
+    @ApiOperation(value = "鑾峰彇宸插姙浠诲姟", response = FlowTaskDto.class)
+    @GetMapping(value = "/finishedList")
+    public Result finishedList(@ApiParam(value = "褰撳墠椤电爜", required = true) @RequestParam Integer pageNo,
+                               @ApiParam(value = "姣忛〉鏉℃暟", required = true) @RequestParam Integer pageSize) {
+        return flowTaskService.finishedList(pageNo, pageSize);
+    }
+
+
+    @ApiOperation(value = "鑾峰彇宸ヤ綔娴佸巻鍙蹭换鍔�", response = FlowTaskDto.class)
+    @GetMapping(value = "/queryHisTaskList")
+    public Result<List<HisWorkTask>> queryHisTaskList(@RequestParam(name = "drapprovedataId") String drapprovedataId) {
+        return Result.OK(hisWorkTaskService.queryHisTaskList(drapprovedataId));
+    }
+
+    @ApiOperation(value = "瀹℃壒浠诲姟-鏌ョ湅娴佺▼鍥�")
+    @GetMapping("/diagramView")
+    public void showImages(@RequestParam(name = "taskId") String taskId, HttpServletResponse response) throws IOException {
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        String processDefinitionId = task.getProcessDefinitionId();
+        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
+        String processInstanceId = task.getProcessInstanceId();
+        List<HistoricActivityInstance> historyProcess = historyService.createHistoricActivityInstanceQuery()
+                .processInstanceId(processInstanceId)
+                .finished()
+                .list();
+
+        List<String> activityIds = new ArrayList<>();
+        List<String> flows = new ArrayList<>();
+
+        for (HistoricActivityInstance hi : historyProcess) {
+            String activityType = hi.getActivityType();
+            if (activityType.equals("sequenceFlow") || activityType.equals("exclusiveGateway")) {
+                flows.add(hi.getActivityId());
+            } else if (activityType.equals("userTask") || activityType.equals("startEvent")) {
+                activityIds.add(hi.getActivityId());
+            }
+        }
+        activityIds.add(task.getTaskDefinitionKey());
+        ProcessEngineConfiguration engConf = processEngine.getProcessEngineConfiguration();
+        ProcessDiagramGenerator processDiagramGenerator = engConf.getProcessDiagramGenerator();
+
+        InputStream in = processDiagramGenerator.generateDiagram(bpmnModel, "png", activityIds, flows,
+                engConf.getActivityFontName(), engConf.getLabelFontName(), engConf.getAnnotationFontName(),
+                engConf.getClassLoader(), 1.0, true);
+
+        OutputStream out = response.getOutputStream();
+        byte[] buf = new byte[1024];
+        int length = 0;
+        while ((length = in.read(buf)) != -1) {
+            out.write(buf, 0, length);
+        }
+        in.close();
+        out.close();
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/HisWorkTask.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/HisWorkTask.java
new file mode 100644
index 0000000..06188a8
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/HisWorkTask.java
@@ -0,0 +1,42 @@
+package org.jeecg.modules.flow.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description:宸ヤ綔娴佸巻鍙�
+ */
+@Data
+@TableName("act_hi_taskinst")
+@ApiModel(value="act_hi_taskinst", description="宸ヤ綔娴佸巻鍙蹭换鍔℃暟鎹�")
+public class HisWorkTask implements Serializable {
+	/**涓婚敭*/
+    //flow_my_business
+    @TableField("id")
+    private String id;
+    @TableField("name")
+    private String name;
+    @TableField("cause")
+    private String cause;
+    /**鎵ц瀹炰緥ID锛屼笌鎵ц瀹炰緥琛ㄤ腑鐨処D瀛楁鍏宠仈*/
+    @TableField("assignee")
+    private String assignee;
+    /**娴佺▼瀹炰緥ID锛屼笌娴佺▼瀹炰緥琛ㄤ腑鐨処D瀛楁鍏宠仈*/
+    @TableField("startTime")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private String startTime;
+    /**娴佺▼瀹氫箟ID锛屼笌娴佺▼瀹氫箟琛ㄤ腑鐨処D瀛楁鍏宠仈*/
+    @TableField("endTime")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private String endTime;
+
+    private transient String status;
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/UserRole.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/UserRole.java
new file mode 100644
index 0000000..27481c9
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/UserRole.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.flow.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName("sys_role")
+public class UserRole implements Serializable {
+    @TableField("id")
+    private String id;
+    @TableField("role_name")
+    private String roleName;
+    @TableField("role_code")
+    private String roleCode;
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskData.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskData.java
new file mode 100644
index 0000000..27fb687
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskData.java
@@ -0,0 +1,116 @@
+package org.jeecg.modules.flow.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description:宸ヤ綔娴佷换鍔℃暟鎹�
+ */
+@Data
+@TableName("act_ru_task")
+@ApiModel(value="act_ru_task", description="宸ヤ綔娴佷换鍔℃暟鎹�")
+public class WorkTaskData 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;
+
+
+
+    /**鏆傛椂鐢ㄤ笉涓�*/
+    @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/flow/entity/WorkTaskDataVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskDataVo.java
new file mode 100644
index 0000000..6fffc9d
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskDataVo.java
@@ -0,0 +1,128 @@
+package org.jeecg.modules.flow.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+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;
+
+
+//    /**鏆傛椂鐢ㄤ笉涓�*/
+//    @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/flow/ext/AssignFileStreamExt.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/ext/AssignFileStreamExt.java
index 642ae9d..31c5295 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/ext/AssignFileStreamExt.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/ext/AssignFileStreamExt.java
@@ -10,6 +10,8 @@
     private String productName;
     private String componentName;
     private String partsName;
+    private String processName;
+    private String stepName;
     private String docName;
     private String version;
     private String applyUser;
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/AssignFileStreamMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/AssignFileStreamMapper.java
index e6740ff..c4da9c8 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/AssignFileStreamMapper.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/AssignFileStreamMapper.java
@@ -23,4 +23,6 @@
      * @return
      */
     IPage<AssignFileStreamExt> findByPage(IPage<AssignFileStreamExt> page, @Param(Constants.WRAPPER) Wrapper<AssignFileStreamExt> wrapper);
+
+
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IHisWorkTaskMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IHisWorkTaskMapper.java
new file mode 100644
index 0000000..c7ffcd7
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IHisWorkTaskMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.flow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.flow.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/flow/mapper/IWorkTaskMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskMapper.java
new file mode 100644
index 0000000..8a9fb1e
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskMapper.java
@@ -0,0 +1,10 @@
+package org.jeecg.modules.flow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.flow.entity.WorkTaskData;
+
+import java.util.List;
+
+public interface IWorkTaskMapper extends BaseMapper<WorkTaskData> {
+    List<WorkTaskData> queryAllworkTask();
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskVoMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskVoMapper.java
new file mode 100644
index 0000000..61bca2c
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskVoMapper.java
@@ -0,0 +1,15 @@
+package org.jeecg.modules.flow.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.flow.entity.WorkTaskDataVo;
+import org.jeecg.modules.flow.vo.FlowMy;
+
+import java.util.List;
+
+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-dnc/src/main/java/org/jeecg/modules/flow/mapper/PlmCommonUtilsMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/PlmCommonUtilsMapper.java
new file mode 100644
index 0000000..85a4d2d
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/PlmCommonUtilsMapper.java
@@ -0,0 +1,11 @@
+package org.jeecg.modules.flow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.flow.entity.UserRole;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Service
+public interface PlmCommonUtilsMapper extends BaseMapper<UserRole> {
+    List<UserRole> queryAllRoleList();
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/AssignFileStreamMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/AssignFileStreamMapper.xml
index cdbc3cb..d30212b 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/AssignFileStreamMapper.xml
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/AssignFileStreamMapper.xml
@@ -22,10 +22,12 @@
         , p.product_name as productName
         , c.component_name as componentName
         , pt.parts_name as partsName
+        , ps.process_name as processName
+        , wt.step_name as stepName
         , dc.doc_name as docName
         , dc.publish_version as version
         , dc.doc_suffix as docSuffix
-        , de.device_name as deviceName
+        , de.equipment_name as deviceName
         from (select * from nc_assign_file_stream where stream_id=#{streamId}) a
         left join sys_user u1
         on a.apply_user_id=u1.id
@@ -37,10 +39,14 @@
         on a.component_id=c.component_id
         left join nc_parts_info pt
         on a.parts_id=pt.parts_id
+        left join NC_PROCESS_STREAM ps
+        on a.process_id=ps.PROCESS_ID
+        left join nc_work_step wt
+        on a.step_id=wt.id
         left join nc_doc_info dc
         on a.doc_id=dc.doc_id
-        left join nc_device_info de
-        on a.device_id=de.device_id
+        left join mdc_equipment de
+        on a.device_id=de.id
 
     </select>
 
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/HisWorkTaskMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/HisWorkTaskMapper.xml
new file mode 100644
index 0000000..2ca746e
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/HisWorkTaskMapper.xml
@@ -0,0 +1,89 @@
+<?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.flow.mapper.IHisWorkTaskMapper">
+    <select id="queryHisTaskList" resultType="org.jeecg.modules.flow.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.flow.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.flow.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.flow.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.flow.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/flow/mapper/xml/PlmCommonUtilsMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/PlmCommonUtilsMapper.xml
new file mode 100644
index 0000000..83e1810
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/PlmCommonUtilsMapper.xml
@@ -0,0 +1,10 @@
+<?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.flow.mapper.PlmCommonUtilsMapper">
+  	<!-- 銆恦ue3涓撶敤銆� -->
+	<select id="queryAllRoleList" resultType="org.jeecg.modules.flow.entity.UserRole">
+		select
+			id,role_name,role_code
+		from sys_role
+	</select>
+</mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskMapper.xml
new file mode 100644
index 0000000..6b63a89
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskMapper.xml
@@ -0,0 +1,8 @@
+<?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.flow.mapper.IWorkTaskMapper">
+    <select id="queryAllworkTask" resultType="org.jeecg.modules.flow.entity.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>
+</mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskVoMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskVoMapper.xml
new file mode 100644
index 0000000..3bfe354
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskVoMapper.xml
@@ -0,0 +1,49 @@
+<?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.flow.mapper.IWorkTaskVoMapper">
+    <select id="taskBySelf" resultType="org.jeecg.modules.flow.entity.WorkTaskDataVo">
+        SELECT
+            atask.id_ AS id,
+            atask.rev_ AS rev,
+            atask.execution_id_ AS executionId,
+            atask.proc_inst_id_ AS procInstId,
+            atask.proc_def_id_ AS procDefId,
+            atask.name_ AS name,
+            atask.task_def_key_ AS taskDefKey,
+            su.realname AS assignee,
+            atask.priority_ AS priority,
+            atask.create_time_ AS createTime,
+            atask.suspension_state_ AS suspensionState,
+            fmb.act_status AS actStatus,
+            fmb.title AS title,
+            fmb.data_id AS dataId,
+            pro.name_ as flowName
+        FROM
+            act_ru_task AS atask,
+            flow_my_business AS fmb,
+            ACT_RE_PROCDEF AS pro,
+            sys_user AS su
+        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>
+          <if test="flowMy.title != null and flowMy.title != ''">
+              AND fmb.title LIKE CONCAT('%',#{flowMy.title},'%')
+          </if>
+          <if test="flowMy.startTime!= null and flowMy.startTime!= ''">
+              AND atask.create_time_ &gt;= #{flowMy.startTime}
+          </if>
+          <if test="flowMy.endTime!= null and flowMy.endTime!= ''">
+              AND atask.create_time_ &lt;= #{flowMy.endTime}
+          </if>
+        ORDER BY
+            create_time_ DESC
+    </select>
+    <select id="allList" parameterType="String" resultType="org.jeecg.modules.flow.entity.WorkTaskDataVo">
+        select * from act_ru_task
+    </select>
+</mapper>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/request/AssignFileRequest.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/request/AssignFileRequest.java
index 645da28..0681160 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/request/AssignFileRequest.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/request/AssignFileRequest.java
@@ -9,6 +9,7 @@
 @NoArgsConstructor
 public class AssignFileRequest implements Serializable {
     private String processId;
+    private String stepId;
     private String fileId;
     private String docId;
     private String applyReason;
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IAssignFileStreamService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IAssignFileStreamService.java
index 6b6e86f..63f6fe3 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IAssignFileStreamService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IAssignFileStreamService.java
@@ -9,6 +9,7 @@
 import org.jeecg.modules.flow.request.AssignFileStreamQueryRequest;
 import org.jeecg.modules.dnc.response.QueryPageResponseResult;
 import org.jeecg.modules.dnc.response.ResponseResult;
+import org.jeecg.modules.flow.vo.AssignFlowTaskVo;
 
 public interface IAssignFileStreamService extends IService<AssignFileStream> {
     /**
@@ -16,20 +17,20 @@
      * @param stream
      * @return
      */
-    ResponseResult applyAssignFile(AssignFileStream stream);
+    Result applyAssignFile(AssignFileStream stream);
 
     /**securedoc
      * 鍚姩娴佺▼ 淇濆瓨鐩稿簲鐨勬暟鎹� 缁戝畾businessKey
      * @param stream
      * @return
      */
-    boolean applyAssignFileActive(AssignFileStream stream);
+    Result<?> applyAssignFileActive(AssignFileStream stream);
     /**
      * 鍚姩娴佺▼ 淇濆瓨鐩稿簲鐨勬暟鎹� 缁戝畾businessKey
      * @param stream
      * @return
      */
-    ResponseResult applyAssignFileNonActive(AssignFileStream stream);
+    Result<?> applyAssignFileNonActive(AssignFileStream stream);
 
 
     /**
@@ -46,7 +47,7 @@
      * @param stream
      * @return
      */
-    boolean approveAssignFile(String taskId, String streamId, AssignFileStream stream);
+    boolean approveAssignFile(AssignFlowTaskVo assignFlowTaskVo);
 
     /**
      * 鎵归噺鎸囨淳鍒拌澶�
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IHisWorkTaskService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IHisWorkTaskService.java
new file mode 100644
index 0000000..7cd08f2
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IHisWorkTaskService.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.flow.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.flow.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/flow/service/IPlmCommonUtilsService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IPlmCommonUtilsService.java
new file mode 100644
index 0000000..4877037
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IPlmCommonUtilsService.java
@@ -0,0 +1,10 @@
+package org.jeecg.modules.flow.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.flow.entity.UserRole;
+
+import java.util.List;
+
+public interface IPlmCommonUtilsService extends IService<UserRole> {
+    List<UserRole> queryAllRoleList();
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskService.java
new file mode 100644
index 0000000..b4d0a4a
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskService.java
@@ -0,0 +1,11 @@
+package org.jeecg.modules.flow.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.flow.entity.WorkTaskData;
+
+import java.util.List;
+
+public interface IWorkTaskService extends IService<WorkTaskData> {
+    List<WorkTaskData> queryAllworkTask();
+
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskServiceVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskServiceVo.java
new file mode 100644
index 0000000..2bb0213
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskServiceVo.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.flow.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.flow.entity.WorkTaskDataVo;
+import org.jeecg.modules.flow.vo.FlowMy;
+
+import java.util.List;
+
+public interface IWorkTaskServiceVo extends IService<WorkTaskDataVo> {
+
+    IPage<WorkTaskDataVo> toTaskBySelf(FlowMy flowMy, Page page);
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java
index 97159f1..b4b380b 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java
@@ -8,6 +8,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.engine.TaskService;
@@ -34,12 +35,18 @@
 import org.jeecg.modules.dnc.utils.ValidateUtil;
 import org.jeecg.modules.dnc.utils.date.DateUtil;
 import org.jeecg.modules.dnc.utils.file.FileUtilS;
+import org.jeecg.modules.flow.vo.AssignFlowTaskVo;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
 import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
 import org.jeecg.modules.flowable.service.IFlowDefinitionService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.service.IMdcEquipmentService;
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.service.IMdcProductionService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -51,8 +58,8 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
-@Service
-public class AssignFileStreamServiceImpl extends ServiceImpl<AssignFileStreamMapper, AssignFileStream> implements IAssignFileStreamService {
+@Service("IAssignFileStreamService")
+public class AssignFileStreamServiceImpl extends ServiceImpl<AssignFileStreamMapper, AssignFileStream> implements IAssignFileStreamService , FlowCallBackServiceI {
     private static final String PROCESS_KEY = "assign_nc_to_device";
     private static final String APPLY_VARIABLE = "apply_user";
     private static final String APPROVE_VARIABLE = "approve_users";
@@ -101,6 +108,8 @@
     private FlowCommonService flowCommonService;
     @Resource
     private IFlowDefinitionService flowDefinitionService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
 
     @Value("${securedoc.serverIp}")
     private String serverIp;
@@ -113,22 +122,16 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public ResponseResult applyAssignFile(AssignFileStream stream) {
+    public Result applyAssignFile(AssignFileStream stream) {
         synchronized (this){
             //鍒ゆ柇璁惧鐗规畩瀛楃
             String specialChar = getDeviceSpecialChar(stream.getDeviceId(),stream.getFileId());
             if (StrUtil.isNotEmpty(specialChar)){
                 //鎶涘嚭鐗规畩瀛楃寮傚父
-                return createSpecialCharErrorResponse(specialChar);
+                return Result.error("鏂囦欢鍚嶇О瀛樺湪璁惧鐗规畩瀛楃");
             }
             if(flowableEnable) {
-                boolean b = applyAssignFileActive(stream);
-                if (b) {
-                    return ResponseResult.SUCCESS();
-                } else {
-                    return ResponseResult.SUCCESS();
-                }
-
+                return applyAssignFileActive(stream);
             }else {
                 return applyAssignFileNonActive(stream);
             }
@@ -190,7 +193,7 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean applyAssignFileActive(AssignFileStream stream) {
+    public Result<?> applyAssignFileActive(AssignFileStream stream) {
         validateParams(stream);
         DocInfo docInfo = getDocInfo(stream);
         MdcEquipment mdcEquipment = getMdcEquipment(stream);
@@ -206,23 +209,19 @@
         List<PermissionStream> permissionStreams = getPermissionStreams(stream);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = user.getId();
-//        List<String> departIds = getDepartIds(permissionStreams, userId);
-//        List<String> userIdList = getUserIdList(departIds);
-//        saveBusinessObject(stream, userId);
-//        ProcessInstance processInstance = startProcessInstance(stream, userIdList);
-//        completeTask(processInstance, userId);
+        saveBusinessObject(stream, userId);
         System.out.println("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" + stream.getDocId());
-        flowCommonService.initActBusiness("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" + stream.getStreamId(), stream.getStreamId(), "IAssignFileStreamService", "assign_nc_to_device", null);
+        flowCommonService.initActBusiness("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" +docInfo.getDocName()+"."+docInfo.getDocSuffix()+"鍒拌澶�->"+mdcEquipment.getEquipmentName() ,
+                stream.getStreamId(), "IAssignFileStreamService", "assign_nc_to_device", null);
         Map<String, Object> variables = new HashMap<>();
-        variables.put("id", stream.getStreamId());
-        variables.put("approveContent", stream.getApproveContent());
-        flowDefinitionService.startProcessInstanceByKey("assign_nc_to_device", variables);
-        return true;
+        variables.put("dataId", stream.getStreamId());
+        variables.put("organization", stream.getApplyReason());
+        return flowDefinitionService.startProcessInstanceByKey("assign_nc_to_device", variables);
     }
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public ResponseResult applyAssignFileNonActive(AssignFileStream stream) {
+    public Result<?> applyAssignFileNonActive(AssignFileStream stream) {
         //鏉冮檺鏍¢獙
         validateParams(stream);
         DocInfo docInfo = getDocInfo(stream);
@@ -268,7 +267,7 @@
         handleFileTransfer(mdcEquipment, docFile);
         handleFileProcessing(docFile, mdcEquipment, whether, localFilePath);
         synchronizedFlagService.updateFlag(2);
-        return new ResponseResult(CommonCode.SUCCESS);
+        return Result.OK("鎿嶄綔鎴愬姛");
     }
 
     @Override
@@ -280,47 +279,45 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean approveAssignFile(String taskId, String streamId, AssignFileStream stream) {
-        if(!ValidateUtil.validateString(taskId) || !ValidateUtil.validateString(streamId) || stream == null)
+    public boolean approveAssignFile(AssignFlowTaskVo assignFlowTaskVo) {
+        if(!ValidateUtil.validateString(assignFlowTaskVo.getTaskId()) || !ValidateUtil.validateString(assignFlowTaskVo.getDataId()) || assignFlowTaskVo == null)
             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);
-        if(!ValidateUtil.validateInteger(stream.getStatus()))
+        if(!ValidateUtil.validateInteger(assignFlowTaskVo.getStatus()))
             ExceptionCast.cast(ActivitiCode.ACT_STATUS_ERROR);
-        AssignFileStream en = super.getById(streamId);
+        AssignFileStream en = super.getById(assignFlowTaskVo.getDataId());
         if(en == null)
             ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_DETAIL_ERROR);
-        Task task = taskService.createTaskQuery().taskId(taskId).taskCandidateOrAssigned(userId).singleResult();
-        if(task == null)
-            ExceptionCast.cast(ActivitiCode.ACT_TASK_ERROR);
-        if(!ValidateUtil.validateString(task.getAssignee())) {
-            //鎷惧彇浠诲姟
-            taskService.claim(task.getId(), userId);
-            //瀹屾垚浠诲姟
-            taskService.complete(task.getId());
-        }else {
-            //瀹屾垚浠诲姟
-            taskService.complete(task.getId());
-        }
+        //flowable澶勭悊
+        FlowTaskVo flowTaskVo = new FlowTaskVo();
+        BeanUtils.copyProperties(assignFlowTaskVo, flowTaskVo);
+        flowTaskService.complete(flowTaskVo);
         //鏇存柊瀵硅薄灏佽
         AssignFileStream up = new AssignFileStream();
-        up.setApproveContent(stream.getApproveContent());
-        up.setStatus(stream.getStatus());
+        up.setApproveContent(assignFlowTaskVo.getApproveContent());
+        up.setStatus(assignFlowTaskVo.getStatus());
         up.setApproveUserId(userId);
         up.setApproveTime(DateUtil.getNow());
-        up.setStreamId(streamId);
+        up.setStreamId(assignFlowTaskVo.getDataId());
         boolean b = super.updateById(up);
         if(!b)
             ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
         if(up.getStatus() == 2) {
+            DocInfo docInfo;
             //鍚屾剰鎿嶄綔
-            DocInfo docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getProcessId());
+            if (StrUtil.isNotEmpty(en.getStepId())){
+                //宸ユ鎸囨淳
+                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 6, en.getStepId());
+            }else {
+                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getProcessId());
+            }
             if(docInfo == null || docInfo.getDocStatus() == 3)
                 ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
-            DeviceInfo deviceInfo = deviceInfoService.getById(en.getDeviceId());
-            if(deviceInfo == null)
+            MdcEquipment mdcEquipment = iMdcEquipmentService.getById(en.getDeviceId());
+            if(mdcEquipment == null)
                 ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
             DocFile docFile = docFileService.getById(en.getFileId());
             if(docFile == null)
@@ -328,17 +325,16 @@
             DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),4, en.getDeviceId());
             if(deviceDoc != null) {
                 // 鍒犻櫎 澶囦唤  瑕嗙洊 鍘熸湁鐨�
-                List<String> strings =  deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
+                List<String> strings =  iMdcProductionService.findListParentTreeAll(mdcEquipment.getId());
                 if (strings != null && !strings.isEmpty()) {
                     String path = StringUtils.join(strings.toArray(), "/");
-                    boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(),
+                    boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ mdcEquipment.getEquipmentId(),
                             docFile.getFileName(), docFile.getFileSuffix());
                   /*  //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId());
                     boolean doc = docRelativeService.deleteCopyDocByAttrNext(deviceDoc.getDocId(),4,stream.getDeviceId());
                     if (!doc) {
                         ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE);
                     }*/
-
                 }
             } else {
                 //鎻掑叆鏂囨。鍒拌澶囧彂閫佹枃妗�
@@ -355,22 +351,20 @@
             }
             if(!b)
                 ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
-            if (deviceInfo != null) {
-                List<String> strings =  deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
+            if (mdcEquipment != null) {
+                List<String> strings =  iMdcProductionService.findListParentTreeAll(mdcEquipment.getId());
                 if (strings != null && !strings.isEmpty()) {
                     String path = StringUtils.join(strings.toArray(), "/");
-                    boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ deviceInfo.getDeviceNo(),
+                    boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ mdcEquipment.getEquipmentId(),
                             docFile.getFileEncodeName(),
                             docFile.getFileName(),docFile.getFileSuffix());
                     if (!copyFileNc) {
                         ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
                     } else {
-                        FileUtilS.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(),
+                        FileUtilS.deleteZipFromToSend(path + "/"+ mdcEquipment.getEquipmentId(),
                                 docFile.getFileName(),docFile.getFileSuffix());
-
                     }
                 }
-
             }
             return synchronizedFlagService.updateFlag(1);
         }else if(up.getStatus() == 3) {
@@ -394,11 +388,12 @@
         for(String id : deviceIds) {
             stream = new AssignFileStream();
             stream.setProcessId(assignFileRequest.getProcessId());
+            stream.setStepId(assignFileRequest.getStepId());
             stream.setDocId(assignFileRequest.getDocId());
             stream.setFileId(assignFileRequest.getFileId());
             stream.setApplyReason(assignFileRequest.getApplyReason());
             stream.setDeviceId(id);
-            ResponseResult b = applyAssignFile(stream);
+            Result b = applyAssignFile(stream);
             if(!b.isSuccess())
                 ExceptionCast.cast(ActivitiCode.ACT_APPLY_ERROR);
         }
@@ -413,14 +408,14 @@
         List<TaskRequest> list = approveBatchRequest.getTaskArr();
         if(list == null || list.isEmpty())
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        list.forEach(item -> {
-            AssignFileStream stream = new AssignFileStream();
-            stream.setApproveContent(approveBatchRequest.getApproveContent());
-            stream.setStatus(approveBatchRequest.getStatus());
-            boolean b = approveAssignFile(item.getId(), item.getBusinessKey(), stream);
-            if(!b)
-                ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
-        });
+//        list.forEach(item -> {
+//            AssignFileStream stream = new AssignFileStream();
+//            stream.setApproveContent(approveBatchRequest.getApproveContent());
+//            stream.setStatus(approveBatchRequest.getStatus());
+//            boolean b = approveAssignFile(item.getId(), item.getBusinessKey(), stream);
+//            if(!b)
+//                ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
+//        });
         return synchronizedFlagService.updateFlag(1);
     }
 
@@ -785,4 +780,25 @@
         }
     }
 
+    @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) {
+        return Lists.newArrayList("jeecg");
+    }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/HisWorkTaskServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/HisWorkTaskServiceImpl.java
new file mode 100644
index 0000000..27548c2
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/HisWorkTaskServiceImpl.java
@@ -0,0 +1,36 @@
+package org.jeecg.modules.flow.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.flow.entity.HisWorkTask;
+import org.jeecg.modules.flow.mapper.IHisWorkTaskMapper;
+import org.jeecg.modules.flow.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/flow/service/impl/PlmCommonUtilsServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/PlmCommonUtilsServiceImpl.java
new file mode 100644
index 0000000..6fa60e7
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/PlmCommonUtilsServiceImpl.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.flow.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.flow.entity.UserRole;
+import org.jeecg.modules.flow.mapper.PlmCommonUtilsMapper;
+import org.jeecg.modules.flow.service.IPlmCommonUtilsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Service
+public class PlmCommonUtilsServiceImpl extends ServiceImpl<PlmCommonUtilsMapper, UserRole> implements IPlmCommonUtilsService {
+    @Autowired
+    private PlmCommonUtilsMapper plmCommonUtilsMapper;
+
+	@Override
+    public List<UserRole> queryAllRoleList() {
+        List<UserRole> userRoles = baseMapper.queryAllRoleList();
+        return userRoles;
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImpl.java
new file mode 100644
index 0000000..e8f2bc6
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImpl.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.flow.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.flow.entity.WorkTaskData;
+import org.jeecg.modules.flow.mapper.IWorkTaskMapper;
+import org.jeecg.modules.flow.service.IWorkTaskService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class WorkTaskServiceImpl extends ServiceImpl<IWorkTaskMapper, WorkTaskData> implements IWorkTaskService {
+
+
+    @Override
+    public List<WorkTaskData> queryAllworkTask() {
+        return baseMapper.queryAllworkTask();
+    }
+
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImplVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImplVo.java
new file mode 100644
index 0000000..a66124d
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImplVo.java
@@ -0,0 +1,38 @@
+package org.jeecg.modules.flow.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.flow.entity.WorkTaskDataVo;
+import org.jeecg.modules.flow.mapper.IWorkTaskVoMapper;
+import org.jeecg.modules.flow.service.IWorkTaskServiceVo;
+import org.jeecg.modules.flow.vo.FlowMy;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+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/flow/vo/AssignFlowTaskVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/AssignFlowTaskVo.java
new file mode 100644
index 0000000..a925647
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/AssignFlowTaskVo.java
@@ -0,0 +1,53 @@
+package org.jeecg.modules.flow.vo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <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;
+
+    private String xiugaiId;
+
+    private Integer status;
+
+    private String secretLevel;
+
+    private String approveContent;
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/FlowMy.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/FlowMy.java
new file mode 100644
index 0000000..b459dfb
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/FlowMy.java
@@ -0,0 +1,33 @@
+package org.jeecg.modules.flow.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * <p>娴佺▼浠诲姟<p>
+ *
+ */
+@Data
+@ApiModel("宸ヤ綔娴�--寰呭姙宸插姙鍙拌处")
+public class FlowMy {
+    /**
+     * 娴佺▼鍚嶇О
+     */
+    private String flowName;
+    /**
+     * 娴佺▼涓氬姟绠�瑕佹弿杩�
+     */
+    private String title;
+    /**
+     * 鐢ㄦ埛username
+     */
+    private String username;
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    private String startTime;
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    private String endTime;
+}
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/FlowableDatabaseConfig.java b/lxzn-module-flowable/src/main/java/org/jeecg/FlowableDatabaseConfig.java
new file mode 100644
index 0000000..f67d5a9
--- /dev/null
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/FlowableDatabaseConfig.java
@@ -0,0 +1,19 @@
+package org.jeecg;
+import org.flowable.engine.ProcessEngine;
+import org.flowable.engine.ProcessEngineConfiguration;
+import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;
+
+public class FlowableDatabaseConfig {
+    public static void main(String[] args) {
+        // 鍒涘缓娴佺▼寮曟搸閰嶇疆
+        ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
+                .setJdbcUrl("jdbc:sqlserver://192.168.1.118:1433;databasename=LXZN_TEXT_HANGYU_FLOWABLE;nullCatalogMeansCurrent=true")
+                .setJdbcUsername("sa")
+                .setJdbcPassword("123")
+                .setJdbcDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver")
+                .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
+                .setDatabaseType("mssql"); // 鎸囧畾鏁版嵁搴撶被鍨�
+        // 鏋勫缓娴佺▼寮曟搸
+        ProcessEngine processEngine = cfg.buildProcessEngine();
+    }
+}
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusinessDto.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java
similarity index 71%
rename from lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusinessDto.java
rename to lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java
index f0b48c5..a15c0b1 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusinessDto.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java
@@ -1,14 +1,21 @@
-package org.jeecg.modules.flowable.apithird.business.entity;
+package org.jeecg.modules.flowable.apithird.business.dto;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
+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.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;
 
 /**
@@ -18,83 +25,105 @@
  * @Version: V1.0
  */
 @Data
+@TableName("flow_my_business")
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
 @ApiModel(value="flow_my_business瀵硅薄", description="娴佺▼涓氬姟鎵╁睍琛�")
 public class FlowMyBusinessDto implements Serializable {
     private static final long serialVersionUID = 1L;
 
+	/**涓婚敭ID*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭ID")
+    private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+	/**淇敼浜�*/
+    @ApiModelProperty(value = "淇敼浜�")
+    private String updateBy;
+	/**淇敼鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    private Date updateTime;
 	/**娴佺▼瀹氫箟key 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d*/
-	@TableField(exist = false)
 	@Excel(name = "娴佺▼瀹氫箟key 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d", width = 15)
     @ApiModelProperty(value = "娴佺▼瀹氫箟key 涓�涓猭ey浼氭湁澶氫釜鐗堟湰鐨刬d")
     private String processDefinitionKey;
 	/**娴佺▼瀹氫箟id 涓�涓祦绋嬪畾涔夊敮涓�*/
-    @TableField(exist = false)
 	@Excel(name = "娴佺▼瀹氫箟id 涓�涓祦绋嬪畾涔夊敮涓�", width = 15)
     @ApiModelProperty(value = "娴佺▼瀹氫箟id 涓�涓祦绋嬪畾涔夊敮涓�")
     private String processDefinitionId;
 	/**娴佺▼涓氬姟瀹炰緥id 涓�涓祦绋嬩笟鍔″敮涓�锛屾湰琛ㄤ腑涔熷敮涓�*/
-    @TableField(exist = false)
 	@Excel(name = "娴佺▼涓氬姟瀹炰緥id 涓�涓祦绋嬩笟鍔″敮涓�锛屾湰琛ㄤ腑涔熷敮涓�", width = 15)
     @ApiModelProperty(value = "娴佺▼涓氬姟瀹炰緥id 涓�涓祦绋嬩笟鍔″敮涓�锛屾湰琛ㄤ腑涔熷敮涓�")
     private String processInstanceId;
 	/**娴佺▼涓氬姟绠�瑕佹弿杩�*/
-    @TableField(exist = false)
 	@Excel(name = "娴佺▼涓氬姟绠�瑕佹弿杩�", width = 15)
     @ApiModelProperty(value = "娴佺▼涓氬姟绠�瑕佹弿杩�")
     private String title;
 	/**涓氬姟琛╥d锛岀悊璁哄敮涓�*/
-    @TableField(exist = false)
 	@Excel(name = "涓氬姟琛╥d锛岀悊璁哄敮涓�", width = 15)
     @ApiModelProperty(value = "涓氬姟琛╥d锛岀悊璁哄敮涓�")
     private String dataId;
 	/**涓氬姟绫诲悕锛岀敤鏉ヨ幏鍙杝pring瀹瑰櫒閲岀殑鏈嶅姟瀵硅薄*/
-    @TableField(exist = false)
 	@Excel(name = "涓氬姟绫诲悕锛岀敤鏉ヨ幏鍙杝pring瀹瑰櫒閲岀殑鏈嶅姟瀵硅薄", width = 15)
     @ApiModelProperty(value = "涓氬姟绫诲悕锛岀敤鏉ヨ幏鍙杝pring瀹瑰櫒閲岀殑鏈嶅姟瀵硅薄")
     private String serviceImplName;
 	/**鐢宠浜�*/
-    @TableField(exist = false)
 	@Excel(name = "鐢宠浜�", width = 15)
     @ApiModelProperty(value = "鐢宠浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
     private String proposer;
 	/**娴佺▼鐘舵�佽鏄庯紝鏈夛細鍚姩  鎾ゅ洖  椹冲洖  瀹℃壒涓�  瀹℃壒閫氳繃  瀹℃壒寮傚父*/
-    @TableField(exist = false)
 	@Excel(name = "娴佺▼鐘舵�佽鏄庯紝鏈夛細鍚姩  鎾ゅ洖  椹冲洖  瀹℃壒涓�  瀹℃壒閫氳繃  瀹℃壒寮傚父", width = 15)
     @ApiModelProperty(value = "娴佺▼鐘舵�佽鏄庯紝鏈夛細鍚姩  鎾ゅ洖  椹冲洖  瀹℃壒涓�  瀹℃壒閫氳繃  瀹℃壒寮傚父")
     private String actStatus;
 	/**褰撳墠鐨勮妭鐐瑰疄渚嬩笂鐨処d*/
-    @TableField(exist = false)
 	@Excel(name = "褰撳墠鐨勮妭鐐笽d", width = 15)
     @ApiModelProperty(value = "褰撳墠鐨勮妭鐐笽d")
     private String taskId;
 	/**褰撳墠鐨勮妭鐐�*/
-    @TableField(exist = false)
 	@Excel(name = "褰撳墠鐨勮妭鐐�", width = 15)
     @ApiModelProperty(value = "褰撳墠鐨勮妭鐐�")
     private String taskName;
 	/**褰撳墠鐨勮妭鐐瑰畾涔変笂鐨処d*/
-    @TableField(exist = false)
 	@Excel(name = "褰撳墠鐨勮妭鐐�", width = 15)
     @ApiModelProperty(value = "褰撳墠鐨勮妭鐐�")
     private String taskNameId;
 	/**褰撳墠鐨勮妭鐐瑰彲浠ュ鐞嗙殑鐢ㄦ埛鍚嶏紝涓簎sername鐨勯泦鍚坖son瀛楃涓�*/
-    @TableField(exist = false)
 	@Excel(name = "褰撳墠鐨勮妭鐐瑰彲浠ュ鐞嗙殑鐢ㄦ埛鍚�", width = 15)
     @ApiModelProperty(value = "褰撳墠鐨勮妭鐐瑰彲浠ュ鐞嗙殑鐢ㄦ埛鍚�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
     private String todoUsers;
 	/**澶勭悊杩囩殑浜�,涓簎sername鐨勯泦鍚坖son瀛楃涓�*/
-    @TableField(exist = false)
 	@Excel(name = "澶勭悊杩囩殑浜�", width = 15)
     @ApiModelProperty(value = "澶勭悊杩囩殑浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
     private String doneUsers;
 	/**褰撳墠浠诲姟鑺傜偣鐨勪紭鍏堢骇 娴佺▼瀹氫箟鐨勬椂鍊欐墍濉�*/
-    @TableField(exist = false)
 	@Excel(name = "褰撳墠浠诲姟鑺傜偣鐨勪紭鍏堢骇 娴佺▼瀹氫箟鐨勬椂鍊欐墍濉�", width = 15)
     @ApiModelProperty(value = "褰撳墠浠诲姟鑺傜偣鐨勪紭鍏堢骇 娴佺▼瀹氫箟鐨勬椂鍊欐墍濉�")
     private String priority;
 	/**娴佺▼鍙橀噺*/
 	@TableField(exist = false)
     private Map<String,Object> values;
+
+    /**褰撳墠鑺傜偣鐨勭姸鎬�*/
+    @TableField(exist = false)
+    private String taskStatus;
+
+    private transient String flowName;
+
+    /**娴佺▼寮�濮嬫椂闂�*/
+    private transient Date startTime;
+
+    /**娴佺▼缁撴潫鏃堕棿*/
+    private transient Date endTime;
 }
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 1e8bb74..da88ca8 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
@@ -10,6 +10,7 @@
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -78,6 +79,7 @@
 	/**鐢宠浜�*/
 	@Excel(name = "鐢宠浜�", width = 15)
     @ApiModelProperty(value = "鐢宠浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
     private String proposer;
 	/**娴佺▼鐘舵�佽鏄庯紝鏈夛細鍚姩  鎾ゅ洖  椹冲洖  瀹℃壒涓�  瀹℃壒閫氳繃  瀹℃壒寮傚父*/
 	@Excel(name = "娴佺▼鐘舵�佽鏄庯紝鏈夛細鍚姩  鎾ゅ洖  椹冲洖  瀹℃壒涓�  瀹℃壒閫氳繃  瀹℃壒寮傚父", width = 15)
@@ -98,10 +100,12 @@
 	/**褰撳墠鐨勮妭鐐瑰彲浠ュ鐞嗙殑鐢ㄦ埛鍚嶏紝涓簎sername鐨勯泦鍚坖son瀛楃涓�*/
 	@Excel(name = "褰撳墠鐨勮妭鐐瑰彲浠ュ鐞嗙殑鐢ㄦ埛鍚�", width = 15)
     @ApiModelProperty(value = "褰撳墠鐨勮妭鐐瑰彲浠ュ鐞嗙殑鐢ㄦ埛鍚�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
     private String todoUsers;
 	/**澶勭悊杩囩殑浜�,涓簎sername鐨勯泦鍚坖son瀛楃涓�*/
 	@Excel(name = "澶勭悊杩囩殑浜�", width = 15)
     @ApiModelProperty(value = "澶勭悊杩囩殑浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
     private String doneUsers;
 	/**褰撳墠浠诲姟鑺傜偣鐨勪紭鍏堢骇 娴佺▼瀹氫箟鐨勬椂鍊欐墍濉�*/
 	@Excel(name = "褰撳墠浠诲姟鑺傜偣鐨勪紭鍏堢骇 娴佺▼瀹氫箟鐨勬椂鍊欐墍濉�", width = 15)
@@ -110,4 +114,8 @@
 	/**娴佺▼鍙橀噺*/
 	@TableField(exist = false)
     private Map<String,Object> values;
+
+    /**褰撳墠鑺傜偣鐨勭姸鎬�*/
+    @TableField(exist = false)
+    private String taskStatus;
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java
index 8aa4b88..93b59ad 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java
@@ -1,6 +1,9 @@
 package org.jeecg.modules.flowable.apithird.business.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.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto;
 import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
 
 /**
@@ -11,4 +14,11 @@
  */
 public interface FlowMyBusinessMapper extends BaseMapper<FlowMyBusiness> {
 
+    /**
+     * 娴佺▼鎬诲彴璐�
+     * @param flowMyBusinessDto
+     * @return
+     */
+    IPage<FlowMyBusinessDto> findPageList(Page<FlowMyBusiness> page, FlowMyBusinessDto flowMyBusinessDto);
+
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml
index 78b00c1..46ca3a5 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
@@ -2,4 +2,21 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.flowable.apithird.business.mapper.FlowMyBusinessMapper">
 
+    <select id="findPageList" 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,
+        NC_ASSIGN_FILE_STREAM.STATUS as status,
+        ACT_RE_PROCDEF.NAME_ as flowName
+        FROM
+            flow_my_business
+                LEFT JOIN ACT_HI_PROCINST ON flow_my_business.process_instance_id = ACT_HI_PROCINST.ID_
+                LEFT JOIN ACT_RE_PROCDEF ON flow_my_business.process_definition_id = ACT_RE_PROCDEF.ID_
+                LEFT JOIN NC_ASSIGN_FILE_STREAM ON flow_my_business.data_id = NC_ASSIGN_FILE_STREAM.STREAM_ID
+        where
+            1 = 1
+        ORDER BY
+            flow_my_business.create_time desc
+    </select>
 </mapper>
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java
index 298fdcc..0ee5d72 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java
@@ -1,6 +1,9 @@
 package org.jeecg.modules.flowable.apithird.business.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.flowable.apithird.business.dto.FlowMyBusinessDto;
 import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
 
 /**
@@ -11,4 +14,5 @@
  */
 public interface IFlowMyBusinessService extends IService<FlowMyBusiness> {
 
+    IPage<FlowMyBusinessDto> findPageList(Page page, FlowMyBusinessDto flowMyBusinessDto);
 }
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 54b3646..8dbf02e 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
@@ -1,7 +1,10 @@
 package org.jeecg.modules.flowable.apithird.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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;
@@ -24,4 +27,24 @@
         FlowMyBusiness business = this.getOne(flowMyBusinessLambdaQueryWrapper);
         return business;
     }
+
+
+    public FlowMyBusiness getByProcessInstanceId(String processInstanceId) {
+        LambdaQueryWrapper<FlowMyBusiness> flowMyBusinessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        flowMyBusinessLambdaQueryWrapper.eq(FlowMyBusiness::getProcessInstanceId,processInstanceId)
+        ;
+        //濡傛灉淇濆瓨鏁版嵁鍓嶆湭璋冪敤蹇呰皟鐨凢lowCommonService.initActBusiness鏂规硶锛屽氨浼氭湁闂
+        FlowMyBusiness business = this.getOne(flowMyBusinessLambdaQueryWrapper);
+        return business;
+    }
+
+    /**
+     * 娴佺▼鎬诲彴璐�
+     * @param flowMyBusinessDto
+     * @return
+     */
+    @Override
+    public IPage<FlowMyBusinessDto> findPageList(Page page, FlowMyBusinessDto flowMyBusinessDto){
+        return this.baseMapper.findPageList(page,flowMyBusinessDto);
+    }
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/entity/ActStatus.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/entity/ActStatus.java
index 51f7426..ab7368c 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/entity/ActStatus.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/entity/ActStatus.java
@@ -8,10 +8,9 @@
 public interface ActStatus {
     //鍚姩 鎾ゅ洖 椹冲洖 瀹℃壒涓� 瀹℃壒閫氳繃 瀹℃壒寮傚父
     //鏈祦绋嬩笉搴旀湁鍚姩鐘舵�侊紝鍚姩鍗宠繘鍏ュ鎵癸紝绗竴涓妭鐐瑰氨鏄彂璧蜂汉鑺傜偣锛屾湭鏂逛究涓氬姟鍖哄垎锛岃瀹氫负鈥滃惎鍔ㄢ�濈姸鎬�
-    String start = "鍚姩";
+    String start = "鎻愪氦鐢宠";
     String recall = "鎾ゅ洖";
     String reject = "椹冲洖";
     String doing = "瀹℃壒涓�";
-    String pass = "瀹℃壒閫氳繃";
-    String err = "瀹℃壒寮傚父";
+    String pass = "瀹℃壒";
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/service/FlowCommonService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/service/FlowCommonService.java
index 90af8d8..d52277e 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/service/FlowCommonService.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/service/FlowCommonService.java
@@ -3,6 +3,7 @@
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
 import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
 import org.jeecg.modules.flowable.apithird.common.exception.CustomException;
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java
index 8202e42..4fdec9a 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java
@@ -30,6 +30,9 @@
     @ApiModelProperty("浠诲姟鎵ц浜篒d")
     private String assigneeId;
 
+    @ApiModelProperty("浠诲姟鎻忚堪")
+    private String description;
+
     @ApiModelProperty("閮ㄩ棬鍚嶇О")
     private String deptName;
 
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 fc68a63..b2e1b06 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
@@ -45,4 +45,6 @@
     private List<String> candidateGroups;
 
     private String xiugaiId;
+
+    private Integer status;
 }
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 5add0ad..cdfca7e 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
@@ -9,8 +9,10 @@
 import org.apache.commons.io.IOUtils;
 import org.flowable.bpmn.model.BpmnModel;
 import org.flowable.bpmn.model.UserTask;
+import org.flowable.common.engine.impl.identity.Authentication;
 import org.flowable.engine.ProcessEngineConfiguration;
 import org.flowable.engine.history.HistoricActivityInstance;
+import org.flowable.engine.history.HistoricProcessInstance;
 import org.flowable.engine.repository.Deployment;
 import org.flowable.engine.repository.ProcessDefinition;
 import org.flowable.engine.repository.ProcessDefinitionQuery;
@@ -237,11 +239,12 @@
      * @return
      */
     @Override
-    public Result startProcessInstanceByKey(String procDefKey, Map<String, Object> variables) {
+    public Result<?> startProcessInstanceByKey(String procDefKey, Map<String, Object> variables) {
         ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                 .processDefinitionKey(procDefKey)
                 .latestVersion().singleResult();
-        return startProcessInstanceById(processDefinition.getId(),variables);
+        Result result = startProcessInstanceById(processDefinition.getId(),variables);
+        return result;
     }
     /**
      * 鏍规嵁娴佺▼瀹氫箟ID鍚姩娴佺▼瀹炰緥
@@ -252,7 +255,7 @@
      */
     @Override
     @Transactional
-    public Result startProcessInstanceById(String procDefId, Map<String, Object> variables) {
+    public Result<?> startProcessInstanceById(String procDefId, Map<String, Object> variables) {
             ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                     .processDefinitionId(procDefId)
                     .singleResult();
@@ -268,9 +271,15 @@
             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.setAssignee(task.getId(), sysUser.getUsername());
+                task.setDescription(variables.get("organization").toString());
+                // 鏇存柊浠诲姟
+                taskService.saveTask(task);
                 //taskService.complete(task.getId(), variables);
             }
             //璁剧疆鎵�鏈夌敵璇蜂汉
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 543bdc5..3fe1de0 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
@@ -105,7 +105,7 @@
             taskService.setAssignee(taskVo.getTaskId(), loginUser.getUsername());
             //taskService.complete(taskVo.getTaskId(), taskVo.getValues());
         }
-        /*======================瀹℃壒閫氳繃  鍥炶皟浠ュ強鍏抽敭鏁版嵁淇濆瓨======================*/
+        /*======================瀹℃壒缁撴潫  鍥炶皟浠ュ強鍏抽敭鏁版嵁淇濆瓨======================*/
         //涓氬姟鏁版嵁id
         String dataId = taskVo.getDataId();
         //濡傛灉淇濆瓨鏁版嵁鍓嶆湭璋冪敤蹇呰皟鐨凢lowCommonService.initActBusiness鏂规硶锛屽氨浼氭湁闂
@@ -992,7 +992,7 @@
             flowTask.setProcDefId(histTask.getProcessDefinitionId());
             flowTask.setTaskDefKey(histTask.getTaskDefinitionKey());
             flowTask.setTaskName(histTask.getName());
-
+            flowTask.setDescription(flowMyBusinessService.getByProcessInstanceId(histTask.getProcessInstanceId()).getTitle());
             // 娴佺▼瀹氫箟淇℃伅
             ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
                     .processDefinitionId(histTask.getProcessDefinitionId())

--
Gitblit v1.9.3