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 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 getArFilePage(ArchiveDirectoryFileSearchVO searchVO, Query query) { List 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 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 userMap = this.userService.list().stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, Function.identity())); Map workstationMap = this.workstationService.list(Wrappers.lambdaQuery().eq(Workstation::getStatus, CommonConstant.ENABLE)).stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, Function.identity())); List finalSuffixs = suffixs; String finalNoSuffix = noSuffix; IPage page = page(Condition.getPage(query), Wrappers.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 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 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 fileAddVOList = archiveFileAddVOS.getFileAddVOList(); List archiveDirectoryIds = archiveFileAddVOS.getArchiveDirectoryIds(); List 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 workstationList = fileAddVOList.stream().filter(s -> { return DncEnums.FileOwnership.WORKSTATION.getCode().equals(s.getFileOwnership()); }).collect(Collectors.toList()); if (Func.isNotEmpty(workstationList)) { List 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.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 factoryList = fileAddVOList.stream().filter(s2 -> { return DncEnums.FileOwnership.FACTORY.getCode().equals(s2.getFileOwnership()); }).collect(Collectors.toList()); if (Func.isNotEmpty(factoryList)) { List 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.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 addFile(Long archiveDirectoryId, List 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.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 list = new ArrayList<>(); List archiveDirectoryIds = verifyArchiveFile.getArchiveDirectoryIds(); List 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; } }