package org.springblade.mdm.test; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.springblade.core.oss.OssTemplate; import org.springblade.core.oss.model.BladeFile; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.FileUtil; import org.springblade.mdm.program.service.ProgramAnnotationService; import org.springblade.mdm.utils.FileContentUtil; import org.springblade.system.pojo.entity.Dict; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.*; import java.net.URI; import java.nio.file.*; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; /** * 流程管理接口 * * @author Chill */ @NonDS @RestController @RequestMapping("/test/") @AllArgsConstructor @Tag(name = "MDM系统接口", description = "引入blade-system的接口") @Slf4j public class OssTestController { private final OssTemplate ossTemplate; private final ProgramAnnotationService programAnnotationService; @GetMapping("/readzip") @ApiOperationSupport(order = 2) @Operation(summary = "读zip") public R readzip(@Parameter(description = "机构父节点id") Long deptId) throws IOException { R r = R.data(""); InputStream inputStream = new FileInputStream("d:/spd.zip"); byte[] zipData = FileUtil.copyToByteArray(inputStream); Path tempFile = Files.createTempFile("tempzip", ".zip"); // 写入字节数据到临时文件 Files.write(tempFile, zipData, StandardOpenOption.WRITE); Map env = new HashMap<>(); env.put("create", "true"); URI uri = URI.create("jar:file:/inmemory.zip"); List entryNameList = new ArrayList<>(); String entryn = "CP1-13-1/CP1-13-1-1-1-1.txt"; try (ZipFile zipFile = new ZipFile(tempFile.toFile())) { Enumeration entris = zipFile.entries(); ZipEntry entry; while(entris.hasMoreElements()) { entry = entris.nextElement(); entryNameList.add(entry.getName()); } //便利完成直接取树 entry = zipFile.getEntry(entryn); InputStream ins = zipFile.getInputStream(entry); Path outputPath = Paths.get("d:/downtest.txt"); Files.copy(ins, outputPath, StandardCopyOption.REPLACE_EXISTING); } System.out.println(entryNameList); return r; } @GetMapping("/replace") @ApiOperationSupport(order = 2) @Operation(summary = "替换内容") public R replace(String filepath) throws IOException { File file = new File(filepath); FileInputStream fis = new FileInputStream(file); InputStream newins = FileContentUtil.replaceAtLine(fis,2,"GHTEST"); BladeFile bfile = ossTemplate.putFile("replaceok.txt",newins); return R.data(bfile.getLink()+","+bfile.getName()); } @GetMapping("/replace2") @ApiOperationSupport(order = 2) @Operation(summary = "替换内容2") public R replace() throws IOException { String ossName = "upload/20250816/fb971fa2186b5572443687e9fa425123.txt";//这是里面已有的文件 String filename = "CP3-1-1-1.txt"; String machineGroup = "FANUC"; List annoDicts = programAnnotationService.getAnnotionList(); BladeFile bfile = null; try(InputStream ins = ossTemplate.statFileStream(ossName);){ byte[] bytes = IOUtils.toByteArray(ins); ByteArrayInputStream byteins = new ByteArrayInputStream(bytes); String annoTxt = programAnnotationService.generateAnnotation("GH",machineGroup,annoDicts); int statusLineIndex = 2; String line2 = FileContentUtil.readLineAt(byteins,statusLineIndex);//第三行应该是状态注释 byteins.reset(); InputStream finishedStream; if(programAnnotationService.isAnnotation(line2,machineGroup,annoDicts)){ finishedStream = FileContentUtil.replaceAtLine(byteins,statusLineIndex,annoTxt); }else{ finishedStream = FileContentUtil.insertLine(byteins,statusLineIndex,annoTxt); } try(finishedStream) { finishedStream.reset(); bfile = ossTemplate.putFile(filename, finishedStream); //替换原有的文件地址 //flowProgramFile.setOssName(bfile.getName()); } } /* InputStream ins = ossTemplate.statFileStream(ossName); InputStream newins = FileContentUtil.replaceAtLine(fis,2,"GHTEST"); BladeFile bfile = ossTemplate.putFile("replaceok.txt",newins); */ return R.data(bfile.getLink()+","+bfile.getName()); } }