blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
@@ -62,9 +62,11 @@ List<MachineBackFileHandleExcelVO> list = new ArrayList<>(); pages.getRecords().forEach(vo ->{ MachineBackFileHandleExcelVO excelVO = new MachineBackFileHandleExcelVO(); BeanUtil.copy(vo, excelVO); MachineBackFileHandleExcelVO excelVO = new MachineBackFileHandleExcelVO(); BeanUtil.copyProperties(vo, excelVO); excelVO.setCuredStatus(vo.getIsCured()==0?"åºå":"æªåºå"); list.add(excelVO); }); ExcelUtil.export(response, "æºåºåä¼ ç¨åº" + DateUtil.time(), "æºåºåä¼ ç¨åºè¡¨", list, MachineBackFileHandleExcelVO.class); blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.java
@@ -14,6 +14,12 @@ IPage<MachineBackFileVO> pageQuery(IPage<MachineBackFile> page, @Param("query")MachineBackFileQueryVO queryVO); /** * æºåºåä¼ æä»¶å页æ¥è¯¢ * @param page * @param query * @return */ IPage<MachineBackFileVO> handlePageQuery(IPage<MachineBackFile> page, MachineBackFileHandleQueryVO query); //pageMachine } blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/mapper/MachineBackFileMapper.xml
@@ -5,7 +5,7 @@ <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="org.springblade.mdm.machineback.entity.MachineBackFile"> <id column="id" property="id"/> <result column="filename" property="filename"/> <result column="name" property="name"/> <result column="status" property="status"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> @@ -31,7 +31,7 @@ <!--æºåºåä¼ ç¨åºå¤çå页--> <select id="handlePageQuery" resultType="org.springblade.mdm.machineback.vo.MachineBackFileVO"> select f.id,p.name program_name,p.is_cured,f.create_time,m.code machine_code, m.name machine_name,f.create_time arrived_time select f.id,p.name name,p.code,p.is_cured,f.create_time,m.code machine_code, m.name machine_name,f.create_time arrived_time from mdm_machine_back_file f join mdm_machine m on f.machine_code=m.code left join mdm_nc_program p on f.program_id=p.id <where> blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileHandleExcelVO.java
@@ -19,7 +19,9 @@ public class MachineBackFileHandleExcelVO { @ExcelProperty("ç¨åºç¼å·") private String programName; private String code; @ExcelProperty("æä»¶åç§°") private String name; @ColumnWidth(20) @ExcelProperty("åä¼ æºåº") @@ -27,7 +29,7 @@ @ExcelProperty("åºåç¶æ") private String curedStatus; @DateTimeFormat("yyyy-MM-dd HHmmss") @DateTimeFormat("yyyy-MM-dd HH:mm:ss") @ExcelProperty("æä»¶å°è¾¾æ¶é´") private Date arrivedTime; blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/vo/MachineBackFileVO.java
@@ -15,10 +15,10 @@ private String name; @Schema(description = "æºåºç¼å·/åä¼ æºåº") private String machineCode; @Schema(description = "ç¨åºåç§°/ç¼å·") private String programName; @Schema(description = "ç¨åºç¼å·") private String code; @Schema(description = "åºåç¶æ") private Integer isCured; private Integer isCured=0; @Schema(description = "æä»¶å°è¾¾æ¶é´") private Date arrivedTime; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmProgramImportController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package org.springblade.mdm.program.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.mdm.program.service.MdmProgramImportService; import org.springblade.mdm.program.service.NcProgramExchangeService; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.mdm.program.vo.MdmProgramImportVO; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.util.List; /** * mdmå¯¼å ¥æ¥å£ï¼å·¥æ§ç½åè½ * * @author yangys */ @NonDS @RestController @RequestMapping("/program/mdmimport/") @AllArgsConstructor @Tag(name = "DNCå¯¼å ¥", description = "DNCå¯¼å ¥æ¥å£") @Slf4j public class MdmProgramImportController { //private final DncSendBackService dncSendBackService; private final MdmProgramImportService mdmProgramImportService; /** * ä¸ä¼ DNCåä¼ æä»¶ * * @param file dncç¨åºæå æä»¶ */ @PostMapping("upload") @ApiOperationSupport(order = 1) @Operation(summary = "MDMç¨åºå¯¼å ¥", description = "å·¥æ§ç½mdmç¨åºå¯¼å ¥") public R<List<MdmProgramImportVO>> upload(@RequestParam MultipartFile file) { try { return R.data(mdmProgramImportService.mdmImportUpload(file)); }catch (Exception e){ log.error("å¯¼å ¥é误",e); return R.fail(e.getMessage()); } } @PostMapping("accept") @ApiOperationSupport(order = 2) @Operation(summary = "MDMç¨åºå ¥åºå ¥åº", description = "æ¶å¯ç½ç¨åºç¡®è®¤å ¥åº") public R<Void> accept(@RequestParam String ids) { try { mdmProgramImportService.mdmFileAccept(ids); }catch (Exception e){ log.error("å ¥åºé误",e); return R.fail(e.getMessage()); } return R.success(); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
@@ -51,7 +51,7 @@ public R<Boolean> upload(NcProgramUploadVO uploadVO) { //@Parameter(description="æä»¶") @RequestPart("file") MultipartFile file, @Parameter(description="æå±èç¹ID")@RequestParam Long nodeId, // @Parameter(description="æä»¶åç±»ï¼ä½¿ç¨åå ¸(node_file_type)") @RequestParam String category ncProgramService.uploadProgramFile(uploadVO); ncProgramService.uploadProgramFileNew(uploadVO); return R.<Boolean>status(true); } @@ -69,9 +69,19 @@ @GetMapping("/content") @Operation(summary = "è·åæä»¶å 容", description = "ä» éææ¬æ ¼å¼çå 容ï¼äºè¿å¶æä»¶å°è¿å空串") public R<String> fileContent(Long id) { public R<String> fileContent(@Parameter(description = "ç¨åºæä»¶id") Long id) { try { return R.data(ncProgramService.getFileContent(id)); }catch(Exception e) { log.error("å é¤æä»¶å¤±è´¥",e); return R.fail(e.getMessage()); } } @GetMapping("/content-by-nodeid") @Operation(summary = "æ ¹æ®èç¹è·åæä»¶å 容", description = "ä» éææ¬æ ¼å¼çå 容ï¼äºè¿å¶æä»¶å°è¿å空串") public R<String> fileContentByNodeId(@Parameter(description = "èç¹id") Long nodeId) { try { return R.data(ncProgramService.getFileContentByNodeId(nodeId)); }catch(Exception e) { log.error("å é¤æä»¶å¤±è´¥",e); return R.fail(e.getMessage()); @@ -111,4 +121,10 @@ return R.data(approveRecordService.listByNcProgramId(ncProgramId)); } @PostMapping("/send") @Operation(summary = "ç¨åºä¸å", description = "å·¥æ§ç½æ°æ§ç¨åºä¸åï¼åéå°æºåºé ç½®çä¸åç®å½ï¼") public R<List<NcProgramVO>> send(@Parameter(description="æå±èç¹ID")@RequestParam Long id) { return null;//R.data(ncProcessProgRefService.listByProcess(processInstanceId)); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
@@ -25,7 +25,10 @@ * æå±èç¹idï¼å¿ é¡»æªâç¨åºå å"çèç¹ */ private long ncNodeId; /** * ååç»å®èç¹id */ private Long bindNcNodeId; /** * æä»¶å°å */ blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,183 @@ package org.springblade.mdm.program.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.tool.utils.FileUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.IoUtil; import org.springblade.mdm.flow.service.CureFlowService; import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.mdm.program.vo.MdmProgramImportVO; import org.springblade.mdm.utils.CustomBinaryReader; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.*; /** * MDMç¨åºå¯¼å ¥ï¼å·¥æ§ç½åè½ï¼ * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class MdmProgramImportService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { private final CureFlowService cureFlowService; private final NcProgramService ncProgramService; /** * MDMå¯¼å ¥æä»¶ä¸ä¼ * @param file MDMæ¶å¯ç½å¯¼åºæä»¶ * @return */ public List<MdmProgramImportVO> mdmImportUpload(MultipartFile file) { List<MdmProgramImportVO> list; try { //String fileName = file.getOriginalFilename(); //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); InputStream zipFileInputStream = file.getInputStream();//test byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); list = parseDncZipFromByteArray(bytes); } catch (IOException e) { log.error("ä¸ä¼ dncåä¼ æä»¶å¤±è´¥",e); list = Collections.emptyList(); } return list; } InputStream convertFileToZip(InputStream inputStream) throws IOException { File tempFile = createTempFile(); FileOutputStream fos = new FileOutputStream(tempFile); CustomBinaryReader.read(inputStream,fos); FileInputStream dInstream = new FileInputStream(tempFile); return dInstream; } /** * å建ä¸ä¸ªä¸´æ¶æä»¶ * @return * @throws IOException */ File createTempFile() throws IOException { Path tempDir = Paths.get(System.getProperty("java.io.tmpdir")); // å¨ä¸´æ¶ç®å½ä¸å建æä»¶ String tfilename = "t"+System.currentTimeMillis(); Path tempFile = Files.createTempFile(tempDir, tfilename, ".tmp"); System.out.println("å建çä¸´æ¶æä»¶: " + tempFile); return tempFile.toFile(); } public static List<MdmProgramImportVO> parseDncZipFromByteArray(byte[] zipData) throws IOException { List<MdmProgramImportVO> list = new ArrayList<>(); //List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); Map<String,String> fileMd5Map = new HashMap<>(); Map<String,MdmProgramImportVO> fileDataMap = new HashMap<>(); try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); ZipFile zipFile = new ZipFile(channel)) { ZipArchiveEntry entry; Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); while (entries.hasMoreElements()) { //while ((entry = zis.getNextZipEntry()) != null) { entry = entries.nextElement(); DncSendBackData prog = new DncSendBackData(); String entryName = entry.getName(); if (!entry.isDirectory()) { //ç´æ¥è§£æç¨åºçjsonæä»¶ if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){ try (InputStream inputStream = zipFile.getInputStream(entry)) { String jsonStr = IoUtil.readToString(inputStream); JSONArray jsonArray = JSONArray.parseArray(jsonStr); for(int i=0;i<jsonArray.size();i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); MdmProgramImportVO d = new MdmProgramImportVO(); d.setName(jsonObject.getString("name")); d.setId(jsonObject.getLong("id")); d.setCode(jsonObject.getString("code")); //d.setFileBackTime(LocalDateTime.now());//å°è¾¾æ¶é´ fileDataMap.put(d.getName(),d); list.add(d); } } }else{ try (InputStream inputStream = zipFile.getInputStream(entry)) { fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//è·åæä»¶MD5 } } System.out.println("æä»¶å: " + entry.getName()); System.out.println("大å°: " + entry.getSize()); // 读åæä»¶å 容å°åèæ°ç» ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); } } } //设置md5å¼ fileDataMap.forEach((k,v)->{ if(fileMd5Map.containsKey(k)){ v.setMd5(fileMd5Map.get(k)); } }); return list; } /** * å ¥åºmdmæ¶å¯ç½æä»¶ * @param ids idå表éå·åé * @return */ public void mdmFileAccept(String ids) { /* List<Long> idList = Func.toLongList(ids); List<NcProgram> progList = ncProgramService.listByIds(idList); NcProgramExchange exchange; //NcProgram program; //NcNode programNode; for(NcProgram prog:progList){ exchange = new NcProgramExchange(); exchange.setName(prog.getName()); exchange.setExchangeType(2);//åä¼ exchange.setNcProgramId(prog.getId()); this.save(exchange); } //ç´æ¥å ¥åºï¼æ æµç¨ */ } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -25,6 +25,7 @@ */ package org.springblade.mdm.program.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.fasterxml.jackson.databind.ObjectMapper; @@ -93,7 +94,6 @@ */ public void uploadProgramFile(NcProgramUploadVO uploadVO) { MultipartFile file = uploadVO.getFile(); BladeFile bfile = ossTemplate.putFile(uploadVO.getFile()); String link = bfile.getLink(); @@ -119,6 +119,49 @@ this.save(prog); } /** * ä¸ä¼ ç¨åºæä»¶å°æå®èç¹ * @param uploadVO ä¸ä¼ æä»¶è¡¨åæ°æ® */ public void uploadProgramFileNew(NcProgramUploadVO uploadVO) { MultipartFile file = uploadVO.getFile(); BladeFile bfile = ossTemplate.putFile(uploadVO.getFile()); String link = bfile.getLink(); //ä¿åprofame NcProgram prog = new NcProgram(); prog.setCode(generageCode()); prog.setName(file.getOriginalFilename()); prog.setNcNodeId(uploadVO.getNodeId()); prog.setOssName(bfile.getName()); prog.setPartNo(uploadVO.getPartNo()); prog.setProcessEdition(uploadVO.getProcessEdition()); prog.setIsLastEdition(1); prog.setMachineCode(uploadVO.getMachineCode()); boolean isTextFile = false; try { isTextFile = FileContentUtil.isTextFile(file.getInputStream()); } catch (IOException e) { log.warn("夿æ¯å¦ææ¬æä»¶å¼å¸¸",e); } prog.setIsTextFile(isTextFile); prog.setUrl(link); prog.setCategory(uploadVO.getCategory()); NcNode node = new NcNode(); node.setNodeType("70");//æä»¶èç¹ node.setName(prog.getName()); node.setMachineCode(uploadVO.getMachineCode()); node.setParentId(uploadVO.getNodeId()); node.setPartNo(uploadVO.getPartNo()); node.setProcessName(uploadVO.getProcessName()); nodeService.save(node); prog.setBindNcNodeId(node.getId()); this.save(prog); } String generageCode(){ ProgramSeq program = new ProgramSeq(); seqMapper.insert(program); @@ -128,17 +171,45 @@ } /** * å é¤ä¸ä¸ªç¨åº * @param id * @param id ç¨åºid */ public String getFileContent(Long id) { String result =""; NcProgram prog = this.getById(id); String fileName = prog.getOssName(); try (InputStream inputStream = ossTemplate.statFileStream(fileName)) { result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); if(prog.getIsTextFile()!=null && prog.getIsTextFile()){ String fileName = prog.getOssName(); try (InputStream inputStream = ossTemplate.statFileStream(fileName)) { result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } }else{ result = "éææ¬æ ¼å¼æä»¶"; } return result; } /** * è·åæä»¶å 饿å¦é£ä¸ª * @param ncNodeId èç¹id */ public String getFileContentByNodeId(Long ncNodeId) { String result =""; NcNode node = this.nodeService.getById(ncNodeId); LambdaQueryWrapper<NcProgram> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(NcProgram::getBindNcNodeId, ncNodeId); wrapper.eq(NcProgram::getIsLastEdition,1); NcProgram prog = this.getOne(wrapper); if(prog.getIsTextFile()!=null && prog.getIsTextFile()){ String fileName = prog.getOssName(); try (InputStream inputStream = ossTemplate.statFileStream(fileName)) { result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } }else{ result = "éææ¬æ ¼å¼æä»¶"; } return result; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MdmProgramImportVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package org.springblade.mdm.program.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; import java.util.List; /** * å¨å·¥æ§ç½å¯¼å ¥MDMç¨åº */ @Setter @Getter @Schema(description = "MDMå¯¼å ¥æ°æ®") public class MdmProgramImportVO { @Schema(description = "æä»¶æ°æ®åºç¼å·(æ°æ§ç¨åºçid)") private Long id; @Schema(description = "ç¨åºç¼å·") private String code; @Schema(description = "ç¨åºåç§°") private String name; private String md5; }