From ef4a26bca3552aed5865e5ef3ef2804b8509d31b Mon Sep 17 00:00:00 2001 From: yangys <y_ys79@sina.com> Date: 星期二, 08 七月 2025 13:57:06 +0800 Subject: [PATCH] 增加param调用接口 --- blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java | 339 +++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 247 insertions(+), 92 deletions(-) diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java index d4c2b6a..e2e2241 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java @@ -1,16 +1,32 @@ package org.springblade.mdm.program.service; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; 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.ZipArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; +import org.apache.commons.io.IOUtils; +import org.springblade.core.mp.base.BizEntity; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.oss.OssTemplate; +import org.springblade.core.oss.model.BladeFile; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.secure.utils.AuthUtil; 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.entity.ApproveRecord; +import org.springblade.mdm.flow.service.CureFlowService; +import org.springblade.mdm.program.entity.NcNode; +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; @@ -23,10 +39,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.*; /** * 绋嬪簭浜ゆ崲锛坉nc瀵煎叆/瀵煎嚭锛� @@ -37,30 +52,35 @@ @Service @AllArgsConstructor public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { + private final CureFlowService cureFlowService; + private final NcProgramService ncProgramService; + private final NcNodeService ncNodeService; + private final OssTemplate ossTemplate; + private final BladeRedis bladeRedis; + private String getFileKey(){ + return "dncexpfile-"+ AuthUtil.getUserId(); + } /** - * dnc鍥炰紶鏂囦欢涓婁紶 - * @param file 鏂囦欢 + * dnc鍥炰紶鏂囦欢涓婁紶锛堣В鏋愬悗淇濆瓨鍏pload琛級 + * @param file DNC鍥炰紶鏂囦欢 * @return */ public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { - List<DncSendBackData> list ; + List<DncSendBackData> list; try { - String fileName = file.getOriginalFilename(); - //InputStream fileInputStream = file.getInputStream(); - InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); + BladeFile bfile = ossTemplate.putFile(file);//涓婁紶锛屼緵鍚庣画鍏ュ簱浣跨敤 + //璁剧疆涓�涓紦瀛橈紝2灏忔椂杩囨湡 + bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2)); + + //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); + InputStream zipFileInputStream = file.getInputStream();//test + byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); list = parseDncZipFromByteArray(bytes); - for(DncSendBackData dncSendBackData:list){ - NcProgramExchange exchange=new NcProgramExchange(); - exchange.setName(dncSendBackData.getProgramName()); - exchange.setStatus(1);//宸插鍏� - this.save(exchange); - - } } catch (IOException e) { - log.error("涓婁紶dnc鏂囦欢澶辫触",e); + log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e); list = Collections.emptyList(); } return list; @@ -92,90 +112,225 @@ return tempFile.toFile(); } public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException { - //List<DncSendBackData> datas = new ArrayList<>(); - List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); - - - - /* - try (ByteArrayInputStream bis = new ByteArrayInputStream(zipData); - ZipArchiveInputStream zis = new ZipArchiveInputStream(bis)) { - - - ZipArchiveEntry entry; - while ((entry = zis.getNextZipEntry()) != null) { - DncSendBackData prog = new DncSendBackData(); - prog.setProgramName(entry.getName()); - if (!entry.isDirectory()) { - System.out.println("鏂囦欢鍚�: " + entry.getName()); - System.out.println("澶у皬: " + entry.getSize()); - - // 璇诲彇鏂囦欢鍐呭鍒板瓧鑺傛暟缁� - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - IOUtils.copy(zis, outputStream); - byte[] fileContent = outputStream.toByteArray(); - - // 澶勭悊鏂囦欢鍐呭... - System.out.println("鍐呭闀垮害: " + fileContent.length); - }else{ - //鏂囦欢澶癸紝璇诲唴閮ㄦ枃浠讹紝鑾峰彇鏂囦欢鍒楄〃 - - System.out.println("鏂囦欢澶圭▼搴忥細"+entry.getName()); - List<String> children = new ArrayList<>(); - prog.setChildren(children); - } - - datas.add(prog); - } - - - }*/ - return datas; - } - /** - * 绋嬪簭涓嬪彂缁熻鍒嗛〉鏌ヨ - * @param query 鏌ヨ鍙傛暟 - * @return - */ - - public IPage<DncSendBackData> dncSendBackPageQuery(Query query) { - - IPage<DncSendBackData> page = this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query); - - return page; - - } -} - - -class ZipFileDirectoryScanner { - - public static List<DncSendBackData> getFilesInDirectoryRecursive(byte[] zipData, String dirPath) throws IOException { List<DncSendBackData> list = new ArrayList<>(); + //List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); - if (!dirPath.endsWith("/")) { - dirPath += "/"; - } - + Map<String,String> fileMd5Map = new HashMap<>(); + Map<String,DncSendBackData> fileDataMap = new HashMap<>(); try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); ZipFile zipFile = new ZipFile(channel)) { + ZipArchiveEntry entry; Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); while (entries.hasMoreElements()) { - ZipArchiveEntry entry = entries.nextElement(); + //while ((entry = zis.getNextZipEntry()) != null) { + entry = entries.nextElement(); + DncSendBackData prog = new DncSendBackData(); String entryName = entry.getName(); - DncSendBackData d = new DncSendBackData(); - d.setProgramName(entryName); - if(entry.isDirectory()){ - d.setHasChildren(true); - } - list.add(d); - //if (entryName.startsWith(dirPath) && !entry.isDirectory()) { - // fileList.add(entryName); - //} + if (!entry.isDirectory()) { + //鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢 + 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); + DncSendBackData d = new DncSendBackData(); + d.setProgramName(jsonObject.getString("name")); + d.setId(jsonObject.getLong("id")); + d.setProgramNo(jsonObject.getString("code")); + d.setFileBackTime(LocalDateTime.now());//鍒拌揪鏃堕棿 + + fileDataMap.put(d.getProgramName(),d); + list.add(d); + } + + } + }else{ + try (InputStream inputStream = zipFile.getInputStream(entry)) { + fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5 + } + + } + + } + + } + + } + //璁剧疆md5鍊� + fileDataMap.forEach((k,v)->{ + if(fileMd5Map.containsKey(k)){ + v.setMd5(fileMd5Map.get(k)); + } + }); + return list; + } + + + /** + * 鍏ュ簱鍥炰紶鏂囦欢,骞跺惎鍔ㄥ浐鍖栨祦绋� + * @param ids id鍒楄〃閫楀彿鍒嗛殧 + * @return + */ + public void dncFileAccept(String ids) throws IOException { + List<Long> idList = Func.toLongList(ids); + // + NcProgramExchange exchange; + String pkgFileName = bladeRedis.get(getFileKey()); + updateProgramData(pkgFileName,idList); + List<NcProgram> progList = ncProgramService.listByIds(idList); + for(NcProgram prog:progList){ + exchange = new NcProgramExchange(); + exchange.setName(prog.getName()); + exchange.setExchangeType(2);//鍥炰紶 + exchange.setNcProgramId(prog.getId()); + + this.save(exchange); + + } + + cureFlowService.startCure(progList); + } + + void updateProgramData(String pkgFileName,List<Long> idList) throws IOException { + InputStream inputStream = this.ossTemplate.statFileStream(pkgFileName); + byte[] bytes = FileUtil.copyToByteArray(inputStream); + + List<NcNode> nodeList = new ArrayList<>(); + List<NcProgram> progList = new ArrayList<>(); + + try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes); + ZipFile zipFile = new ZipFile(channel)) { + + ZipArchiveEntry entry; + Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); + while (entries.hasMoreElements()) { + entry = entries.nextElement(); + + String entryName = entry.getName(); + + if (entry.isDirectory()) { + continue; + } + if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){ + + try (InputStream insJson = zipFile.getInputStream(entry)) { + String jsonStr = IoUtil.readToString(insJson); + + JSONArray jsonArray = JSONArray.parseArray(jsonStr); + for(int i=0;i<jsonArray.size();i++){ + JSONObject jsonObject = jsonArray.getJSONObject(i); + NcProgram program = new NcProgram(); + program.setId(jsonObject.getLong("id")); + if(!idList.contains(program.getId())){//涓嶆槸閫夊畾鍏ュ簱鐨� + continue; + } + program.setName(jsonObject.getString("name")); + + program.setCode(jsonObject.getString("code")); + program.setDescription(jsonObject.getString("description")); + program.setCategory(jsonObject.getString("category")); + program.setBindNcNodeId(jsonObject.getLong("bindNcNodeId")); + program.setIsLastEdition(jsonObject.getInteger("isLastEdition")); + program.setIsLocked(jsonObject.getInteger("isLocked")); + program.setIsTest(jsonObject.getInteger("isTest")); + program.setMachineCode(jsonObject.getString("machineCode")); + program.setNcNodeId(jsonObject.getLong("ncNodeId")); + program.setPartNo(jsonObject.getString("partNo")); + program.setProcessEdition(jsonObject.getString("processEdition")); + + setBaseProperties(program,jsonObject); + + progList.add(program); + } + + } + }else if(entryName.equals(NcProgramExportDNCService.NODE_JSON_FILE)){ + try (InputStream insJson = zipFile.getInputStream(entry)) { + String jsonStr = IoUtil.readToString(insJson); + JSONArray jsonArray = JSONArray.parseArray(jsonStr); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + NcNode node = new NcNode(); + node.setId(jsonObject.getLong("id")); + node.setName(jsonObject.getString("name")); + node.setDescription(jsonObject.getString("description")); + node.setNodeType(jsonObject.getString("nodeType")); + node.setProcessName(jsonObject.getString("processName")); + node.setPartNo(jsonObject.getString("partNo")); + node.setMachineCode(jsonObject.getString("machineCode")); + node.setParentId(jsonObject.getLong("parentId")); + node.setParentIds(jsonObject.getString("parentIds")); + node.setIsCured(jsonObject.getInteger("isCured")); + + setBaseProperties(node,jsonObject); + + nodeList.add(node); + } + } + } + + } + + } + + //涓婁紶鍘嬬缉鍖呭唴鐨勭▼搴忓苟鏇存柊绋嬪簭鏂囦欢鍦板潃 + try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes); + ZipFile zipFile = new ZipFile(channel)) { + + ZipArchiveEntry entry; + Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); + while (entries.hasMoreElements()) { + entry = entries.nextElement(); + + String entryName = entry.getName(); + + if (!entry.isDirectory() && !NcProgramExportDNCService.isDataFile(entryName)) { + + for(NcProgram prog:progList){ + if(prog.getName().equals(entryName)){ + try (InputStream ncFileStream = zipFile.getInputStream(entry)) { + BladeFile bfile = this.ossTemplate.putFile(prog.getName(),ncFileStream); + prog.setOssName(bfile.getName()); + prog.setUrl(bfile.getLink()); + } + break; + } + } + + } } } - return list; + + for(NcNode node:nodeList){ + NcNode nodeTemp = this.ncNodeService.getById(node.getId()); + if(nodeTemp == null){ + ncNodeService.save(node); + }else{ + ncNodeService.updateById(node); + } + } + + for(NcProgram prog:progList){ + NcProgram ncTemp = ncProgramService.getById(prog.getId()); + if(ncTemp == null){ + ncProgramService.save(prog); + }else{ + ncProgramService.updateById(prog); + } + } + + } + + void setBaseProperties(BizEntity entity, JSONObject jsonObject){ + entity.setCreateTime(jsonObject.getDate("createTime")); + entity.setUpdateTime(jsonObject.getDate("updateTime")); + entity.setStatus(jsonObject.getInteger("status")); + entity.setCreateUser(jsonObject.getLong("createUser")); + entity.setUpdateUser(jsonObject.getLong("updateUser")); } } -- Gitblit v1.9.3