package com.qianwen.smartman.modules.dnc.service.impl; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.TreeSet; import java.util.function.Function; import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Lists; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.base.BaseServiceImpl; import com.qianwen.core.mp.support.Condition; import com.qianwen.core.mp.support.Query; import com.qianwen.core.secure.BladeUser; import com.qianwen.core.secure.utils.AuthUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.smartman.common.constant.DncConstant; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.smartman.modules.cps.entity.Machine; import com.qianwen.smartman.modules.cps.entity.Workstation; import com.qianwen.smartman.modules.cps.entity.WorkstationOfMachine; import com.qianwen.smartman.modules.cps.service.IMachineService; import com.qianwen.smartman.modules.cps.service.IWorkstationOfMachineService; import com.qianwen.smartman.modules.cps.service.IWorkstationService; import com.qianwen.smartman.modules.cps.vo.WorkstationVO; import com.qianwen.smartman.modules.dnc.context.DncFileNameProcessRuleContext; import com.qianwen.smartman.modules.dnc.context.DncFileNameProcessRuleFactory; import com.qianwen.smartman.modules.dnc.convert.TransferDirectoryFileConvert; import com.qianwen.smartman.modules.dnc.dto.ArtFileInformationDTO; import com.qianwen.smartman.modules.dnc.dto.DncOperationLogDto; import com.qianwen.smartman.modules.dnc.dto.FileOnlineWriteVo; import com.qianwen.smartman.modules.dnc.dto.serial.SerialInfoDTO; import com.qianwen.smartman.modules.dnc.dto.serial.SerialSetting; import com.qianwen.smartman.modules.dnc.entity.DncArtBag; import com.qianwen.smartman.modules.dnc.entity.DncFactoryFile; import com.qianwen.smartman.modules.dnc.entity.DncFixedSpace; import com.qianwen.smartman.modules.dnc.entity.DncWsRelationTd; import com.qianwen.smartman.modules.dnc.entity.File; import com.qianwen.smartman.modules.dnc.entity.TransferDirectoryFile; import com.qianwen.smartman.modules.dnc.enums.DncEnums; import com.qianwen.smartman.modules.dnc.enums.StatusCodeEnum; import com.qianwen.smartman.modules.dnc.forestClient.DncOnlineFileClient; import com.qianwen.smartman.modules.dnc.mapper.TransferDirectoryFileMapper; import com.qianwen.smartman.modules.dnc.service.IDncArtFileService; import com.qianwen.smartman.modules.dnc.service.IDncFactoryFileService; import com.qianwen.smartman.modules.dnc.service.IDncFixedSpaceService; import com.qianwen.smartman.modules.dnc.service.IDncOperationLogService; import com.qianwen.smartman.modules.dnc.service.IFileService; import com.qianwen.smartman.modules.dnc.service.IObsFileService; import com.qianwen.smartman.modules.dnc.service.ITransferDirectoryFileService; import com.qianwen.smartman.modules.dnc.vo.DncReadFileVO; import com.qianwen.smartman.modules.dnc.vo.DncWriteFileVO; import com.qianwen.smartman.modules.dnc.vo.FileHistoryVO; import com.qianwen.smartman.modules.dnc.vo.FileSourcePathVO; import com.qianwen.smartman.modules.dnc.vo.FileVersionSwitchVO; import com.qianwen.smartman.modules.dnc.vo.MachineToolBatchWriteFileVO; import com.qianwen.smartman.modules.dnc.vo.ReceiveScheduleVO; import com.qianwen.smartman.modules.dnc.vo.SaveBatchWorkstationFileVO; import com.qianwen.smartman.modules.dnc.vo.SendScheduleVO; import com.qianwen.smartman.modules.dnc.vo.SerialSendVO; import com.qianwen.smartman.modules.dnc.vo.TransferDirectoryFilePageVO; import com.qianwen.smartman.modules.dnc.vo.TransferDirectoryFileVo; import com.qianwen.smartman.modules.dnc.vo.UploadFileOssVO; import com.qianwen.smartman.modules.dnc.vo.WorkstationDetailVO; import com.qianwen.smartman.modules.dnc.vo.WorkstationDirectoryFileVO; import com.qianwen.smartman.modules.dnc.vo.WorkstationFileSearchVO; import com.qianwen.smartman.modules.dnc.vo.WorkstationFileVO; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import com.qianwen.smartman.modules.system.entity.User; import com.qianwen.smartman.modules.system.service.IUserService; @Service /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/dnc/service/impl/TransferDirectoryFileServiceImpl.class */ public class TransferDirectoryFileServiceImpl extends BaseServiceImpl implements ITransferDirectoryFileService { private static final Logger log = LoggerFactory.getLogger(TransferDirectoryFileServiceImpl.class); private final IWorkstationService workstationService; private final IDncOperationLogService operationLogService; private final IFileService fileService; private final IUserService userService; private final IDncFactoryFileService dncFactoryFileService; private final TransferDirectoryFileMapper transferDirectoryFileMapper; private final IWorkstationOfMachineService workstationOfMachineService; private final IMachineService machineService; private final DncOnlineFileClient dncOnlineFileClient; private final IDncArtFileService artFileService; private final IObsFileService obsFileService; private final IDncFixedSpaceService fixedSpaceService; private final OssBuilder ossBuilder; public TransferDirectoryFileServiceImpl(final IWorkstationService workstationService, final IDncOperationLogService operationLogService, final IFileService fileService, final IUserService userService, final IDncFactoryFileService dncFactoryFileService, final TransferDirectoryFileMapper transferDirectoryFileMapper, final IWorkstationOfMachineService workstationOfMachineService, final IMachineService machineService, final DncOnlineFileClient dncOnlineFileClient, final IDncArtFileService artFileService, final IObsFileService obsFileService, final IDncFixedSpaceService fixedSpaceService, final OssBuilder ossBuilder) { this.workstationService = workstationService; this.operationLogService = operationLogService; this.fileService = fileService; this.userService = userService; this.dncFactoryFileService = dncFactoryFileService; this.transferDirectoryFileMapper = transferDirectoryFileMapper; this.workstationOfMachineService = workstationOfMachineService; this.machineService = machineService; this.dncOnlineFileClient = dncOnlineFileClient; this.artFileService = artFileService; this.obsFileService = obsFileService; this.fixedSpaceService = fixedSpaceService; this.ossBuilder = ossBuilder; } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService @Transactional(rollbackFor = {Exception.class}) public SaveBatchWorkstationFileVO saveDirectoryFile(Long workstationId, List workstationDirectoryFileVOList) { SaveBatchWorkstationFileVO saveBatchWorkstationFileVO = new SaveBatchWorkstationFileVO(); List repeatFileIds = verificationUploadFileList(workstationId, workstationDirectoryFileVOList); List repeatIds = verificationFileList(workstationId, workstationDirectoryFileVOList); List workstationDirectoryFiles = new ArrayList<>(); List addLists = new ArrayList<>(); Map dncFixedSpaceMap = null; List list = this.fixedSpaceService.list(); if (Func.isNotEmpty(list)) { dncFixedSpaceMap = list.stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, Function.identity())); } Map workstationRelationDirectoryMap = this.fixedSpaceService.getWorkstationRelationDirectory(); Map finalDncFixedSpaceMap = dncFixedSpaceMap; workstationDirectoryFileVOList.forEach(workstationDirectoryFileVo -> { String hash; TransferDirectoryFile transferDirectoryFile = TransferDirectoryFileConvert.INSTANCE.convert(workstationDirectoryFileVo); DncWsRelationTd dncWsRelationTd = (DncWsRelationTd) workstationRelationDirectoryMap.get(workstationId); if (dncWsRelationTd != null) { transferDirectoryFile.setTransferDirectoryId(dncWsRelationTd.getTransferDirectorId()); } Long storageSpaceId = null; Long emptyStorageSpaceId = null; if (Func.isNotEmpty(transferDirectoryFile.getStorageSpaceId())) { storageSpaceId = transferDirectoryFile.getStorageSpaceId(); } else { emptyStorageSpaceId = ((DncFixedSpace) Objects.requireNonNull(getStorageRootSpaceId(workstationId))).getId(); } DncFixedSpace dncFixedSpace = (DncFixedSpace) finalDncFixedSpaceMap.get(Func.isNotEmpty(workstationDirectoryFileVo.getStorageSpaceId()) ? storageSpaceId : emptyStorageSpaceId); if (dncFixedSpace != null) { if (this.fixedSpaceService.isRootSpace(Func.isNotEmpty(workstationDirectoryFileVo.getStorageSpaceId()) ? storageSpaceId : emptyStorageSpaceId).booleanValue()) { transferDirectoryFile.setStorageSpace(DncEnums.StorageSpace.ROUTINE.getCode()); } else { transferDirectoryFile.setStorageSpace(DncEnums.StorageSpace.FIXED.getCode()); } } Map transferDirectoryFileMap = null; if (Func.isNotEmpty(repeatFileIds) && repeatFileIds.size() > 0) { update(Wrappers.lambdaUpdate().in(TransferDirectoryFile::getId, repeatFileIds) .set(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.NO.getCode()) .set(TransferDirectoryFile::getCovertTime, new Date())); List exitList = list(Wrappers.lambdaQuery().in(TransferDirectoryFile::getId, repeatFileIds)); /* update((Wrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().in((v0) -> { return v0.getId(); }, repeatFileIds)).set((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.NO.getCode())).set((v0) -> { return v0.getCovertTime(); }, new Date())); List exitList = list((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getId(); }, repeatFileIds));*/ if (Func.isNotEmpty(exitList)) { transferDirectoryFileMap = exitList.stream().collect(Collectors.toMap(s -> { return s.getFilename() + "/" + s.getFileType() + "/" + s.getStorageSpaceId(); }, Function.identity())); } String key = workstationDirectoryFileVo.getFilename() + "/" + workstationDirectoryFileVo.getFileType() + "/" + (Func.isNotEmpty(workstationDirectoryFileVo.getStorageSpaceId()) ? storageSpaceId : emptyStorageSpaceId); TransferDirectoryFile file = transferDirectoryFileMap.get(key); if (file != null) { String objectKey = workstationDirectoryFileVo.getObjectKey(); String contentMd5 = file.getContentMd5(); if (Func.isNotBlank(objectKey)) { hash = this.ossBuilder.template().statFile(objectKey).getHash(); } else { hash = workstationDirectoryFileVo.getContentMd5(); } if (!hash.equals(contentMd5)) { transferDirectoryFile.setVersion(Integer.valueOf(file.getVersion().intValue() + 1)); transferDirectoryFile.setWorkstationId(workstationId); transferDirectoryFile.setCraftFileId(workstationDirectoryFileVo.getFileId()); transferDirectoryFile.setIsCurrent(DncEnums.CurrentVersion.YES.getCode()); transferDirectoryFile.setFileSource(workstationDirectoryFileVo.getFileSource()); transferDirectoryFile.setStorageSpaceId(Func.isNotEmpty(workstationDirectoryFileVo.getStorageSpaceId()) ? storageSpaceId : emptyStorageSpaceId); transferDirectoryFile.setTenantId("000000"); transferDirectoryFile.setWhetherArchive(DncEnums.WhetherArchive.Archive.getCode()); addLists.add(transferDirectoryFile); workstationDirectoryFiles.add(workstationDirectoryFileVo); } } } if (Func.isEmpty(repeatFileIds) && Func.isEmpty(repeatIds)) { transferDirectoryFile.setVersion(CommonConstant.VERSION_NUM); transferDirectoryFile.setWorkstationId(workstationId); transferDirectoryFile.setCraftFileId(workstationDirectoryFileVo.getFileId()); transferDirectoryFile.setIsCurrent(DncEnums.CurrentVersion.YES.getCode()); transferDirectoryFile.setFileSource(workstationDirectoryFileVo.getFileSource()); transferDirectoryFile.setStorageSpaceId(Func.isNotEmpty(workstationDirectoryFileVo.getStorageSpaceId()) ? storageSpaceId : emptyStorageSpaceId); transferDirectoryFile.setTenantId("000000"); transferDirectoryFile.setWhetherArchive(DncEnums.WhetherArchive.Archive.getCode()); addLists.add(transferDirectoryFile); workstationDirectoryFiles.add(workstationDirectoryFileVo); } }); if (Func.isNotEmpty(addLists)) { saveBatch(addLists); saveBatchWorkstationFileVO.setAddLists(addLists); saveBatchWorkstationFileVO.setWorkstationDirectoryFiles(workstationDirectoryFiles); } addLists.forEach(file -> { saveOperationLog(file, DncEnums.LogOperationType.UPLOAD.getCode()); }); return saveBatchWorkstationFileVO; } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService @Transactional(rollbackFor = {Exception.class}) public List saveBatchFile(WorkstationFileVO workstationFileVo) { List list = new ArrayList<>(); List workstationIds = workstationFileVo.getWorkstationIds(); List workstationDirectoryFileVOList = workstationFileVo.getWorkstationDirectoryFileVOList(); workstationIds.forEach(id -> { SaveBatchWorkstationFileVO saveDirectoryFile = saveDirectoryFile(id, workstationDirectoryFileVOList); if (Func.isNotEmpty(saveDirectoryFile.getWorkstationDirectoryFiles())) { list.addAll(saveDirectoryFile.getWorkstationDirectoryFiles()); } }); return list; } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List verificationUploadFileList(Long workstationId, List workstationDirectoryFileVOList) { List repeatFileIds = new LinkedList<>(); Long storageSpaceId = ((DncFixedSpace) Objects.requireNonNull(getStorageRootSpaceId(workstationId))).getId(); workstationDirectoryFileVOList.forEach(sa -> { List list = null; if (Func.isNotEmpty(sa.getStorageSpaceId())) { list = list(Wrappers.lambdaQuery().eq(TransferDirectoryFile::getStorageSpaceId, sa.getStorageSpaceId())); /* list = list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStorageSpaceId(); }, sa.getStorageSpaceId()));*/ } if (Func.isEmpty(sa.getStorageSpaceId())) { list = list(Wrappers.lambdaQuery().eq(TransferDirectoryFile::getStorageSpaceId, storageSpaceId)); /* list = list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStorageSpaceId(); }, storageSpaceId));*/ } if (Func.isNotEmpty(list)) { Map fileMap = list.stream().filter(s -> { return s.getIsCurrent().equals(DncEnums.CurrentVersion.YES.getCode()); }).collect(Collectors.toMap(s2 -> { return s2.getFilename() + "/" + s2.getFileType() + "/" + s2.getStorageSpaceId(); }, Function.identity())); TransferDirectoryFile transferDirectoryFile = null; if (Func.isNotEmpty(sa.getStorageSpaceId())) { transferDirectoryFile = fileMap.get(sa.getFilename() + "/" + sa.getFileType() + "/" + sa.getStorageSpaceId()); } if (Func.isEmpty(sa.getStorageSpaceId())) { transferDirectoryFile = fileMap.get(sa.getFilename() + "/" + sa.getFileType() + "/" + storageSpaceId); } if (transferDirectoryFile != null) { if (Func.isNotBlank(sa.getObjectKey())) { boolean result = this.obsFileService.verifyFileContent(sa.getObjectKey(), transferDirectoryFile.getContentMd5()); if (result) { repeatFileIds.add(transferDirectoryFile.getId()); } } else if (!transferDirectoryFile.getContentMd5().equals(sa.getContentMd5())) { repeatFileIds.add(transferDirectoryFile.getId()); } } } }); return repeatFileIds; } private List verificationFileList(Long workstationId, List workstationDirectoryFileVOList) { List repeatFileIds = new LinkedList<>(); Long storageSpaceId = ((DncFixedSpace) Objects.requireNonNull(getStorageRootSpaceId(workstationId))).getId(); workstationDirectoryFileVOList.forEach(sa -> { List list = null; if (Func.isNotEmpty(sa.getStorageSpaceId())) { list = list(Wrappers.lambdaQuery() .eq(TransferDirectoryFile::getStorageSpaceId, sa.getStorageSpaceId()) .eq(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())); /* list = list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStorageSpaceId(); }, sa.getStorageSpaceId())).eq((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.YES.getCode()));*/ } if (Func.isEmpty(sa.getStorageSpaceId())) { list = list(Wrappers.lambdaQuery( ).eq(TransferDirectoryFile::getStorageSpaceId, storageSpaceId) .eq(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())); /* list = list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStorageSpaceId(); }, storageSpaceId)).eq((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.YES.getCode()));*/ } if (Func.isNotEmpty(list)) { Map fileMap = list.stream().collect(Collectors.toMap(s -> { return s.getFilename() + "/" + s.getFileType() + "/" + s.getStorageSpaceId(); }, Function.identity())); TransferDirectoryFile transferDirectoryFile = null; if (Func.isNotEmpty(sa.getStorageSpaceId())) { transferDirectoryFile = fileMap.get(sa.getFilename() + "/" + sa.getFileType() + "/" + sa.getStorageSpaceId()); } if (Func.isEmpty(sa.getStorageSpaceId())) { transferDirectoryFile = fileMap.get(sa.getFilename() + "/" + sa.getFileType() + "/" + storageSpaceId); } if (transferDirectoryFile != null) { repeatFileIds.add(transferDirectoryFile.getId()); } } }); return repeatFileIds; } private DncFixedSpace getStorageRootSpaceId(Long workstationId) { DncFixedSpace dncFixedSpace; Map rootSpaceMap = this.fixedSpaceService.getRootSpace(); Map workstationRelationDirectoryMap = this.fixedSpaceService.getWorkstationRelationDirectory(); if (!workstationRelationDirectoryMap.isEmpty()) { DncWsRelationTd dncWsRelationTd = workstationRelationDirectoryMap.get(workstationId); if (dncWsRelationTd == null) { throw new ServiceException(MessageUtils.message("dnc.ftp.relation.workstation.normal.use", new Object[0])); } if (!rootSpaceMap.isEmpty() && (dncFixedSpace = rootSpaceMap.get(dncWsRelationTd.getTransferDirectorId())) != null) { return dncFixedSpace; } return null; } return null; } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public Boolean existDuplicateFile(Long id, List workstationDirectoryFileVOList) { List longs = verificationUploadFileList(id, workstationDirectoryFileVOList); return Boolean.valueOf(Func.isNotEmpty(longs) && longs.size() > 0); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public Boolean existDuplicateFileBatch(WorkstationFileVO workstationFileVo) { List existsIds = new ArrayList<>(); List workstationIds = workstationFileVo.getWorkstationIds(); List workstationDirectoryFileVOList = workstationFileVo.getWorkstationDirectoryFileVOList(); workstationIds.forEach(id -> { List longs = verificationUploadFileList(id, workstationDirectoryFileVOList); existsIds.addAll(longs); }); return Boolean.valueOf(Func.isNotEmpty(existsIds) && existsIds.size() > 0); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public void saveOperationLog(TransferDirectoryFile transferDirectoryFile, Integer operationType) { File file = (File) this.fileService.getById(transferDirectoryFile.getCraftFileId()); List ids = new ArrayList<>(); String allPath = ""; if (file != null) { allPath = file.getAllPath(); String[] fileIds = allPath.split("/"); for (String s : fileIds) { ids.add(Long.valueOf(Long.parseLong(s))); } } String fromPath = ""; if (Func.isNotEmpty(ids)) { fromPath = this.fileService.list(Wrappers.lambdaQuery().in(File::getId, ids)).stream().map(File::getDisplayName).collect(Collectors.joining("/")); /* fromPath = (String) this.fileService.list((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getId(); }, ids)).stream().map((v0) -> { return v0.getDisplayName(); }).collect(Collectors.joining("/"));*/ } DncOperationLogDto dncOperationLogDto = new DncOperationLogDto(); WorkstationVO workstationVO = this.workstationService.getDetail(transferDirectoryFile.getWorkstationId()); BladeUser user = AuthUtil.getUser(); dncOperationLogDto.setFileId(transferDirectoryFile.getId()).setFileName(transferDirectoryFile.getOriginalFilename()).setObjectKey(transferDirectoryFile.getObjectKey()).setSuffix(transferDirectoryFile.getSuffix()).setOperatorId(user.getUserId()).setOperatorName(user.getAccount()).setOperationType(operationType).setOperationResponse(1).setOperationTime(new Date()).setSourcePathId(allPath).setSourcePathName(fromPath).setLink(transferDirectoryFile.getLink()).setWorkstationId(transferDirectoryFile.getWorkstationId()).setVersion(transferDirectoryFile.getVersion()).setStorageSpace(transferDirectoryFile.getStorageSpace()).setFileLocation(DncEnums.FileLocation.ETHERNET.getCode()); if (transferDirectoryFile.getFileSource().equals(DncEnums.FileSource.LOCAL_FILE.getCode())) { dncOperationLogDto.setSourceType(DncEnums.LogFileSourceType.LOCAL_FILE.getCode()); } if (transferDirectoryFile.getFileSource().equals(DncEnums.FileSource.MY_DOCUMENTS.getCode())) { dncOperationLogDto.setSourceType(DncEnums.LogFileSourceType.MY_DOCUMENTS.getCode()); } if (transferDirectoryFile.getFileSource().equals(DncEnums.FileSource.PROCESSING_PROGRAM.getCode())) { dncOperationLogDto.setSourceType(DncEnums.LogFileSourceType.ART_BAG.getCode()); dncOperationLogDto.setTargetType(DncEnums.LogFileSourceType.PROCESSING_PROGRAM.getCode()); } if (!operationType.equals(DncEnums.LogOperationType.DELETE.getCode())) { dncOperationLogDto.setTargetPathId(String.valueOf(transferDirectoryFile.getId())); if (workstationVO != null) { dncOperationLogDto.setTargetPathName(workstationVO.getGroupName() + "/" + workstationVO.getName() + "/" + transferDirectoryFile.getOriginalFilename()); } } this.operationLogService.insertLog(dncOperationLogDto); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List workstationFromFile(Integer fileType, List list) { BladeUser user = AuthUtil.getUser(); return this.fileService.batchSave(user, list, DncEnums.LogOperationType.UPLOAD.getCode(), fileType); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List getFileCoverHistory(String id) { TransferDirectoryFile transferDirectoryFile; Map userMap = this.userService.list().stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, Function.identity())); if (Func.isNotBlank(id) && (transferDirectoryFile = (TransferDirectoryFile) getById(id)) != null) { Long transferDirectoryId = transferDirectoryFile.getTransferDirectoryId(); String filename = transferDirectoryFile.getFilename(); Integer fileType = transferDirectoryFile.getFileType(); List list = list(Wrappers.lambdaQuery().eq(TransferDirectoryFile::getTransferDirectoryId, transferDirectoryId) .eq(TransferDirectoryFile::getFilename, filename) .eq(TransferDirectoryFile::getFileType, fileType) .eq(TransferDirectoryFile::getStorageSpaceId, transferDirectoryFile.getStorageSpaceId()) .orderByDesc(TransferDirectoryFile::getIsCurrent).orderByDesc(TransferDirectoryFile::getVersion)); /* List list = list((Wrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getTransferDirectoryId(); }, transferDirectoryId)).eq((v0) -> { return v0.getFilename(); }, filename)).eq((v0) -> { return v0.getFileType(); }, fileType)).eq((v0) -> { return v0.getStorageSpaceId(); }, transferDirectoryFile.getStorageSpaceId())).orderByDesc((v0) -> { return v0.getIsCurrent(); })).orderByDesc((v0) -> { return v0.getVersion(); }));*/ if (Func.isNotEmpty(list)) { List artFileIds = list.stream().filter(s -> { return DncEnums.FileSource.PROCESSING_PROGRAM.getCode().equals(s.getFileSource()); }).map((v0) -> { return v0.getCraftFileId(); }).collect(Collectors.toList()); Map artFileInformationMap = artFileInformationMap(artFileIds); return list.stream().map(s2 -> { ArtFileInformationDTO fileInformation; FileHistoryVO build = FileHistoryVO.builder().id(s2.getId()).createTime(s2.getCreateTime()).filename(s2.getFilename()).objectKey(s2.getObjectKey()).isCurrent(s2.getIsCurrent()).covertTime(s2.getCovertTime()).link(s2.getLink()).contentMd5(s2.getContentMd5()).contentLength(s2.getContentLength()).contentType(s2.getContentType()).suffix(s2.getSuffix()).createUser(String.valueOf(s2.getCreateUser())).updateUser(String.valueOf(s2.getUpdateUser())).createUserName(userMap.get(s2.getCreateUser()) != null ? ((User) userMap.get(s2.getCreateUser())).getAccount() : "").updateUserName(userMap.get(s2.getUpdateUser()) != null ? ((User) userMap.get(s2.getUpdateUser())).getAccount() : "").updateTime(s2.getUpdateTime()).version(s2.getVersion() != null ? String.valueOf(s2.getVersion()) : "1").versionDesc(s2.getVersion() + CommonConstant.FILE_SUFFIX).build(); if (DncEnums.FileSource.PROCESSING_PROGRAM.getCode().equals(s2.getFileSource()) && !artFileInformationMap.isEmpty() && (fileInformation = (ArtFileInformationDTO) artFileInformationMap.get(s2.getCraftFileId())) != null) { String fileSourceNamePath = fileInformation.getFileSourceNamePath(); DncArtBag dncArtBag = fileInformation.getDncArtBag(); if (Func.isNotEmpty(dncArtBag) && Func.isNotBlank(fileSourceNamePath)) { DncFileNameProcessRuleContext context = DncFileNameProcessRuleContext.builder().artBag(dncArtBag).directoryPath(fileSourceNamePath).fileName(s2.getFilename()).build(); String dncFileName = DncFileNameProcessRuleFactory.getDncFileName(context); if (Func.isNotBlank(dncFileName)) { build.setFilename(dncFileName); } } } return build; }).collect(Collectors.toList()); } } return new ArrayList<>(); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService @Transactional(rollbackFor = {Exception.class}) public Boolean fileVersionSwitching(FileVersionSwitchVO fileVersionSwitchVO) { boolean result = false; if (Func.isNotBlank(fileVersionSwitchVO.getSwitchFileId()) && Func.isNotBlank(fileVersionSwitchVO.getCurrentFileId())) { TransferDirectoryFile file = (TransferDirectoryFile) getById(fileVersionSwitchVO.getCurrentFileId()); if (file == null || !DncEnums.CurrentVersion.YES.getCode().equals(file.getIsCurrent())) { throw new ServiceException(MessageUtils.message("dnc.workstation.file.is.not.exist.or.is.not.current.version", new Object[0])); } boolean updateSwitch = update(Wrappers.lambdaUpdate().set(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode()).eq(TransferDirectoryFile::getId, fileVersionSwitchVO.getSwitchFileId())); boolean updateCurrent = update(Wrappers.lambdaUpdate().set(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.NO.getCode()).eq(TransferDirectoryFile::getId, fileVersionSwitchVO.getCurrentFileId())); /* boolean updateSwitch = update((Wrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().set((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.YES.getCode())).eq((v0) -> { return v0.getId(); }, fileVersionSwitchVO.getSwitchFileId())); boolean updateCurrent = update((Wrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().set((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.NO.getCode())).eq((v0) -> { return v0.getId(); }, fileVersionSwitchVO.getCurrentFileId())); */ if (updateSwitch && updateCurrent) { result = true; } } return Boolean.valueOf(result); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public IPage getFilePages(WorkstationFileSearchVO searchDTO, Query query) { List suffixs = this.fileService.getSuffix(); String keywords = searchDTO.getKeywords(); String workstationId = searchDTO.getWorkstationId(); Integer fileType = searchDTO.getFileType(); String noSuffix = ""; if (fileType != null && fileType.equals(DncEnums.FileType.PROCESSING_PROGRAM.getCode())) { List collect = getStringList(suffixs); if (collect.size() > 0) { noSuffix = CommonConstant.NOT_SUFFIX; } suffixs = suffixs.stream().filter(s -> { return !CommonConstant.NOT_SUFFIX.equals(s); }).collect(Collectors.toList()); } IPage page = Condition.getPage(query); List filePages = this.transferDirectoryFileMapper.getFilePages(keywords, workstationId, suffixs, fileType, noSuffix, page); if (Func.isNotEmpty(filePages)) { filePages.forEach(s2 -> { s2.setVersion(Func.isNotEmpty(s2.getVersion()) ? s2.getVersion() + CommonConstant.FILE_SUFFIX : "1.0"); }); return page.setRecords(filePages); } return page.setRecords(new ArrayList<>()); } private List getStringList(List suffixs) { return suffixs.stream().filter(CommonConstant.NOT_SUFFIX::equals).collect(Collectors.toList()); /* return suffixs.stream().filter((v1) -> { return r1.equals(v1); }).collect(Collectors.toList());*/ } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List fileList(WorkstationDetailVO workstationDetailVO) { String workstationId = workstationDetailVO.getWorkstationId(); Workstation workstation = (Workstation) this.workstationService.getById(workstationId); Integer transmissionMethod = workstation.getTransmissionMethod(); List collect = new ArrayList<>(); List fileLocations = workstationDetailVO.getFileLocations(); Map workstationRelationDirectory = this.fixedSpaceService.getWorkstationRelationDirectory(); if (workstationRelationDirectory == null) { return Lists.newArrayList(); } DncWsRelationTd dncWsRelationTd = workstationRelationDirectory.get(Long.valueOf(Long.parseLong(workstationId))); if (dncWsRelationTd == null && !fileLocations.contains(CommonConstant.VERSION_NUM)) { return Lists.newArrayList(); } if (Func.isNotEmpty(fileLocations) && fileLocations.contains(CommonConstant.VERSION_NUM)) { DncReadFileVO dncReadFileVO = new DncReadFileVO(); dncReadFileVO.setWorkstationId(workstationId); List onlineFileList = getOnlineFileList(dncReadFileVO); if (Func.isNotEmpty(onlineFileList)) { collect.addAll(onlineFileList); } } Integer oldVer = workstationDetailVO.getOldVer(); Integer regularSpace = workstationDetailVO.getRegularSpace(); List storageSpaceIds = new ArrayList<>(); if (DncConstant.OLD_VERSION.equals(oldVer)) { if (Func.isNotEmpty(workstationDetailVO.getStorageSpaceId())) { storageSpaceIds.add(workstationDetailVO.getStorageSpaceId()); } else { DncFixedSpace storageRootSpaceId = getStorageRootSpaceId(Long.valueOf(Func.toLong(workstationId))); if (storageRootSpaceId != null) { if (DncConstant.REGULAR_SPACE.equals(regularSpace)) { storageSpaceIds.add(storageRootSpaceId.getId()); } else { List list = this.fixedSpaceService.list(Wrappers.lambdaQuery().eq(DncFixedSpace::getTdId, storageRootSpaceId.getTdId())); /* List list = this.fixedSpaceService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getTdId(); }, storageRootSpaceId.getTdId()));*/ if (Func.isNotEmpty(list)) { storageSpaceIds.addAll(list.stream().map((v0) -> { return v0.getId(); }).distinct().collect(Collectors.toList())); } } } } } else if (Func.isNotEmpty(workstationDetailVO.getStorageSpaceId())) { storageSpaceIds.add(workstationDetailVO.getStorageSpaceId()); } else { DncFixedSpace storageRootSpaceId2 = getStorageRootSpaceId(Long.valueOf(Func.toLong(workstationId))); if (storageRootSpaceId2 != null) { Long tdId = storageRootSpaceId2.getTdId(); List list2 = this.fixedSpaceService.list(Wrappers.lambdaQuery().eq(DncFixedSpace::getTdId, tdId)); /* List list2 = this.fixedSpaceService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getTdId(); }, tdId));*/ if (Func.isNotEmpty(list2)) { storageSpaceIds.addAll(list2.stream().map((v0) -> { return v0.getId(); }).distinct().collect(Collectors.toList())); } } } Map userMap = this.userService.list().stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, Function.identity())); Map fixSpaceLocationMap = this.fixedSpaceService.getFixSpaceLocation(Long.valueOf(Long.parseLong(workstationId))); if (Func.isNotEmpty(fileLocations) && fileLocations.contains(CommonConstant.API_SCOPE_CATEGORY) && Func.isNotEmpty(storageSpaceIds) && workstationDetailVO.getFileLocations().contains(CommonConstant.API_SCOPE_CATEGORY)) { List transferDirectoryFiles = list(new QueryWrapper().lambda() .in(TransferDirectoryFile::getStorageSpaceId, storageSpaceIds) .eq(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode()) .like(Func.isNotBlank(workstationDetailVO.getFileName()), TransferDirectoryFile::getOriginalFilename, workstationDetailVO.getFileName())); /* List transferDirectoryFiles = list(((LambdaQueryWrapper) ((LambdaQueryWrapper) new QueryWrapper().lambda().in((v0) -> { return v0.getStorageSpaceId(); }, storageSpaceIds)).eq((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.YES.getCode())).like(Func.isNotBlank(workstationDetailVO.getFileName()), (v0) -> { return v0.getOriginalFilename(); }, workstationDetailVO.getFileName()));*/ List artFileIds = transferDirectoryFiles.stream().filter(s -> { return DncEnums.FileSource.PROCESSING_PROGRAM.getCode().equals(s.getFileSource()); }).map((v0) -> { return v0.getCraftFileId(); }).collect(Collectors.toList()); Map artFileInformationMap = artFileInformationMap(artFileIds); List ethernetList = transferDirectoryFiles.stream().map(transferDirectoryFile -> { ArtFileInformationDTO fileInformation; TransferDirectoryFileVo transferDirectoryFileVo = TransferDirectoryFileConvert.INSTANCE.convert(transferDirectoryFile); User updateUser = (User) userMap.get(transferDirectoryFile.getUpdateUser()); User createUser = (User) userMap.get(transferDirectoryFile.getCreateUser()); if (DncEnums.FileSource.FTP.getCode().equals(transferDirectoryFile.getFileSource())) { transferDirectoryFileVo.setUpdateUserName("机床回传"); } else { transferDirectoryFileVo.setUpdateUserName(updateUser != null ? updateUser.getAccount() : ""); } transferDirectoryFileVo.setCreateUserName(createUser != null ? createUser.getAccount() : ""); transferDirectoryFileVo.setVersionDesc(transferDirectoryFile.getVersion() + CommonConstant.FILE_SUFFIX); if (transferDirectoryFile.getFileType() != null && transferDirectoryFile.getStorageSpace() != null && transferDirectoryFile.getFileType().equals(DncEnums.FileType.PROCESS_DOCUMENTS.getCode()) && transferDirectoryFile.getStorageSpace().equals(DncEnums.StorageSpace.ROUTINE.getCode())) { transferDirectoryFileVo.setDocumentOwnership(DncEnums.FileOwnership.WORKSTATION.getName()); transferDirectoryFileVo.setDocumentOwnerships(DncEnums.FileOwnership.WORKSTATION.getCode()); } transferDirectoryFileVo.setFileLocation(DncEnums.FileLocation.ETHERNET.getName()); transferDirectoryFileVo.setFileLocations(DncEnums.FileLocation.ETHERNET.getCode()); Date date = (Date) Optional.ofNullable(transferDirectoryFile.getUpdateTime()).orElse(transferDirectoryFile.getCreateTime()); transferDirectoryFileVo.setLastModified(date); if (fixSpaceLocationMap != null) { String spaceLocation = (String) fixSpaceLocationMap.get(transferDirectoryFile.getStorageSpaceId()); transferDirectoryFileVo.setFixSpaceLocation(spaceLocation); } transferDirectoryFileVo.setWhetherArchive(transferDirectoryFile.getWhetherArchive()); transferDirectoryFileVo.setWhetherArchiveDesc(DncEnums.WhetherArchive.Archive.getNameByCode(transferDirectoryFile.getWhetherArchive())); if (DncEnums.FileSource.PROCESSING_PROGRAM.getCode().equals(transferDirectoryFile.getFileSource()) && !artFileInformationMap.isEmpty() && (fileInformation = (ArtFileInformationDTO) artFileInformationMap.get(transferDirectoryFile.getCraftFileId())) != null) { String fileSourceNamePath = fileInformation.getFileSourceNamePath(); DncArtBag dncArtBag = fileInformation.getDncArtBag(); if (Func.isNotEmpty(dncArtBag) && Func.isNotBlank(fileSourceNamePath)) { DncFileNameProcessRuleContext context = DncFileNameProcessRuleContext.builder().artBag(dncArtBag).directoryPath(fileSourceNamePath).fileName(transferDirectoryFile.getFilename()).build(); String dncFileName = DncFileNameProcessRuleFactory.getDncFileName(context); if (Func.isNotBlank(dncFileName)) { transferDirectoryFileVo.setFilename(dncFileName); transferDirectoryFileVo.setOriginalFilename(dncFileName); } } } return transferDirectoryFileVo; }).collect(Collectors.toList()); if (Func.isNotEmpty(ethernetList)) { collect.addAll(ethernetList); } List list3 = this.dncFactoryFileService.list(Wrappers.lambdaQuery().eq(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())); /* List list3 = this.dncFactoryFileService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.YES.getCode()));*/ if (Func.isNotEmpty(list3)) { List factoryList =list3.stream().map(s2 -> { User updateUser = userMap.get(s2.getUpdateUser()); User createUser = userMap.get(s2.getCreateUser()); return TransferDirectoryFileVo.builder().id(s2.getId()).fileType(DncEnums.FileType.PROCESS_DOCUMENTS.getCode()).filename(s2.getFilename()).originalFilename(s2.getOriginalFilename()).contentMd5(s2.getContentMd5()).contentLength(s2.getContentLength()).contentType(s2.getContentType()).objectKey(s2.getObjectKey()).suffix(s2.getSuffix()).link(s2.getLink()).version(s2.getVersion()).versionDesc(s2.getVersion() + CommonConstant.FILE_SUFFIX).storageSpace(DncEnums.StorageSpace.ROUTINE.getCode()).documentOwnership(DncEnums.FileOwnership.FACTORY.getName()).documentOwnerships(DncEnums.FileOwnership.FACTORY.getCode()).updateUser(String.valueOf(s2.getUpdateUser())).updateUserName(updateUser != null ? updateUser.getAccount() : "").createUser(String.valueOf(s2.getCreateUser())).createUserName(createUser != null ? createUser.getAccount() : "").updateTime(s2.getUpdateTime()).whetherArchive(s2.getWhetherArchive()).whetherArchiveDesc(DncEnums.WhetherArchive.Archive.getNameByCode(s2.getWhetherArchive())).build(); }).collect(Collectors.toList()); collect.addAll(factoryList); } } return collect.stream().peek(c -> { if (DncConstant.TRANSMISSION_METHOD.equals(transmissionMethod) && DncEnums.FileType.PROCESSING_PROGRAM.getCode().equals(c.getFileType())) { c.setCanSent(1); } }).collect(Collectors.toList()); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public Map artFileInformationMap(List artFileIds) { Map artFileInformationMap = null; if (Func.isNotEmpty(artFileIds)) { artFileInformationMap = this.artFileService.getArtFileInformationMap(artFileIds); } return artFileInformationMap; } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public Boolean deleteWorkstationDirectoryFile(String fileId) { TransferDirectoryFile transferDirectoryFile = (TransferDirectoryFile) getById(String.valueOf(fileId)); if (transferDirectoryFile == null) { throw new ServiceException(MessageUtils.message("workstation.file.no.exists", new Object[0])); } saveOperationLog(transferDirectoryFile, DncEnums.LogOperationType.DELETE.getCode()); return Boolean.valueOf(removeById(transferDirectoryFile.getId())); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List findProgram(Long id) { return list(Wrappers.lambdaQuery() .eq(TransferDirectoryFile::getTransferDirectoryId, id) .eq(TransferDirectoryFile::getFileType, 1) .eq(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())); /* return list((Wrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getTransferDirectoryId(); }, id)).eq((v0) -> { return v0.getFileType(); }, 1)).eq((v0) -> { return v0.getIsCurrent(); }, DncEnums.CurrentVersion.YES.getCode()));*/ } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService @Transactional(rollbackFor = {Exception.class}) public MachineToolBatchWriteFileVO batchOnlineWriteFile(MachineToolBatchWriteFileVO writeFileVO) { List workstationIds = writeFileVO.getWorkstationIds(); List dncWriteFileVOList = writeFileVO.getDncWriteFileVOList(); if (Func.isNotEmpty(workstationIds)) { workstationIds.forEach(workstationId -> { writeDncOnlineFile(workstationId, dncWriteFileVOList); }); } return writeFileVO; } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public String writeDncOnlineFile(String workstationId, List dncWriteFileVOList) { dncWriteFileVOList.forEach(writeFile -> { String fileName = writeFile.getFileName(); String objectKey = writeFile.getObjectKey(); String extendId = getMachineExtendId(workstationId); String returnMessage = ""; if (Func.isNotBlank(objectKey)) { try { InputStream inputStream = this.ossBuilder.template().getObject(objectKey); if (inputStream != null) { FileOnlineWriteVo fileOnlineWriteVo = new FileOnlineWriteVo(); fileOnlineWriteVo.setID(extendId); fileOnlineWriteVo.setName(toUTF8(fileName)); String inputStreamString = IOUtils.toString(inputStream, StandardCharsets.UTF_8); fileOnlineWriteVo.setContent(inputStreamString); returnMessage = this.dncOnlineFileClient.onlineWrite(URLEncoder.encode(extendId, DncConstant.CHARSET), URLEncoder.encode(toUTF8(fileName), DncConstant.CHARSET), URLEncoder.encode(inputStreamString, DncConstant.CHARSET)); inputStream.close(); } } catch (IOException e) { throw new ServiceException("dmp连接机床失败,请查看dmp是否正常运行再尝试连接"); } } String fileId = writeFile.getFileId(); Integer fileSource = writeFile.getFileSource(); JSONObject cncMessage = getCncMessage(returnMessage); if (cncMessage != null) { errorCode(cncMessage); DncOperationLogDto dncOperationLogDto = new DncOperationLogDto(); dncOperationLogDto.setWorkstationId(Long.valueOf(Long.parseLong(workstationId))); dncOperationLogDto.setFileName(fileName); dncOperationLogDto.setOperatorId(AuthUtil.getUserId()); dncOperationLogDto.setOperatorName(AuthUtil.getUserAccount()); dncOperationLogDto.setOperationTime(new Date()); dncOperationLogDto.setOperationResponse(CommonConstant.VERSION_NUM); dncOperationLogDto.setOperationType(DncEnums.LogOperationType.UPLOAD.getCode()); dncOperationLogDto.setFileLocation(DncEnums.FileLocation.INTERNAL_STORAGE.getCode()); if (DncEnums.FileSource.LOCAL_FILE.getCode().equals(fileSource)) { FileSourcePathVO fileSourcePath = this.fileService.getFileSourcePath(fileId); dncOperationLogDto.setSourcePathId(fileSourcePath.getAllPathId()); dncOperationLogDto.setSourcePathName(fileSourcePath.getAllPathName()); } if (DncEnums.FileSource.PROCESSING_PROGRAM.getCode().equals(fileSource)) { FileSourcePathVO artFileSourcePath = this.artFileService.getArtFileSourcePath(fileId); dncOperationLogDto.setSourcePathId(artFileSourcePath.getAllPathId()); dncOperationLogDto.setSourcePathName(artFileSourcePath.getAllPathName()); } dncOperationLogDto.setSourceType(fileSource); this.operationLogService.insertLog(dncOperationLogDto); } }); return MessageUtils.message("dnc.file.written.successfully", new Object[0]); } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public InputStream readDncOnlineFile(DncReadFileVO dncReadFileVO) { String fileName = dncReadFileVO.getFileName(); String workstationId = dncReadFileVO.getWorkstationId(); String machineExtendId = getMachineExtendId(workstationId); FileOnlineWriteVo fileOnlineWriteVo = new FileOnlineWriteVo(); fileOnlineWriteVo.setID(machineExtendId); fileOnlineWriteVo.setName(fileName); try { String returnMessage = this.dncOnlineFileClient.onlineRead(fileOnlineWriteVo); JSONObject cncMessage = getCncMessage(returnMessage); errorCode(cncMessage); String data = (String) cncMessage.get("data"); return IOUtils.toInputStream(data, StandardCharsets.UTF_8); } catch (Exception e) { throw new ServiceException("dmp连接机床失败,请查看dmp是否正常运行再尝试连接"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService @Transactional(rollbackFor = {Exception.class}) public String delOnlineFile(DncReadFileVO dncReadFileVO) { String workstationId = dncReadFileVO.getWorkstationId(); String fileName = dncReadFileVO.getFileName(); String machineExtendId = getMachineExtendId(workstationId); FileOnlineWriteVo fileOnlineWriteVo = new FileOnlineWriteVo(); fileOnlineWriteVo.setID(machineExtendId); fileOnlineWriteVo.setName(fileName); try { String returnMessage = this.dncOnlineFileClient.deleteOnlineFile(fileOnlineWriteVo); JSONObject cncMessage = getCncMessage(returnMessage); errorCode(cncMessage); DncOperationLogDto dncOperationLogDto = new DncOperationLogDto(); dncOperationLogDto.setWorkstationId(Long.valueOf(Long.parseLong(workstationId))); dncOperationLogDto.setFileName(fileName); dncOperationLogDto.setOperationTime(new Date()); dncOperationLogDto.setOperatorId(AuthUtil.getUserId()); dncOperationLogDto.setOperatorName(AuthUtil.getUserAccount()); dncOperationLogDto.setOperationResponse(CommonConstant.VERSION_NUM); dncOperationLogDto.setOperationType(DncEnums.LogOperationType.DELETE.getCode()); dncOperationLogDto.setFileLocation(DncEnums.FileLocation.INTERNAL_STORAGE.getCode()); this.operationLogService.insertLog(dncOperationLogDto); return MessageUtils.message("dnc.online.deletion.succeeded", new Object[0]); } catch (Exception e) { throw new ServiceException("dmp连接机床失败,请查看dmp是否正常运行再尝试连接"); } } private void errorCode(JSONObject cncMessage) { String errCode = (String) cncMessage.get("errCode"); if ("0001".equals(errCode)) { throw new ServiceException((String) cncMessage.get("errMsg")); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List getOnlineFileList(DncReadFileVO dncReadFileVO) { JSONArray data; List transferDirectoryFileVoList = new ArrayList<>(); String workstationId = dncReadFileVO.getWorkstationId(); String fileName = dncReadFileVO.getFileName(); String machineExtendId = getMachineExtendId(workstationId); FileOnlineWriteVo fileOnlineWriteVo = new FileOnlineWriteVo(); fileOnlineWriteVo.setID(machineExtendId); fileOnlineWriteVo.setName(fileName); try { String returnMessage = this.dncOnlineFileClient.onlineFileList(fileOnlineWriteVo); JSONObject cncMessage = getCncMessage(returnMessage); if (cncMessage != null && (data = cncMessage.getJSONArray("data")) != null) { int size = data.size(); if (size > 0) { for (int i = 0; i < data.size(); i++) { JSONObject jsonObject = data.getJSONObject(i); TransferDirectoryFileVo directoryFileVo = new TransferDirectoryFileVo(); String name = (String) jsonObject.get("name"); directoryFileVo.setId(Long.valueOf(String.valueOf(i))); directoryFileVo.setFilename(name); directoryFileVo.setFileAttribute((Integer) jsonObject.get("type")); directoryFileVo.setFileLocations(DncEnums.FileLocation.INTERNAL_STORAGE.getCode()); directoryFileVo.setFileType(DncEnums.FileType.PROCESSING_PROGRAM.getCode()); directoryFileVo.setOriginalFilename(name); directoryFileVo.setStorageSpace(DncEnums.StorageSpace.ROUTINE.getCode()); transferDirectoryFileVoList.add(directoryFileVo); } } } return transferDirectoryFileVoList; } catch (Exception e) { throw new ServiceException("dmp连接机床失败,请查看dmp是否正常运行再尝试连接"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List allSerialList() { try { String str = this.dncOnlineFileClient.serialFileSerialList(); JSONObject jsonObject = getCncMessage(str); log.info("串口列表: {}", jsonObject); Integer statusCode = jsonObject.getInteger("status"); if (!statusCode.equals(StatusCodeEnum.OK.getStatus())) { throw new ServiceException(jsonObject.getString("message")); } JSONArray data = jsonObject.getJSONArray("data"); if (Func.isEmpty(data)) { return Lists.newArrayList(); } List res = Lists.newArrayList(); for (int i = 0; i < data.size(); i++) { JSONObject object = data.getJSONObject(i); SerialInfoDTO dto = SerialInfoDTO.builder().serialName(object.getString("SerialName")).deviceName(object.getString("DeviceName")).build(); res.add(dto); } return res; } catch (Exception e) { throw new ServiceException("串口列表获取异常"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public Integer serialDownloadSend(SerialSendVO vo) { log.info("远程地址: {}", vo); try { String str = this.dncOnlineFileClient.serialDownloadSend(vo); JSONObject jsonObject = getCncMessage(str); log.info("串口传输: {}", jsonObject); Integer statusCode = jsonObject.getInteger("status"); if (!statusCode.equals(StatusCodeEnum.OK.getStatus())) { throw new ServiceException(jsonObject.getString("message")); } return jsonObject.getInteger("data"); } catch (Exception e) { throw new ServiceException("串口发送异常"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public SendScheduleVO sendSchedule() { try { String str = this.dncOnlineFileClient.sendSchedule(); JSONObject jsonObject = getCncMessage(str); log.info("串口发送进度: {}", jsonObject); Integer statusCode = jsonObject.getInteger("status"); if (!statusCode.equals(StatusCodeEnum.OK.getStatus())) { throw new ServiceException(jsonObject.getString("message")); } JSONObject data = jsonObject.getJSONObject("data"); return SendScheduleVO.builder().status(data.getBoolean("Status")).isFinished(data.getBoolean("IsFinished")).bytes(data.getInteger("AllBytesCount")).sendCount(data.getInteger("SendCount")).exceptionMessage(data.getString("ExceptionMessage")).build(); } catch (Exception e) { throw new ServiceException("串口进度异常"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public boolean serialReceive(SerialSetting serialSetting) { try { String str = this.dncOnlineFileClient.serialReceive(serialSetting); JSONObject jsonObject = getCncMessage(str); log.info("串口接收: {}", jsonObject); Integer statusCode = jsonObject.getInteger("status"); if (!statusCode.equals(StatusCodeEnum.OK.getStatus())) { throw new ServiceException(jsonObject.getString("message")); } return true; } catch (Exception e) { throw new ServiceException("串口接收异常"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public ReceiveScheduleVO receiveSchedule(String encodingType) { try { String str = this.dncOnlineFileClient.receiveSchedule(encodingType); JSONObject jsonObject = getCncMessage(str); log.info("串口接收进度: {}", jsonObject); Integer statusCode = jsonObject.getInteger("status"); if (!statusCode.equals(StatusCodeEnum.OK.getStatus())) { throw new ServiceException(jsonObject.getString("message")); } JSONObject data = jsonObject.getJSONObject("data"); return ReceiveScheduleVO.builder().status(data.getBoolean("Status")).isFinished(data.getBoolean("IsFinished")).receiveBytes(data.getInteger("ReceivedBytesCount")).content(data.getString("ContentText")).exceptionMessage(data.getString("ExceptionMessage")).receiveSpeed(data.getInteger("ReceiveSpeed")).build(); } catch (Exception e) { throw new ServiceException("串口接收进度异常"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public boolean transportCancel() { try { String str = this.dncOnlineFileClient.transportCancel(); JSONObject jsonObject = getCncMessage(str); Integer statusCode = jsonObject.getInteger("status"); if (!statusCode.equals(StatusCodeEnum.OK.getStatus())) { throw new ServiceException(jsonObject.getString("message")); } return true; } catch (Exception e) { throw new ServiceException("串口关闭进度异常"); } } @Override // org.springblade.modules.dnc.service.ITransferDirectoryFileService public List serialSaveFile(WorkstationDirectoryFileVO vo) { Long workstationId = vo.getWorkstationId(); Long storageSpaceId = vo.getStorageSpaceId(); if (Func.isNull(storageSpaceId)) { Integer storageSpace = vo.getStorageSpace(); DncFixedSpace storageRootSpaceId = getStorageRootSpaceId(workstationId); if (Func.notNull(storageRootSpaceId)) { Long rootSpaceId = storageRootSpaceId.getId(); if (storageSpace.intValue() == 1) { vo.setStorageSpaceId(rootSpaceId); } else { List list1 = this.fixedSpaceService.list(Wrappers.lambdaQuery().eq(DncFixedSpace::getTdId, storageRootSpaceId.getTdId())); /* Long id = (Long) this.fixedSpaceService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getTdId(); }, storageRootSpaceId.getTdId())).stream().map((v0) -> { return v0.getId(); }).filter(c -> { return !c.equals(rootSpaceId); }).findFirst().get();*/ Long id = list1.stream().map(DncFixedSpace::getId).filter(c -> !c.equals(rootSpaceId)).findFirst().get(); vo.setStorageSpaceId(id); } } } if (Func.isNull(vo.getFileType())) { vo.setFileType(DncEnums.FileType.PROCESSING_PROGRAM.getCode()); } List list = new ArrayList<>(); List saveBatchLists = new ArrayList<>(); SaveBatchWorkstationFileVO saveDirectoryFile = saveDirectoryFile(workstationId, Lists.newArrayList(new WorkstationDirectoryFileVO[]{vo})); if (Func.isNotEmpty(saveDirectoryFile.getWorkstationDirectoryFiles())) { list.addAll(saveDirectoryFile.getWorkstationDirectoryFiles()); } List addLists = saveDirectoryFile.getAddLists(); if (Func.isNotEmpty(addLists)) { saveBatchLists.addAll(addLists); } if (Func.isNotEmpty(saveBatchLists)) { //gui /* List collect = saveBatchLists.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet(Comparator.comparing(()))), ArrayList::new)); */ List collect = saveBatchLists.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> { return new TreeSet<>(Comparator.comparing(alarm -> { return alarm.getFilename() + "===" + alarm.getStorageSpaceId() + "===" + alarm.getIsCurrent() + "===" + alarm.getVersion() + "===" + alarm.getFileType(); })); }), (v1) -> { return new ArrayList<>(v1); })); saveBatch(collect); } return list; } private String getMachineExtendId(String workstationId) { Workstation workstation = (Workstation) this.workstationService.getById(workstationId); if (workstation != null) { Integer supportCncRw = workstation.getSupportCncRw(); if (DncEnums.SupportCncRw.not_Support.getCode().equals(supportCncRw)) { throw new ServiceException(MessageUtils.message("dnc.device.does.not.support.writing.to.file", new Object[0])); } } WorkstationOfMachine workstationOfMachine = this.workstationOfMachineService.getWorkstationOfMachineByWorkstationId(Long.valueOf(Func.toLong(workstationId))); if (workstationOfMachine != null) { Long machineId = workstationOfMachine.getMachineId(); Machine machine = (Machine) this.machineService.getById(machineId); if (machine != null) { return machine.getExtendId(); } return ""; } return ""; } private static String toUTF8(String str) { String result = str; try { result = changeCharSet(str); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } private static String changeCharSet(String str) throws UnsupportedEncodingException { if (str != null) { byte[] bs = str.getBytes(); return new String(bs, StandardCharsets.UTF_8); } return null; } private JSONObject getCncMessage(String json) { return JSON.parseObject(json); } }