| | |
| | | |
| | | 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.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; |
| | | import org.springblade.mdm.utils.CustomBinaryReader; |
| | | import org.springblade.mdm.utils.FileExchangeUtil; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | import java.time.Duration; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | |
| | |
| | | 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回传文件上传(解析后保存入upload表) |
| | | * @param file DNC回传文件 |
| | |
| | | public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { |
| | | List<DncSendBackData> list; |
| | | try { |
| | | //String fileName = file.getOriginalFilename(); |
| | | 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); |
| | | |
| | | |
| | | } catch (IOException e) { |
| | | log.error("上传dnc回传文件失败",e); |
| | |
| | | } |
| | | |
| | | } |
| | | System.out.println("文件名: " + entry.getName()); |
| | | System.out.println("大小: " + entry.getSize()); |
| | | |
| | | // 读取文件内容到字节数组 |
| | | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| | | |
| | | } |
| | | |
| | |
| | | * @param ids id列表逗号分隔 |
| | | * @return |
| | | */ |
| | | public void dncFileAccept(String ids) { |
| | | public void dncFileAccept(String ids) throws IOException { |
| | | List<Long> idList = Func.toLongList(ids); |
| | | List<NcProgram> progList = ncProgramService.listByIds(idList); |
| | | // |
| | | NcProgramExchange exchange; |
| | | //NcProgram program; |
| | | //NcNode programNode; |
| | | |
| | | 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()); |
| | |
| | | } |
| | | |
| | | 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.setDrawingNo(jsonObject.getString("drawingNo")); |
| | | 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.setDrawingNo(jsonObject.getString("drawingNo")); |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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")); |
| | | } |
| | | } |