package com.qianwen.smartman.modules.dnc.service.impl;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Optional;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.tool.utils.DateUtil;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.smartman.common.constant.CommonConstant;
|
import com.qianwen.smartman.common.utils.MessageUtils;
|
import com.qianwen.smartman.modules.cps.entity.Workstation;
|
import com.qianwen.smartman.modules.cps.service.IWorkstationService;
|
import com.qianwen.smartman.modules.dnc.convert.DncArchiveDirectoryFileConvert;
|
import com.qianwen.smartman.modules.dnc.entity.DncArchiveDirectory;
|
import com.qianwen.smartman.modules.dnc.entity.DncArchiveDirectoryFile;
|
import com.qianwen.smartman.modules.dnc.entity.DncFactoryFile;
|
import com.qianwen.smartman.modules.dnc.entity.TransferDirectoryFile;
|
import com.qianwen.smartman.modules.dnc.enums.DncEnums;
|
import com.qianwen.smartman.modules.dnc.mapper.DncArchiveDirectoryFileMapper;
|
import com.qianwen.smartman.modules.dnc.service.IDncArchiveDirectoryFileService;
|
import com.qianwen.smartman.modules.dnc.service.IDncArchiveDirectoryService;
|
import com.qianwen.smartman.modules.dnc.service.IDncFactoryFileService;
|
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.ArchiveDirectoryFileSearchVO;
|
import com.qianwen.smartman.modules.dnc.vo.DncArchiveDirectoryFileAddVO;
|
import com.qianwen.smartman.modules.dnc.vo.DncArchiveDirectoryFileVO;
|
import com.qianwen.smartman.modules.dnc.vo.DncArchiveFileAddVO;
|
import com.qianwen.smartman.modules.dnc.vo.VerifyArchiveFileCheckVO;
|
import com.qianwen.smartman.modules.dnc.vo.VerifyArchiveFileVO;
|
import com.qianwen.smartman.modules.system.entity.User;
|
import com.qianwen.smartman.modules.system.service.IUserService;
|
|
@Service
|
public class DncArchiveDirectoryFileServiceImpl extends BaseServiceImpl<DncArchiveDirectoryFileMapper, DncArchiveDirectoryFile> implements IDncArchiveDirectoryFileService {
|
private final IFileService fileService;
|
private final IUserService userService;
|
private final IWorkstationService workstationService;
|
private final IDncArchiveDirectoryService directoryService;
|
private final ITransferDirectoryFileService transferDirectoryFileService;
|
private final IDncFactoryFileService factoryFileService;
|
private final IObsFileService obsFileService;
|
|
public DncArchiveDirectoryFileServiceImpl(final IFileService fileService, final IUserService userService, final IWorkstationService workstationService, final IDncArchiveDirectoryService directoryService, final ITransferDirectoryFileService transferDirectoryFileService, final IDncFactoryFileService factoryFileService, final IObsFileService obsFileService) {
|
this.fileService = fileService;
|
this.userService = userService;
|
this.workstationService = workstationService;
|
this.directoryService = directoryService;
|
this.transferDirectoryFileService = transferDirectoryFileService;
|
this.factoryFileService = factoryFileService;
|
this.obsFileService = obsFileService;
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncArchiveDirectoryFileService
|
public IPage<DncArchiveDirectoryFileVO> getArFilePage(ArchiveDirectoryFileSearchVO searchVO, Query query) {
|
List<String> suffixs = this.fileService.getSuffix();
|
Integer fileType = searchVO.getFileType();
|
boolean result = false;
|
String noSuffix = "";
|
if (fileType != null && fileType.equals(DncEnums.FileType.PROCESSING_PROGRAM.getCode())) {
|
result = true;
|
|
List<String> collect = suffixs.stream().filter(CommonConstant.NOT_SUFFIX::equals).collect(Collectors.toList());
|
|
if (collect.size() > 0) {
|
noSuffix = CommonConstant.NOT_SUFFIX;
|
}
|
suffixs = suffixs.stream().filter(s -> {
|
return !CommonConstant.NOT_SUFFIX.equals(s);
|
}).collect(Collectors.toList());
|
}
|
String endTime = "";
|
if (Func.isNotEmpty(searchVO.getEndTime())) {
|
endTime = DateUtil.formatDate(searchVO.getEndTime()) + " 23:59:59";
|
}
|
Map<Long, User> userMap = this.userService.list().stream().collect(Collectors.toMap((v0) -> {
|
return v0.getId();
|
}, Function.identity()));
|
Map<Long, Workstation> workstationMap = this.workstationService.list(Wrappers.<Workstation>lambdaQuery().eq(Workstation::getStatus, CommonConstant.ENABLE)).stream().collect(Collectors.toMap((v0) -> {
|
return v0.getId();
|
}, Function.identity()));
|
List<String> finalSuffixs = suffixs;
|
String finalNoSuffix = noSuffix;
|
|
IPage<DncArchiveDirectoryFile> page = page(Condition.getPage(query), Wrappers.<DncArchiveDirectoryFile>lambdaQuery()
|
.eq(DncArchiveDirectoryFile::getArchiveDirectoryId, searchVO.getArId())
|
.eq(DncArchiveDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())
|
.and(result, i -> i.in(DncArchiveDirectoryFile::getSuffix, finalSuffixs).or().eq(Func.isNotBlank(finalNoSuffix), DncArchiveDirectoryFile::getSuffix, ""))
|
.eq(Func.isNotEmpty(searchVO.getWorkstationId()), DncArchiveDirectoryFile::getWorkstationId, searchVO.getWorkstationId())
|
.ge(Func.isNotEmpty(searchVO.getStartTime()), DncArchiveDirectoryFile::getCreateTime, searchVO.getStartTime())
|
.le(Func.isNotBlank(endTime), DncArchiveDirectoryFile::getCreateTime, endTime)
|
.and(Func.isNotEmpty(searchVO.getKeywords()), i -> i.likeRight(DncArchiveDirectoryFile::getFilename, searchVO.getKeywords()).or().likeRight(DncArchiveDirectoryFile::getSuffix, searchVO.getKeywords())));
|
|
/*
|
IPage<DncArchiveDirectoryFile> page = page(Condition.getPage(query), ((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getArchiveDirectoryId();
|
}, searchVO.getArId())).eq((v0) -> {
|
return v0.getIsCurrent();
|
}, DncEnums.CurrentVersion.YES.getCode())).and(result, i -> {
|
((LambdaQueryWrapper) ((LambdaQueryWrapper) i.in((v0) -> {
|
return v0.getSuffix();
|
}, finalSuffixs)).or()).eq(Func.isNotBlank(finalNoSuffix), (v0) -> {
|
return v0.getSuffix();
|
}, "");
|
}).eq(Func.isNotEmpty(searchVO.getWorkstationId()), (v0) -> {
|
return v0.getWorkstationId();
|
}, searchVO.getWorkstationId()).ge(Func.isNotEmpty(searchVO.getStartTime()), (v0) -> {
|
return v0.getCreateTime();
|
}, searchVO.getStartTime()).le(Func.isNotBlank(endTime), (v0) -> {
|
return v0.getCreateTime();
|
}, endTime).and(Func.isNotEmpty(searchVO.getKeywords()), i2 -> {
|
LambdaQueryWrapper lambdaQueryWrapper = (LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) i2.likeRight((v0) -> {
|
return v0.getFilename();
|
}, searchVO.getKeywords())).or()).likeRight((v0) -> {
|
return v0.getSuffix();
|
}, searchVO.getKeywords());
|
}));
|
*/
|
IPage<DncArchiveDirectoryFileVO> convert = DncArchiveDirectoryFileConvert.INSTANCE.convert(page);
|
convert.getRecords().forEach(s2 -> {
|
User userCr = (User) userMap.get(s2.getCreateUser());
|
User userUp = (User) userMap.get(s2.getUpdateUser());
|
Workstation workstation = (Workstation) workstationMap.get(s2.getWorkstationId());
|
s2.setUpdateUserName(userCr != null ? userCr.getAccount() : "");
|
s2.setCreateUserName(userUp != null ? userUp.getAccount() : "");
|
s2.setWorkstationName(workstation != null ? workstation.getName() : "");
|
s2.setVersionDesc((Func.isNotBlank(s2.getVersion()) ? s2.getVersion() : CommonConstant.VERSION_NUM) + CommonConstant.FILE_SUFFIX);
|
});
|
return Optional.of(convert).orElse(new Page<>());
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncArchiveDirectoryFileService
|
@Transactional(rollbackFor = {Exception.class})
|
public DncArchiveFileAddVO addFile(DncArchiveFileAddVO archiveFileAddVOS) {
|
List<DncArchiveDirectoryFileAddVO> fileAddVOList = archiveFileAddVOS.getFileAddVOList();
|
List<String> archiveDirectoryIds = archiveFileAddVOS.getArchiveDirectoryIds();
|
List<DncArchiveDirectoryFile> fileList = new ArrayList<>();
|
archiveDirectoryIds.forEach(archiveDirectoryId -> {
|
if (Func.isNotEmpty(archiveDirectoryId)) {
|
DncArchiveDirectory directory = (DncArchiveDirectory) this.directoryService.getById(archiveDirectoryId);
|
if (directory == null) {
|
throw new ServiceException(MessageUtils.message("dnc.archive.directory.is.not.exists", new Object[0]));
|
}
|
}
|
if (Func.isNotEmpty(fileAddVOList)) {
|
List<DncArchiveDirectoryFileAddVO> workstationList = fileAddVOList.stream().filter(s -> {
|
return DncEnums.FileOwnership.WORKSTATION.getCode().equals(s.getFileOwnership());
|
}).collect(Collectors.toList());
|
if (Func.isNotEmpty(workstationList)) {
|
List<Long> workstationFileIds = workstationList.stream().map((v0) -> {
|
return v0.getWorkstationFileId();
|
}).distinct().collect(Collectors.toList());
|
fileList.addAll(addFile(Long.valueOf(Long.parseLong(archiveDirectoryId)), workstationList));
|
if (Func.isNotEmpty(workstationFileIds)) {
|
this.transferDirectoryFileService.update(Wrappers.<TransferDirectoryFile>lambdaUpdate()
|
.set(TransferDirectoryFile::getWhetherArchive, DncEnums.WhetherArchive.not_Archive.getCode())
|
.in(TransferDirectoryFile::getId, workstationFileIds));
|
/*
|
this.transferDirectoryFileService.update((Wrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().set((v0) -> {
|
return v0.getWhetherArchive();
|
}, DncEnums.WhetherArchive.not_Archive.getCode())).in((v0) -> {
|
return v0.getId();
|
}, workstationFileIds));*/
|
}
|
}
|
List<DncArchiveDirectoryFileAddVO> factoryList = fileAddVOList.stream().filter(s2 -> {
|
return DncEnums.FileOwnership.FACTORY.getCode().equals(s2.getFileOwnership());
|
}).collect(Collectors.toList());
|
if (Func.isNotEmpty(factoryList)) {
|
List<Long> factoryIds = factoryList.stream().map((v0) -> {
|
return v0.getWorkstationFileId();
|
}).distinct().collect(Collectors.toList());
|
fileList.addAll(addFile(Long.valueOf(Long.parseLong(archiveDirectoryId)), factoryList));
|
if (Func.isNotEmpty(factoryIds)) {
|
this.factoryFileService.update(Wrappers.<DncFactoryFile>lambdaUpdate().set(DncFactoryFile::getWhetherArchive, DncEnums.WhetherArchive.not_Archive.getCode()).in(DncFactoryFile::getId, factoryIds));
|
/*
|
this.factoryFileService.update((Wrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().set((v0) -> {
|
return v0.getWhetherArchive();
|
}, DncEnums.WhetherArchive.not_Archive.getCode())).in((v0) -> {
|
return v0.getId();
|
}, factoryIds));*/
|
}
|
}
|
}
|
});
|
if (Func.isNotEmpty(fileList)) {
|
saveBatch(fileList);
|
}
|
return archiveFileAddVOS;
|
}
|
|
private List<DncArchiveDirectoryFile> addFile(Long archiveDirectoryId, List<DncArchiveDirectoryFileAddVO> list) {
|
return list.stream().map(addVO -> {
|
DncArchiveDirectoryFile addFile = new DncArchiveDirectoryFile();
|
Long workstationId = addVO.getWorkstationId();
|
String filename = addVO.getFilename();
|
DncArchiveDirectoryFile directoryFile = verifyFileName(filename, workstationId, archiveDirectoryId);
|
String contentMd5 = addVO.getContentMd5();
|
if (Func.isNull(directoryFile)) {
|
addFile.setVersion(CommonConstant.VERSION_NUM);
|
addFile.setOriginalFilename(addVO.getOriginalFilename()).setIsCurrent(DncEnums.CurrentVersion.YES.getCode()).setFilename(addVO.getFilename()).setContentLength(addVO.getContentLength()).setContentMd5(contentMd5).setContentType(addVO.getContentType()).setObjectKey(addVO.getObjectKey()).setSuffix(addVO.getSuffix()).setLink(addVO.getLink()).setWorkstationFileId(addVO.getWorkstationFileId()).setWorkstationId(addVO.getWorkstationId()).setArchiveDirectoryId(archiveDirectoryId);
|
} else if (!contentMd5.equals(directoryFile.getContentMd5())) {
|
directoryFile.setIsCurrent(DncEnums.CurrentVersion.NO.getCode());
|
updateById(directoryFile);
|
addFile.setVersion(Integer.valueOf((directoryFile.getVersion() != null ? directoryFile.getVersion() : CommonConstant.VERSION_NUM).intValue() + CommonConstant.VERSION_NUM.intValue()));
|
addFile.setOriginalFilename(addVO.getOriginalFilename()).setIsCurrent(DncEnums.CurrentVersion.YES.getCode()).setFilename(addVO.getFilename()).setContentLength(addVO.getContentLength()).setContentMd5(contentMd5).setContentType(addVO.getContentType()).setObjectKey(addVO.getObjectKey()).setSuffix(addVO.getSuffix()).setLink(addVO.getLink()).setWorkstationFileId(addVO.getWorkstationFileId()).setWorkstationId(addVO.getWorkstationId()).setArchiveDirectoryId(archiveDirectoryId);
|
} else {
|
return null;
|
}
|
return addFile;
|
}).filter((v0) -> {
|
return Func.isNotEmpty(v0);
|
}).collect(Collectors.toList());
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncArchiveDirectoryFileService
|
public DncArchiveDirectoryFile verifyFileName(String fileName, Long workstationId, Long archiveDirectoryId) {
|
return (DncArchiveDirectoryFile)getOne(Wrappers.<DncArchiveDirectoryFile>lambdaQuery()
|
.eq(DncArchiveDirectoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())
|
.eq(DncArchiveDirectoryFile::getFilename, fileName)
|
.eq(DncArchiveDirectoryFile::getWorkstationId, workstationId)
|
.eq(DncArchiveDirectoryFile::getArchiveDirectoryId, archiveDirectoryId));
|
/*
|
return (DncArchiveDirectoryFile) getOne((Wrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getIsCurrent();
|
}, DncEnums.CurrentVersion.YES.getCode())).eq((v0) -> {
|
return v0.getFilename();
|
}, fileName)).eq((v0) -> {
|
return v0.getWorkstationId();
|
}, workstationId)).eq((v0) -> {
|
return v0.getArchiveDirectoryId();
|
}, archiveDirectoryId));*/
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncArchiveDirectoryFileService
|
public boolean checkArchiveFile(VerifyArchiveFileVO verifyArchiveFile) {
|
List<DncArchiveDirectoryFile> list = new ArrayList<>();
|
List<String> archiveDirectoryIds = verifyArchiveFile.getArchiveDirectoryIds();
|
List<VerifyArchiveFileCheckVO> voList = verifyArchiveFile.getVoList();
|
for (String archiveDirectoryId : archiveDirectoryIds) {
|
voList.forEach(file -> {
|
String fileName = file.getFilename();
|
String workstationId = file.getWorkstationId();
|
DncArchiveDirectoryFile directoryFile = verifyFileName(fileName, Long.valueOf(Long.parseLong(workstationId)), Long.valueOf(Long.parseLong(archiveDirectoryId)));
|
if (directoryFile != null) {
|
if (Func.isNotBlank(file.getObjectKey())) {
|
boolean result = this.obsFileService.verifyFileContent(file.getObjectKey(), directoryFile.getContentMd5());
|
if (result) {
|
list.add(directoryFile);
|
}
|
} else if (!directoryFile.getContentMd5().equals(file.getContentMd5())) {
|
list.add(directoryFile);
|
}
|
}
|
});
|
}
|
return list.size() > 0;
|
}
|
}
|