blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java
@@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.task.Comment; import org.flowable.task.api.history.HistoricTaskInstance; @@ -43,7 +44,8 @@ @Autowired private HistoryService historyService; @Autowired private RuntimeService runtimeService; @GetMapping("overtime-list") @ApiOperationSupport(order = 3) @@ -94,5 +96,25 @@ return R.data(result); } @GetMapping("search-list") @ApiOperationSupport(order = 3) @Operation(summary = "流程查询", description = "查询进行中的所有流程") public R<IPage<FlowVO>> overtimeList(@Parameter(description = "任务到达时间开始") LocalDate createTimeBegin, @Parameter(description = "任务到达时间截止")LocalDate createTimeEnd, @Parameter(description = "关键字") String keyword, Query query) { IPage<FlowVO> pages = businessService.selectSearchPage(Condition.getPage(query), createTimeBegin,createTimeEnd,keyword); return R.data(pages); } @PostMapping("delete-instance") @Operation(summary = "流程删除", description = "删除id指定的流程实例") public R<Void> deleteInstance(@Parameter(description = "任务到达时间开始") String processInstancesId) { try { runtimeService.deleteProcessInstance(processInstancesId, "流程查询-删除"); } catch (Exception e) { log.error("删除流程失败",e); return R.fail(e.getMessage()); } return R.success(); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
@@ -419,4 +419,44 @@ page.setRecords(flowList); return page; } /** * 流程查询 功能 的分页 * @param page * @param createTimeBegin * @param createTimeEnd * @param assigneeName * @param keyword * @return */ public IPage<FlowVO> selectSearchPage(IPage<FlowVO> page, LocalDate createTimeBegin, LocalDate createTimeEnd, String keyword) { List<FlowVO> flowList = new LinkedList<>(); Date now = new Date(); TaskQuery taskQuery = taskService.createTaskQuery().active().includeProcessVariables(); if(Func.isNotEmpty(createTimeBegin)) { taskQuery.taskCreatedAfter(DateUtil.toDate(createTimeBegin)); } if(Func.isNotEmpty(createTimeEnd)) { taskQuery.taskCreatedBefore(DateUtil.toDate(createTimeEnd.plusDays(1))); } addKeywordCondition(taskQuery, keyword); taskQuery.orderByTaskCreateTime().desc(); // 构建列表数据 FlowVO bladeFlow = new FlowVO(); buildFlowTaskList(bladeFlow, flowList, taskQuery);//FlowEngineConstant.STATUS_TODO // 计算总数 long count = taskQuery.count(); // 设置页数 page.setSize(count); // 设置总数 page.setTotal(count); // 设置数据 page.setRecords(flowList); return page; } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
@@ -141,6 +141,12 @@ return R.data(approveRecordService.listByNcProgramId(ncProgramId)); } @GetMapping("/history-by-bindnodeid") @Operation(summary = "根据绑定节点id获取历史列表", description = "程序历史列表,仅‘程序包’字典值70的数据。用于显示程序的‘历史版本’") public R<List<NcProgramVO>> historyByBindNodeId(@Parameter(description="节点ID(nodeType=70的节点id)")@RequestParam Long bindNodeId) { return R.data(ncProgramService.historyByBindNode(bindNodeId)); } /* @PostMapping("/send") @Operation(summary = "程序下发", description = "工控网数控程序下发(发送到机床配置的下发目录),根据id") blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
@@ -64,4 +64,22 @@ } @PostMapping("/export-approve-table") @Operation(summary = "导出审批表", description = "导出审批表excel") public void exportApproveTaable(@RequestBody @Parameter(description = "审批表id数组") IdsVO vo, HttpServletResponse response) { if(vo.getIds() == null || vo.getIds().length == 0) { throw new ServiceException("未选择文件导出"); } try { String filename = "todncexp-"+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".zip"; response.setHeader("Content-Disposition", "attachment; filename="+filename); response.setContentType("application/octet-stream"); ncProgramExportDNCService.exportDnc(vo.getIds(),response.getOutputStream()); } catch (IOException e) { log.error("导出DNC异常", e); throw new RuntimeException(e); } } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java
@@ -103,6 +103,23 @@ log.warn("文件名无法匹配到数控程序,{}",filePath); return; } //保存文件到css,避免后续不同部署节点拿不到文件 String ossName; String url; try(FileInputStream fins = new FileInputStream(filePath.toFile());){ BladeFile bfile = ossTemplate.putFile(programName, fins); ossName = bfile.getName(); url = bfile.getLink(); } prog.setOssName(ossName); prog.setUrl(url); //TODO,是否删除原来的文件? ncProgramService.updateById(prog); cureFlowService.startOne(prog);//启动一个程序的固化流程 /* DncBackFile backFile = new DncBackFile(); backFile.setNcProgramId(prog.getId()); //保存文件到css,避免后续不同部署节点拿不到文件 @@ -112,6 +129,8 @@ backFile.setUrl(bfile.getLink()); } dncBackFileService.save(backFile); */ }else{ log.warn("文件传输中,后续再操作:{}",filePath); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -364,4 +364,21 @@ return this.count(wrapper)>0; } /** * 显示程序的历史记录列表 * @param bindNodeId * @return */ public List<NcProgramVO> historyByBindNode(Long bindNodeId) { NcProgram program = this.getByBindNodeId(bindNodeId); List<NcProgram> list = this.lambdaQuery().eq(NcProgram::getName,program.getName()) .eq(NcProgram::getNcNodeId,program.getNcNodeId()).orderByDesc(NcProgram::getCreateTime).list(); return list.stream().map(p -> { NcProgramVO vo = new NcProgramVO(); BeanUtils.copyProperties(p,vo); return vo;}).toList(); } } doc/sql/mdm/mdm.mysql.all.create.sql
@@ -89,24 +89,6 @@ PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='程序节点目录'; /**流程实例与节点关联表,记录创建时机:用户在程序编制节点手动关联*/ DROP TABLE IF EXISTS `mdm_process_prog_ref`; CREATE TABLE `mdm_process_prog_ref` ( `id` bigint NOT NULL, `tenant_id` varchar(6) DEFAULT NULL COMMENT '所属租户', `process_instance_id` varchar(64) NOT NULL COMMENT '流程实例id', `nc_program_id` bigint DEFAULT NULL COMMENT '数控程序id', `process_definition_key` varchar(100) DEFAULT NULL COMMENT '流程定义key', `status` int DEFAULT NULL COMMENT '业务状态', `create_dept` bigint DEFAULT NULL COMMENT '创建单位', `is_deleted` int DEFAULT NULL, `create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_user` bigint DEFAULT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_user` bigint DEFAULT NULL COMMENT '更新人', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='流程实例与程序关联表'; DROP TABLE IF EXISTS `mdm_nc_program`; CREATE TABLE `mdm_nc_program` ( `id` bigint NOT NULL, @@ -132,6 +114,7 @@ `is_last_edition` int NOT NULL COMMENT '是否最新版次,1:最新版次;0:历史版次,主要取该字段=1的数据,0是历史版次', `is_locked` int DEFAULT NULL COMMENT '锁定状态,1:锁定;0:正常', `is_test` int DEFAULT NULL COMMENT '是否测试程序,1:是;0:否', `version_number` int DEFAULT NULL COMMENT '版本号', `task_assign_time` datetime DEFAULT NULL COMMENT '程序的任务下发的时间(用于检查是否为重复的任务)', `status` int DEFAULT NULL COMMENT '业务状态', `create_dept` bigint DEFAULT NULL COMMENT '创建单位', @@ -142,6 +125,25 @@ `update_user` bigint DEFAULT NULL COMMENT '更新人', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='数控程序'; /**流程实例与数控程序关联表,记录创建时机:用户在程序编制节点手动关联*/ DROP TABLE IF EXISTS `mdm_process_prog_ref`; CREATE TABLE `mdm_process_prog_ref` ( `id` bigint NOT NULL, `tenant_id` varchar(6) DEFAULT NULL COMMENT '所属租户', `process_instance_id` varchar(64) NOT NULL COMMENT '流程实例id', `nc_program_id` bigint DEFAULT NULL COMMENT '数控程序id', `process_definition_key` varchar(100) DEFAULT NULL COMMENT '流程定义key', `status` int DEFAULT NULL COMMENT '业务状态', `create_dept` bigint DEFAULT NULL COMMENT '创建单位', `is_deleted` int DEFAULT NULL, `create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_user` bigint DEFAULT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_user` bigint DEFAULT NULL COMMENT '更新人', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='流程实例与程序关联表'; /** 流程审批记录表,审批过程中记录 @@ -204,16 +206,13 @@ PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='数控程序交换记录'; DROP TABLE IF EXISTS `mdm_machine_back_file`; CREATE TABLE `mdm_machine_back_file` ( `id` bigint NOT NULL, `tenant_id` varchar(6) DEFAULT NULL COMMENT '所属租户', `program_id` bigint NOT NULL COMMENT '程序编码', `machine_code` varchar(100) DEFAULT NULL COMMENT '所属机床代码', `nc_program_id` bigint NOT NULL COMMENT '程序编码', `confirm_time` datetime DEFAULT NULL COMMENT '确认时间', `oss_name` varchar(100) NULL COMMENT 'oss中的文件名', `status` int DEFAULT NULL COMMENT '业务状态', `create_dept` bigint DEFAULT NULL COMMENT '创建单位', `is_deleted` int DEFAULT NULL, @@ -226,3 +225,31 @@ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='机床回传文件'; DROP TABLE IF EXISTS `mdm_dnc_back_file`; CREATE TABLE `mdm_dnc_back_file` ( `id` bigint NOT NULL, `tenant_id` varchar(6) DEFAULT NULL COMMENT '所属租户', `nc_program_id` bigint NOT NULL COMMENT '程序编码', `confirm_time` datetime DEFAULT NULL COMMENT '确认时间', `oss_name` varchar(100) NULL COMMENT 'oss中的文件名', `url` varchar(400) NOT NULL COMMENT '文件地址', `status` int DEFAULT NULL COMMENT '业务状态', `create_dept` bigint DEFAULT NULL COMMENT '创建单位', `is_deleted` int DEFAULT NULL, `create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_user` bigint DEFAULT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_user` bigint DEFAULT NULL COMMENT '更新人', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='机床回传文件'; DROP TABLE IF EXISTS `mdm_file_locks`; CREATE TABLE `mdm_file_locks` ( `lock_id` int NOT NULL COMMENT '锁定id,固定1', `locked_by` varchar(100) DEFAULT NULL COMMENT '锁定id', `lock_time` datetime DEFAULT NULL COMMENT '锁定时间', PRIMARY KEY (`lock_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='文件监控锁定表';