lyh
2025-02-28 1becd6d46123723bd2b898fd565b4331fb2cb2d8
新增flow able 代办已办
已重命名1个文件
已添加24个文件
已修改18个文件
1296 ■■■■■ 文件已修改
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/controller/AssignFileStreamFlowController.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/HisWorkTask.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/UserRole.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskData.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/entity/WorkTaskDataVo.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/ext/AssignFileStreamExt.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/AssignFileStreamMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IHisWorkTaskMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/IWorkTaskVoMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/PlmCommonUtilsMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/AssignFileStreamMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/HisWorkTaskMapper.xml 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/PlmCommonUtilsMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/mapper/xml/WorkTaskVoMapper.xml 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/request/AssignFileRequest.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IAssignFileStreamService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IHisWorkTaskService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IPlmCommonUtilsService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/IWorkTaskServiceVo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/AssignFileStreamServiceImpl.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/HisWorkTaskServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/PlmCommonUtilsServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/service/impl/WorkTaskServiceImplVo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/AssignFlowTaskVo.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/flow/vo/FlowMy.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/FlowableDatabaseConfig.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/FlowMyBusiness.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/FlowMyBusinessMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/mapper/xml/FlowMyBusinessMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/IFlowMyBusinessService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/service/impl/FlowMyBusinessServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/entity/ActStatus.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/service/FlowCommonService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/vo/FlowTaskVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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));
    }
}
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();
    }
}
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,与执行实例表中的ID字段关联*/
    @TableField("assignee")
    private String assignee;
    /**流程实例ID,与流程实例表中的ID字段关联*/
    @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,与流程定义表中的ID字段关联*/
    @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;
}
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;
}
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,与执行实例表中的ID字段关联*/
    @TableField("execution_id_")
    private String executionId;
    /**流程实例ID,与流程实例表中的ID字段关联*/
    @TableField("proc_inst_id_")
    private String procInstId;
    /**流程定义ID,与流程定义表中的ID字段关联*/
    @TableField("proc_def_id_")
    private String procDefId;
    /**任务名称*/
    @TableField("name_")
    private String name;
    /**任务定义Key,与流程定义表中的KEY字段关联*/
    @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;
    /**父任务ID,用于表示任务的层级关系 æš‚时用不上*/
    @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;
}
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,与执行实例表中的ID字段关联*/
//    @TableField("execution_id_")
    private String executionId;
    /**流程实例ID,与流程实例表中的ID字段关联*/
//    @TableField("proc_inst_id_")
    private String procInstId;
    /**流程定义ID,与流程定义表中的ID字段关联*/
//    @TableField("proc_def_id_")
    private String procDefId;
    /**任务名称*/
//    @TableField("name_")
    private String name;
    /**任务定义Key,与流程定义表中的KEY字段关联*/
//    @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 = "业务表id,理论唯一")
    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;
//    /**父任务ID,用于表示任务的层级关系 æš‚时用不上*/
//    @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;
}
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;
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);
}
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);
}
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();
}
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);
}
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();
}
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>
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>
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">
      <!-- ã€vue3专用】 -->
    <select id="queryAllRoleList" resultType="org.jeecg.modules.flow.entity.UserRole">
        select
            id,role_name,role_code
        from sys_role
    </select>
</mapper>
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>
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>
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;
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);
    /**
     * æ‰¹é‡æŒ‡æ´¾åˆ°è®¾å¤‡
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);
}
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();
}
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();
}
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);
}
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");
    }
}
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);
    }
}
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;
    }
}
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();
    }
}
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;
    }
}
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;
}
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;
}
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();
    }
}
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/dto/FlowMyBusinessDto.java
ÎļþÃû´Ó lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/apithird/business/entity/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 ä¸€ä¸ªkey会有多个版本的id*/
    @TableField(exist = false)
    @Excel(name = "流程定义key ä¸€ä¸ªkey会有多个版本的id", width = 15)
    @ApiModelProperty(value = "流程定义key ä¸€ä¸ªkey会有多个版本的id")
    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;
    /**业务表id,理论唯一*/
    @TableField(exist = false)
    @Excel(name = "业务表id,理论唯一", width = 15)
    @ApiModelProperty(value = "业务表id,理论唯一")
    private String dataId;
    /**业务类名,用来获取spring容器里的服务对象*/
    @TableField(exist = false)
    @Excel(name = "业务类名,用来获取spring容器里的服务对象", width = 15)
    @ApiModelProperty(value = "业务类名,用来获取spring容器里的服务对象")
    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;
    /**当前的节点实例上的Id*/
    @TableField(exist = false)
    @Excel(name = "当前的节点Id", width = 15)
    @ApiModelProperty(value = "当前的节点Id")
    private String taskId;
    /**当前的节点*/
    @TableField(exist = false)
    @Excel(name = "当前的节点", width = 15)
    @ApiModelProperty(value = "当前的节点")
    private String taskName;
    /**当前的节点定义上的Id*/
    @TableField(exist = false)
    @Excel(name = "当前的节点", width = 15)
    @ApiModelProperty(value = "当前的节点")
    private String taskNameId;
    /**当前的节点可以处理的用户名,为username的集合json字符串*/
    @TableField(exist = false)
    @Excel(name = "当前的节点可以处理的用户名", width = 15)
    @ApiModelProperty(value = "当前的节点可以处理的用户名")
    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
    private String todoUsers;
    /**处理过的人,为username的集合json字符串*/
    @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;
}
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 @@
    /**当前的节点可以处理的用户名,为username的集合json字符串*/
    @Excel(name = "当前的节点可以处理的用户名", width = 15)
    @ApiModelProperty(value = "当前的节点可以处理的用户名")
    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
    private String todoUsers;
    /**处理过的人,为username的集合json字符串*/
    @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;
}
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);
}
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>
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);
}
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)
        ;
        //如果保存数据前未调用必调的FlowCommonService.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);
    }
}
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 = "审批";
}
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;
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/domain/dto/FlowTaskDto.java
@@ -30,6 +30,9 @@
    @ApiModelProperty("任务执行人Id")
    private String assigneeId;
    @ApiModelProperty("任务描述")
    private String description;
    @ApiModelProperty("部门名称")
    private String deptName;
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;
}
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);
            }
            //设置所有申请人
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();
        //如果保存数据前未调用必调的FlowCommonService.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())