yangys
2025-09-17 3907579a69079b5ee462d17799e3995d9cd77fd4
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
@@ -12,8 +12,10 @@
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.IResultCode;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.UrlUtil;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.mapper.FlowProgramFileMapper;
import org.springblade.mdm.flow.vo.ProgramUploadVO;
@@ -56,6 +58,10 @@
      if(file.getSize() == 0){
         throw new ServiceException("程序文件不可为空文件");
      }
      if(exists(file.getOriginalFilename(),uploadVO.getProcessInstanceId())){
         throw new ServiceException("同名文件已存在:"+file.getOriginalFilename());
      }
      if(FlowProgramFile.TYPE_PROGRAM.equals(uploadVO.getFileType())) {
         ProgramFileNameCheckUtil.checkFilename(file.getOriginalFilename(), progProps);
      }
@@ -66,13 +72,21 @@
      progFile.setName(file.getOriginalFilename());
      progFile.setOssName(bfile.getName());
      progFile.setProcessInstanceId(uploadVO.getProcessInstanceId());
      progFile.setProgramName(NcNodeService.genProgramName(progProps.getDrawingNo(),progProps.getProcessNo()));
      progFile.setProgramName(NcNodeService.genProgramName(progProps.getDrawingNo(),progProps.getProcessNo(),progProps.getProcessEdition()));
      progFile.setFileType(uploadVO.getFileType());
      save(progFile);
   }
   /**
    * 判断那流程下是否有同名问题
    * @param filename 文件名
    * @param processInstanceId 流程实例id
    * @return 是否
    */
   boolean exists(String filename,String processInstanceId){
      return lambdaQuery().eq(FlowProgramFile::getName, filename).eq(FlowProgramFile::getProcessInstanceId, processInstanceId).count()>0;
   }
   /**
    * 获取文件内容
    * @param id 文件id
@@ -128,10 +142,20 @@
   public void download(Long id, HttpServletResponse response) throws IOException {
      FlowProgramFile flowFile = this.getById(id);
      response.setHeader("Content-Disposition", "attachment; filename="+flowFile.getName());
      response.setHeader("Content-Disposition", "attachment; filename="+ UrlUtil.encode(flowFile.getName()));
      response.setContentType("application/octet-stream");
      try(InputStream ins = ossTemplate.statFileStream(flowFile.getOssName());){
         IOUtils.copy(ins,response.getOutputStream());
      }
   }
   /**
    * 获取关于流程的所有文件
    * @param processInstanceId 流程实例id
    * @return 流程关联的文件列表
    */
   public List<FlowProgramFile> listByProcessInstanceId(String processInstanceId){
      return lambdaQuery()
      .eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list();
   }
}