yangys
2025-08-02 88748094ae17ca3b6423c54d307f0d5c40c8f420
增加文件完整性校验
已修改4个文件
66 ■■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/FlowProgramFileServiceTest.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
@@ -21,6 +21,7 @@
import org.springblade.mdm.flow.excution.StartDispatcher;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.entity.ProcessProgRef;
import org.springblade.mdm.program.service.ProcessProgRefService;
@@ -47,10 +48,12 @@
    private final RuntimeService runtimeService;
    private final ProcessProgRefService processProgRefService;
    private ApproveRecordService approveRecordService;
    private final ApproveRecordService approveRecordService;
    private final FlowCommonService flowCommonService;
    private final FlowProgramFileService flowProgramFileService;
    /**
     * 新增
     * 发起派工流程
     */
    @PostMapping("/start")
    @Operation(summary = "任务计划(派工流程)", description = "启动派工流程")
@@ -62,6 +65,14 @@
    @Operation(summary = "完成任务", description = "流向下一个节点")
    @PostMapping("completeTask")
    public R<Void> completeTask(String taskId, String processInstanceId, String comment,@Parameter(name = "variables", description = "任务变量") @RequestBody Map<String, Object> variables) {
        Task task = taskService.createTaskQuery()
            .taskId(taskId)
            .singleResult();
        if(task.getTaskDefinitionKey().equals("programmingTask")) {//编制节点
            String operateResult = variables.get("approve")+"";
            flowProgramFileService.checkProgramFiles(processInstanceId,"Y".equals(operateResult));
        }
        // 增加评论
        if (StringUtil.isNoneBlank(processInstanceId, comment)) {
            taskService.addComment(taskId, processInstanceId, comment);
@@ -76,6 +87,7 @@
            runtimeService.setVariable(taskId, FlowContants.PROGRAM_IDS_KEY, programIds);
        }
        if(StringUtils.isNotEmpty(programIds)) {
            //这已经没用了,直接使用临时文件
            processProgRefService.addRelations(processInstanceId,Func.toLongList(programIds));
        }
@@ -83,7 +95,6 @@
        variables.put("approveUserNickName",AuthUtil.getNickName());
        if(variables.containsKey("assignee")){
            addApproveRecord(taskId,processInstanceId,comment,variables);
            //指定了下一步执行人
            taskService.complete(taskId, variables);
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java
@@ -51,7 +51,7 @@
    @GetMapping("/nclist-by-instanceid")
    @Operation(summary = "流程程序文件列表", description = "流程程序文件列表")
    public R<List<FlowProgramFile>> listNcFileByProcess(@Parameter(description="流程实例id")@RequestParam String processInstanceId) {
        return R.data(flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list());
        return R.data(flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).orderByAsc(FlowProgramFile::getCreateTime).list());
    }
    @PostMapping("/remove")
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
@@ -23,6 +23,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
 * 流程程序处理,包括上传,查询展示
@@ -169,5 +170,42 @@
        return result;
    }
    /**
     * 验证程序文件的完整性,仅在编制节点使用
     * @param processInstanceId 流程实例id
     */
    public void checkProgramFiles(String processInstanceId,boolean isPass) {
        List<FlowProgramFile> flowPrograms = this.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).orderByAsc(FlowProgramFile::getCreateTime).list();
        if(isPass && flowPrograms.isEmpty()){
            throw new ServiceException("请上传程序文件");
        }
        int totalSeg = 0;
        if(!flowPrograms.isEmpty()){
            FlowProgramFile progFile = flowPrograms.get(0);
            totalSeg = getProgramSegCount(progFile.getName());
        }
        if(totalSeg != flowPrograms.size()){
            throw new ServiceException("应上传"+totalSeg+"段程序,实际上传"+flowPrograms.size()+"段");
        }
    }
    /**
     * 根据文件名获取程序总段树
     * @param filename 文件名
     * @return
     */
    int getProgramSegCount(String filename){
        int idx = filename.lastIndexOf(".");
        String tempstr = filename.substring(0,idx);//去掉扩展名
        //System.out.println(tempstr);
        idx = tempstr.lastIndexOf("-");
        tempstr = tempstr.substring(0,idx);
        //System.out.println(tempstr);
        idx = tempstr.lastIndexOf("-");
        tempstr = tempstr.substring(idx+1);
        //System.out.println(tempstr);
        return Func.toInt(tempstr);
    }
}
blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/FlowProgramFileServiceTest.java
@@ -49,4 +49,13 @@
            Assertions.assertEquals(4,e.getResultCode().getCode());
        }
    }
    @Test
    public void getProgramSegCount(){
        FlowProgramFileService service = new FlowProgramFileService();
        String filename = "YZL4-1100-01-50-A-5-1.TXT";
        Assertions.assertEquals(5,  service.getProgramSegCount(filename));
    }
}