package com.qianwen.smartman.modules.dnc.service.impl;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
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.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.oss.model.OssFile;
|
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.utils.MessageUtils;
|
import com.qianwen.smartman.modules.dnc.convert.DncFactoryFileConvert;
|
import com.qianwen.smartman.modules.dnc.dto.DncOperationLogDto;
|
import com.qianwen.smartman.modules.dnc.entity.DncFactoryFile;
|
import com.qianwen.smartman.modules.dnc.enums.DncEnums;
|
import com.qianwen.smartman.modules.dnc.mapper.DncFactoryFileMapper;
|
import com.qianwen.smartman.modules.dnc.service.IDncFactoryFileService;
|
import com.qianwen.smartman.modules.dnc.service.IDncOperationLogService;
|
import com.qianwen.smartman.modules.dnc.service.IObsFileService;
|
import com.qianwen.smartman.modules.dnc.vo.DncFactoryFileVO;
|
import com.qianwen.smartman.modules.dnc.vo.FileHistoryVO;
|
import com.qianwen.smartman.modules.dnc.vo.FileVersionSwitchVO;
|
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/DncFactoryFileServiceImpl.class */
|
public class DncFactoryFileServiceImpl extends BaseServiceImpl<DncFactoryFileMapper, DncFactoryFile> implements IDncFactoryFileService {
|
private final IUserService userService;
|
private final IDncOperationLogService dncOperationLogService;
|
private final IObsFileService obsFileService;
|
private final OssBuilder ossBuilder;
|
|
|
public DncFactoryFileServiceImpl(final IUserService userService, final IDncOperationLogService dncOperationLogService, final IObsFileService obsFileService, final OssBuilder ossBuilder) {
|
this.userService = userService;
|
this.dncOperationLogService = dncOperationLogService;
|
this.obsFileService = obsFileService;
|
this.ossBuilder = ossBuilder;
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncFactoryFileService
|
public DncFactoryFileVO addFactoryFile(DncFactoryFileVO dncFactoryFileVO) {
|
DncFactoryFile dncFactoryFile = DncFactoryFileConvert.INSTANCE.convert(dncFactoryFileVO);
|
String filename = dncFactoryFileVO.getFilename();
|
|
DncFactoryFile oldFile = getOne(Wrappers.<DncFactoryFile>lambdaQuery()
|
.eq(DncFactoryFile::getFilename, filename)
|
.eq(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode()));
|
/*
|
DncFactoryFile oldFile = (DncFactoryFile) getOne((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getFilename();
|
}, filename)).eq((v0) -> {
|
return v0.getIsCurrent();
|
}, DncEnums.CurrentVersion.YES.getCode()));*/
|
OssFile ossFile = this.ossBuilder.template().statFile(dncFactoryFile.getObjectKey());
|
String hash = ossFile.getHash();
|
if (Func.isNull(oldFile)) {
|
dncFactoryFile.setContentMd5(hash);
|
dncFactoryFile.setVersion(CommonConstant.VERSION_NUM);
|
saveFactoryFile(dncFactoryFileVO, dncFactoryFile, filename);
|
} else if (!hash.equals(oldFile.getContentMd5())) {
|
update(Wrappers.<DncFactoryFile>lambdaUpdate()
|
.eq(DncFactoryFile::getFilename, filename)
|
.set(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.NO.getCode()));
|
/*
|
update((Wrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().eq((v0) -> {
|
return v0.getFilename();
|
}, filename)).set((v0) -> {
|
return v0.getIsCurrent();
|
}, DncEnums.CurrentVersion.NO.getCode()));*/
|
dncFactoryFile.setContentMd5(hash);
|
dncFactoryFile.setVersion(Integer.valueOf((oldFile.getVersion() != null ? oldFile.getVersion() : CommonConstant.VERSION_NUM).intValue() + CommonConstant.VERSION_NUM.intValue()));
|
saveFactoryFile(dncFactoryFileVO, dncFactoryFile, filename);
|
}
|
return dncFactoryFileVO;
|
}
|
|
private void saveFactoryFile(DncFactoryFileVO dncFactoryFileVO, DncFactoryFile dncFactoryFile, String filename) {
|
dncFactoryFile.setIsCurrent(DncEnums.CurrentVersion.YES.getCode());
|
save(dncFactoryFile);
|
DncOperationLogDto dncOperationLogDto = new DncOperationLogDto();
|
dncOperationLogDto.setFileId(dncFactoryFile.getId()).setFileName(filename).setObjectKey(dncFactoryFileVO.getObjectKey()).setSuffix(dncFactoryFileVO.getSuffix()).setOperatorId(AuthUtil.getUserId()).setOperatorName(AuthUtil.getUserAccount()).setOperationType(DncEnums.LogOperationType.UPLOAD.getCode()).setOperationResponse(CommonConstant.VERSION_NUM).setOperationTime(new Date()).setSourceType(DncEnums.LogFileSourceType.LOCAL_FILE.getCode()).setTargetType(DncEnums.LogFileSourceType.STATION_FILE.getCode()).setLink(dncFactoryFileVO.getLink()).setFileLocation(DncEnums.FileLocation.ETHERNET.getCode()).setVersion(dncFactoryFile.getVersion());
|
this.dncOperationLogService.insertLog(dncOperationLogDto);
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncFactoryFileService
|
public void writeFileLog(DncFactoryFile dncFactoryFile) {
|
DncOperationLogDto dncOperationLogDto = new DncOperationLogDto();
|
dncOperationLogDto.setFileId(dncFactoryFile.getId()).setFileName(dncFactoryFile.getFilename()).setObjectKey(dncFactoryFile.getObjectKey()).setSuffix(dncFactoryFile.getSuffix()).setOperatorId(AuthUtil.getUserId()).setOperatorName(AuthUtil.getUserAccount()).setOperationType(DncEnums.LogOperationType.DELETE.getCode()).setOperationResponse(CommonConstant.VERSION_NUM).setOperationTime(new Date()).setSourceType(DncEnums.LogFileSourceType.STATION_FILE.getCode()).setTargetType(DncEnums.LogFileSourceType.STATION_FILE.getCode()).setLink(dncFactoryFile.getLink()).setFileLocation(DncEnums.FileLocation.ETHERNET.getCode()).setVersion(dncFactoryFile.getVersion());
|
this.dncOperationLogService.insertLog(dncOperationLogDto);
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncFactoryFileService
|
public Boolean verifyFileName(String fileName, String objectKey) {
|
DncFactoryFile one = getOne(Wrappers.<DncFactoryFile>lambdaQuery().eq(DncFactoryFile::getFilename, fileName)
|
.eq(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode()));
|
/*
|
DncFactoryFile one = (DncFactoryFile) getOne((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getFilename();
|
}, fileName)).eq((v0) -> {
|
return v0.getIsCurrent();
|
}, DncEnums.CurrentVersion.YES.getCode()));*/
|
if (one != null) {
|
boolean result = this.obsFileService.verifyFileContent(objectKey, one.getContentMd5());
|
if (result) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncFactoryFileService
|
public IPage<DncFactoryFileVO> listPages(String keywords, Query query) {
|
Map<Long, User> userMap = this.userService.list().stream().collect(Collectors.toMap((v0) -> {
|
return v0.getId();
|
}, Function.identity()));
|
|
IPage<DncFactoryFile> pages = page(Condition.getPage(query), Wrappers.<DncFactoryFile>lambdaQuery()
|
.eq(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode())
|
.and(Func.isNotEmpty(keywords), i -> i.likeRight(DncFactoryFile::getFilename, keywords).or().likeRight(DncFactoryFile::getSuffix, keywords))
|
|
.orderByDesc(DncFactoryFile::getCreateTime));
|
/*
|
IPage<DncFactoryFile> pages = page(Condition.getPage(query), (Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getIsCurrent();
|
}, DncEnums.CurrentVersion.YES.getCode())).and(Func.isNotEmpty(keywords), i -> {
|
LambdaQueryWrapper lambdaQueryWrapper = (LambdaQueryWrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) i.likeRight((v0) -> {
|
return v0.getFilename();
|
}, keywords)).or()).likeRight((v0) -> {
|
return v0.getSuffix();
|
}, keywords);
|
}).orderByDesc((v0) -> {
|
return v0.getCreateTime();
|
}));*/
|
IPage<DncFactoryFileVO> convert = DncFactoryFileConvert.INSTANCE.convert(pages);
|
convert.getRecords().forEach(s -> {
|
User upUser = (User) userMap.get(s.getUpdateUser());
|
User crUser = (User) userMap.get(s.getCreateUser());
|
s.setUpdateUserName(upUser != null ? upUser.getAccount() : "");
|
s.setCreateUserName(crUser != null ? crUser.getAccount() : "");
|
s.setVersionDesc(Func.isNotEmpty(s.getVersion()) ? s.getVersion() + CommonConstant.FILE_SUFFIX : "");
|
});
|
return convert;
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncFactoryFileService
|
public List<FileHistoryVO> getFactoryFileHistory(String fileId) {
|
Map<Long, User> userMap = this.userService.list().stream().collect(Collectors.toMap((v0) -> {
|
return v0.getId();
|
}, Function.identity()));
|
DncFactoryFile dncFactoryFile = (DncFactoryFile) getById(fileId);
|
if (dncFactoryFile == null) {
|
throw new ServiceException(MessageUtils.message("dnc.file.is.not.exists", new Object[0]));
|
}
|
List<DncFactoryFile> list = list(Wrappers.<DncFactoryFile>lambdaQuery()
|
.eq(DncFactoryFile::getFilename, dncFactoryFile.getFilename())
|
.orderByDesc(DncFactoryFile::getVersion));
|
/*
|
List<DncFactoryFile> list = list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getFilename();
|
}, dncFactoryFile.getFilename())).orderByDesc((v0) -> {
|
return v0.getVersion();
|
}));*/
|
if (Func.isNotEmpty(list)) {
|
return list.stream().map(s -> {
|
return FileHistoryVO.builder().id(s.getId()).createTime(s.getCreateTime()).filename(s.getFilename()).objectKey(s.getObjectKey()).isCurrent(s.getIsCurrent()).link(s.getLink()).contentMd5(s.getContentMd5()).contentLength(s.getContentLength()).contentType(s.getContentType()).suffix(s.getSuffix()).createUser(((User) userMap.get(s.getCreateUser())).getAccount()).updateUser(((User) userMap.get(s.getUpdateUser())).getAccount()).updateTime(s.getUpdateTime()).version(s.getVersion() != null ? String.valueOf(s.getVersion()) : "1").versionDesc(s.getVersion() != null ? s.getVersion() + CommonConstant.FILE_SUFFIX : CommonConstant.VERSION_NUM + CommonConstant.FILE_SUFFIX).build();
|
}).collect(Collectors.toList());
|
}
|
return new ArrayList<>();
|
}
|
|
@Override // org.springblade.modules.dnc.service.IDncFactoryFileService
|
@Transactional(rollbackFor = {Exception.class})
|
public Boolean switchVersion(FileVersionSwitchVO fileVersionSwitchVO) {
|
boolean result = false;
|
if (Func.isNotBlank(fileVersionSwitchVO.getSwitchFileId()) && Func.isNotBlank(fileVersionSwitchVO.getCurrentFileId())) {
|
DncFactoryFile file = (DncFactoryFile) 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.<DncFactoryFile>lambdaUpdate().set(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.YES.getCode()).eq(DncFactoryFile::getId, fileVersionSwitchVO.getSwitchFileId()));
|
boolean updateCurrent = update(Wrappers.<DncFactoryFile>lambdaUpdate().set(DncFactoryFile::getIsCurrent, DncEnums.CurrentVersion.NO.getCode()).eq(DncFactoryFile::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);
|
}
|
}
|