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
|
public class TransferDirectoryFileServiceImpl extends BaseServiceImpl<TransferDirectoryFileMapper, TransferDirectoryFile> 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
|
@Transactional(rollbackFor = {Exception.class})
|
public SaveBatchWorkstationFileVO saveDirectoryFile(Long workstationId, List<WorkstationDirectoryFileVO> workstationDirectoryFileVOList) {
|
SaveBatchWorkstationFileVO saveBatchWorkstationFileVO = new SaveBatchWorkstationFileVO();
|
List<Long> repeatFileIds = verificationUploadFileList(workstationId, workstationDirectoryFileVOList);
|
List<Long> repeatIds = verificationFileList(workstationId, workstationDirectoryFileVOList);
|
List<WorkstationDirectoryFileVO> workstationDirectoryFiles = new ArrayList<>();
|
List<TransferDirectoryFile> addLists = new ArrayList<>();
|
Map<Long, DncFixedSpace> dncFixedSpaceMap = null;
|
List<DncFixedSpace> list = this.fixedSpaceService.list();
|
if (Func.isNotEmpty(list)) {
|
dncFixedSpaceMap = list.stream().collect(Collectors.toMap((v0) -> {
|
return v0.getId();
|
}, Function.identity()));
|
}
|
Map<Long, DncWsRelationTd> workstationRelationDirectoryMap = this.fixedSpaceService.getWorkstationRelationDirectory();
|
Map<Long, DncFixedSpace> 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<String, TransferDirectoryFile> transferDirectoryFileMap = null;
|
if (Func.isNotEmpty(repeatFileIds) && repeatFileIds.size() > 0) {
|
update(Wrappers.<TransferDirectoryFile>lambdaUpdate().in(TransferDirectoryFile::getId, repeatFileIds)
|
.set(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.NO.getCode())
|
.set(TransferDirectoryFile::getCovertTime, new Date()));
|
List<TransferDirectoryFile> exitList = list(Wrappers.<TransferDirectoryFile>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<TransferDirectoryFile> 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
|
@Transactional(rollbackFor = {Exception.class})
|
public List<WorkstationDirectoryFileVO> saveBatchFile(WorkstationFileVO workstationFileVo) {
|
List<WorkstationDirectoryFileVO> list = new ArrayList<>();
|
List<Long> workstationIds = workstationFileVo.getWorkstationIds();
|
List<WorkstationDirectoryFileVO> workstationDirectoryFileVOList = workstationFileVo.getWorkstationDirectoryFileVOList();
|
workstationIds.forEach(id -> {
|
SaveBatchWorkstationFileVO saveDirectoryFile = saveDirectoryFile(id, workstationDirectoryFileVOList);
|
if (Func.isNotEmpty(saveDirectoryFile.getWorkstationDirectoryFiles())) {
|
list.addAll(saveDirectoryFile.getWorkstationDirectoryFiles());
|
}
|
});
|
return list;
|
}
|
|
@Override
|
public List<Long> verificationUploadFileList(Long workstationId, List<WorkstationDirectoryFileVO> workstationDirectoryFileVOList) {
|
List<Long> repeatFileIds = new LinkedList<>();
|
Long storageSpaceId = ((DncFixedSpace) Objects.requireNonNull(getStorageRootSpaceId(workstationId))).getId();
|
workstationDirectoryFileVOList.forEach(sa -> {
|
List<TransferDirectoryFile> list = null;
|
if (Func.isNotEmpty(sa.getStorageSpaceId())) {
|
list = list(Wrappers.<TransferDirectoryFile>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.<TransferDirectoryFile>lambdaQuery().eq(TransferDirectoryFile::getStorageSpaceId, storageSpaceId));
|
/*
|
list = list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getStorageSpaceId();
|
}, storageSpaceId));*/
|
}
|
if (Func.isNotEmpty(list)) {
|
Map<String, TransferDirectoryFile> 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<Long> verificationFileList(Long workstationId, List<WorkstationDirectoryFileVO> workstationDirectoryFileVOList) {
|
List<Long> repeatFileIds = new LinkedList<>();
|
Long storageSpaceId = ((DncFixedSpace) Objects.requireNonNull(getStorageRootSpaceId(workstationId))).getId();
|
workstationDirectoryFileVOList.forEach(sa -> {
|
List<TransferDirectoryFile> list = null;
|
if (Func.isNotEmpty(sa.getStorageSpaceId())) {
|
list = list(Wrappers.<TransferDirectoryFile>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.<TransferDirectoryFile>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<String, TransferDirectoryFile> 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<Long, DncFixedSpace> rootSpaceMap = this.fixedSpaceService.getRootSpace();
|
Map<Long, DncWsRelationTd> 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
|
public Boolean existDuplicateFile(Long id, List<WorkstationDirectoryFileVO> workstationDirectoryFileVOList) {
|
List<Long> longs = verificationUploadFileList(id, workstationDirectoryFileVOList);
|
return Boolean.valueOf(Func.isNotEmpty(longs) && longs.size() > 0);
|
}
|
|
@Override
|
public Boolean existDuplicateFileBatch(WorkstationFileVO workstationFileVo) {
|
List<Long> existsIds = new ArrayList<>();
|
List<Long> workstationIds = workstationFileVo.getWorkstationIds();
|
List<WorkstationDirectoryFileVO> workstationDirectoryFileVOList = workstationFileVo.getWorkstationDirectoryFileVOList();
|
workstationIds.forEach(id -> {
|
List<Long> longs = verificationUploadFileList(id, workstationDirectoryFileVOList);
|
existsIds.addAll(longs);
|
});
|
return Boolean.valueOf(Func.isNotEmpty(existsIds) && existsIds.size() > 0);
|
}
|
|
@Override
|
public void saveOperationLog(TransferDirectoryFile transferDirectoryFile, Integer operationType) {
|
File file = (File) this.fileService.getById(transferDirectoryFile.getCraftFileId());
|
List<Long> 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.<File>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
|
public List<UploadFileOssVO> workstationFromFile(Integer fileType, List<UploadFileOssVO> list) {
|
BladeUser user = AuthUtil.getUser();
|
return this.fileService.batchSave(user, list, DncEnums.LogOperationType.UPLOAD.getCode(), fileType);
|
}
|
|
@Override
|
public List<FileHistoryVO> getFileCoverHistory(String id) {
|
TransferDirectoryFile transferDirectoryFile;
|
Map<Long, User> 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<TransferDirectoryFile> list = list(Wrappers.<TransferDirectoryFile>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<TransferDirectoryFile> 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<Long> artFileIds = list.stream().filter(s -> {
|
return DncEnums.FileSource.PROCESSING_PROGRAM.getCode().equals(s.getFileSource());
|
}).map((v0) -> {
|
return v0.getCraftFileId();
|
}).collect(Collectors.toList());
|
Map<Long, ArtFileInformationDTO> 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
|
@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.<TransferDirectoryFile>lambdaUpdate().set(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode()).eq(TransferDirectoryFile::getId, fileVersionSwitchVO.getSwitchFileId()));
|
boolean updateCurrent = update(Wrappers.<TransferDirectoryFile>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
|
public IPage<TransferDirectoryFilePageVO> getFilePages(WorkstationFileSearchVO searchDTO, Query query) {
|
List<String> 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<String> 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<TransferDirectoryFilePageVO> page = Condition.getPage(query);
|
List<TransferDirectoryFilePageVO> 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<String> getStringList(List<String> 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
|
public List<TransferDirectoryFileVo> fileList(WorkstationDetailVO workstationDetailVO) {
|
String workstationId = workstationDetailVO.getWorkstationId();
|
Workstation workstation = (Workstation) this.workstationService.getById(workstationId);
|
Integer transmissionMethod = workstation.getTransmissionMethod();
|
List<TransferDirectoryFileVo> collect = new ArrayList<>();
|
List<Integer> fileLocations = workstationDetailVO.getFileLocations();
|
Map<Long, DncWsRelationTd> 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<TransferDirectoryFileVo> onlineFileList = getOnlineFileList(dncReadFileVO);
|
if (Func.isNotEmpty(onlineFileList)) {
|
collect.addAll(onlineFileList);
|
}
|
}
|
Integer oldVer = workstationDetailVO.getOldVer();
|
Integer regularSpace = workstationDetailVO.getRegularSpace();
|
List<Long> 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<DncFixedSpace> list = this.fixedSpaceService.list(Wrappers.<DncFixedSpace>lambdaQuery().eq(DncFixedSpace::getTdId, storageRootSpaceId.getTdId()));
|
/*
|
List<DncFixedSpace> 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<DncFixedSpace> list2 = this.fixedSpaceService.list(Wrappers.<DncFixedSpace>lambdaQuery().eq(DncFixedSpace::getTdId, tdId));
|
/*
|
List<DncFixedSpace> 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<Long, User> userMap = this.userService.list().stream().collect(Collectors.toMap((v0) -> {
|
return v0.getId();
|
}, Function.identity()));
|
Map<Long, String> 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<TransferDirectoryFile> transferDirectoryFiles = list(new QueryWrapper<TransferDirectoryFile>().lambda()
|
.in(TransferDirectoryFile::getStorageSpaceId, storageSpaceIds)
|
.eq(TransferDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())
|
.like(Func.isNotBlank(workstationDetailVO.getFileName()), TransferDirectoryFile::getOriginalFilename, workstationDetailVO.getFileName()));
|
/*
|
List<TransferDirectoryFile> 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<Long> artFileIds = transferDirectoryFiles.stream().filter(s -> {
|
return DncEnums.FileSource.PROCESSING_PROGRAM.getCode().equals(s.getFileSource());
|
}).map((v0) -> {
|
return v0.getCraftFileId();
|
}).collect(Collectors.toList());
|
Map<Long, ArtFileInformationDTO> artFileInformationMap = artFileInformationMap(artFileIds);
|
List<TransferDirectoryFileVo> 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<DncFactoryFile> list3 = this.dncFactoryFileService.list(Wrappers.<DncFactoryFile>lambdaQuery().eq(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode()));
|
/*
|
List<DncFactoryFile> list3 = this.dncFactoryFileService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getIsCurrent();
|
}, DncEnums.CurrentVersion.YES.getCode()));*/
|
if (Func.isNotEmpty(list3)) {
|
List<TransferDirectoryFileVo> 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
|
public Map<Long, ArtFileInformationDTO> artFileInformationMap(List<Long> artFileIds) {
|
Map<Long, ArtFileInformationDTO> artFileInformationMap = null;
|
if (Func.isNotEmpty(artFileIds)) {
|
artFileInformationMap = this.artFileService.getArtFileInformationMap(artFileIds);
|
}
|
return artFileInformationMap;
|
}
|
|
@Override
|
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
|
public List<TransferDirectoryFile> findProgram(Long id) {
|
return list(Wrappers.<TransferDirectoryFile>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
|
@Transactional(rollbackFor = {Exception.class})
|
public MachineToolBatchWriteFileVO batchOnlineWriteFile(MachineToolBatchWriteFileVO writeFileVO) {
|
List<String> workstationIds = writeFileVO.getWorkstationIds();
|
List<DncWriteFileVO> dncWriteFileVOList = writeFileVO.getDncWriteFileVOList();
|
if (Func.isNotEmpty(workstationIds)) {
|
workstationIds.forEach(workstationId -> {
|
writeDncOnlineFile(workstationId, dncWriteFileVOList);
|
});
|
}
|
return writeFileVO;
|
}
|
|
@Override
|
public String writeDncOnlineFile(String workstationId, List<DncWriteFileVO> 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
|
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
|
@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
|
public List<TransferDirectoryFileVo> getOnlineFileList(DncReadFileVO dncReadFileVO) {
|
JSONArray data;
|
List<TransferDirectoryFileVo> 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
|
public List<SerialInfoDTO> 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<SerialInfoDTO> 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
|
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
|
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
|
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
|
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
|
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
|
public List<WorkstationDirectoryFileVO> 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<DncFixedSpace> list1 = this.fixedSpaceService.list(Wrappers.<DncFixedSpace>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<WorkstationDirectoryFileVO> list = new ArrayList<>();
|
List<TransferDirectoryFile> saveBatchLists = new ArrayList<>();
|
SaveBatchWorkstationFileVO saveDirectoryFile = saveDirectoryFile(workstationId, Lists.newArrayList(new WorkstationDirectoryFileVO[]{vo}));
|
if (Func.isNotEmpty(saveDirectoryFile.getWorkstationDirectoryFiles())) {
|
list.addAll(saveDirectoryFile.getWorkstationDirectoryFiles());
|
}
|
List<TransferDirectoryFile> addLists = saveDirectoryFile.getAddLists();
|
if (Func.isNotEmpty(addLists)) {
|
saveBatchLists.addAll(addLists);
|
}
|
if (Func.isNotEmpty(saveBatchLists)) {
|
|
//gui
|
/*
|
List<TransferDirectoryFile> collect = saveBatchLists.stream().collect(
|
Collectors.collectingAndThen(
|
Collectors.toCollection(() -> new TreeSet(Comparator.comparing(()))), ArrayList::new));
|
*/
|
|
List<TransferDirectoryFile> 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);
|
}
|
}
|