|
|
|
@ -16,19 +16,14 @@ import org.springframework.beans.factory.annotation.Value; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.FileCopyUtils; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
import javax.servlet.ServletOutputStream; |
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
import java.io.*; |
|
|
|
import java.net.URLEncoder; |
|
|
|
import java.nio.file.Files; |
|
|
|
import java.nio.file.Path; |
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.util.*; |
|
|
|
import java.util.zip.ZipEntry; |
|
|
|
import java.util.zip.ZipOutputStream; |
|
|
|
|
|
|
|
|
|
|
|
@Service("sysOssService") |
|
|
|
@ -36,11 +31,6 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageUtils queryPage(Map<String, Object> params) { |
|
|
|
String fileName = (String) params.get("fileName"); |
|
|
|
String fileType = (String) params.get("fileType"); |
|
|
|
String orderRef1 = (String) params.get("orderRef1"); |
|
|
|
String orderRef2 = (String) params.get("orderRef2"); |
|
|
|
String orderRef3 = (String) params.get("orderRef3"); |
|
|
|
long page = Long.valueOf(params.get("page").toString()); |
|
|
|
long limit = Long.valueOf(params.get("limit").toString()); |
|
|
|
IPage<OssVo> pageData = this.baseMapper.queryPage(new Page<OssVo>(page, limit), params); |
|
|
|
@ -72,43 +62,34 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void upload(List<MultipartFile> files, SysOssEntity oss) { |
|
|
|
// 上传文件 |
|
|
|
boolean hasVersionMeta = StringUtils.isNotBlank(oss.getFileNo()) || oss.getRev() != null; |
|
|
|
if (hasVersionMeta) { |
|
|
|
validateFileVersionParam(oss); |
|
|
|
} |
|
|
|
Date date = new Date(); |
|
|
|
for (MultipartFile file : files) { |
|
|
|
String fileName = file.getOriginalFilename(); |
|
|
|
if (StringUtils.isEmpty(fileName)) { |
|
|
|
throw new IllegalArgumentException("文件名不能为空"); |
|
|
|
} |
|
|
|
String[] strings = fileName.split("\\."); |
|
|
|
String suffix = strings[strings.length - 1]; |
|
|
|
// UUID生成文件名 |
|
|
|
String uuid = java.util.UUID.randomUUID().toString().replaceAll("-", ""); |
|
|
|
String newFileName = uuid +"."+ suffix; |
|
|
|
// 根目录 D:\plm-file 加 当前年月日 |
|
|
|
String rootPath = filePath; |
|
|
|
String yearMonth = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); |
|
|
|
String path = rootPath + "\\" + yearMonth; |
|
|
|
File fileDir = new File(path); |
|
|
|
if (!fileDir.exists()) { |
|
|
|
fileDir.mkdirs(); |
|
|
|
if (hasVersionMeta) { |
|
|
|
long sameVersionCount = lambdaQuery() |
|
|
|
.eq(SysOssEntity::getOrderRef1, oss.getOrderRef1()) |
|
|
|
.eq(SysOssEntity::getOrderRef2, oss.getOrderRef2()) |
|
|
|
.eq(StringUtils.isNotEmpty(oss.getOrderRef3()), SysOssEntity::getOrderRef3, oss.getOrderRef3()) |
|
|
|
.eq(SysOssEntity::getFileNo, oss.getFileNo()) |
|
|
|
.eq(SysOssEntity::getRev, oss.getRev()) |
|
|
|
.count(); |
|
|
|
if (sameVersionCount > 0) { |
|
|
|
throw new IllegalArgumentException("当前文件编码和版本号已存在,请修改后重试"); |
|
|
|
} |
|
|
|
} |
|
|
|
// 保存文件 |
|
|
|
File targetFile = new File(path, newFileName); |
|
|
|
try { |
|
|
|
file.transferTo(targetFile); |
|
|
|
} catch (IOException e) { |
|
|
|
throw new RuntimeException("上传文件失败"); |
|
|
|
} |
|
|
|
// 保存文件信息 |
|
|
|
oss.setFileName(fileName); |
|
|
|
oss.setUrl(path + "\\" + newFileName); |
|
|
|
oss.setNewFileName(newFileName); |
|
|
|
oss.setCreateDate(date); |
|
|
|
|
|
|
|
SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); |
|
|
|
oss.setCreateBy(sysUserEntity.getUsername()); |
|
|
|
oss.setFileType(suffix); |
|
|
|
this.save(oss); |
|
|
|
SysOssEntity saveEntity = new SysOssEntity(); |
|
|
|
saveEntity.setOrderRef1(oss.getOrderRef1()); |
|
|
|
saveEntity.setOrderRef2(oss.getOrderRef2()); |
|
|
|
saveEntity.setOrderRef3(oss.getOrderRef3()); |
|
|
|
saveEntity.setFileTypeCode(oss.getFileTypeCode()); |
|
|
|
saveEntity.setFileRemark(oss.getFileRemark()); |
|
|
|
saveEntity.setFileNo(oss.getFileNo()); |
|
|
|
saveEntity.setRev(oss.getRev()); |
|
|
|
saveEntity.setInvalidationTime(oss.getInvalidationTime()); |
|
|
|
saveUploadedFile(file, saveEntity, date); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -132,9 +113,58 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl |
|
|
|
.eq(SysOssEntity::getOrderRef1, oss.getOrderRef1()) |
|
|
|
.eq(SysOssEntity::getOrderRef2, oss.getOrderRef2()) |
|
|
|
.eq(StringUtils.isNotEmpty(oss.getOrderRef3()), SysOssEntity::getOrderRef3, oss.getOrderRef3()) |
|
|
|
.orderByDesc(SysOssEntity::getCreateDate) |
|
|
|
.orderByDesc(SysOssEntity::getId) |
|
|
|
.list(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark) { |
|
|
|
Assert.notNull(sourceId, "请先选择需要升版的文件"); |
|
|
|
if (file == null || file.isEmpty()) { |
|
|
|
throw new IllegalArgumentException("请选择需要上传的新版本文件"); |
|
|
|
} |
|
|
|
SysOssEntity source = this.getById(sourceId); |
|
|
|
if (source == null) { |
|
|
|
throw new IllegalArgumentException("源文件不存在,无法升版"); |
|
|
|
} |
|
|
|
if (source.getInvalidationTime() != null) { |
|
|
|
throw new IllegalArgumentException("当前文件已失效,请选择有效版本进行升版"); |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isBlank(source.getFileNo())) { |
|
|
|
source.setFileNo("TDS-" + source.getId()); |
|
|
|
} |
|
|
|
int currentRev = source.getRev() == null ? 1 : source.getRev(); |
|
|
|
source.setRev(currentRev); |
|
|
|
int nextRev = currentRev + 1; |
|
|
|
long sameVersionCount = lambdaQuery() |
|
|
|
.eq(SysOssEntity::getOrderRef1, source.getOrderRef1()) |
|
|
|
.eq(SysOssEntity::getOrderRef2, source.getOrderRef2()) |
|
|
|
.eq(SysOssEntity::getOrderRef3, source.getOrderRef3()) |
|
|
|
.eq(SysOssEntity::getFileNo, source.getFileNo()) |
|
|
|
.eq(SysOssEntity::getRev, nextRev) |
|
|
|
.count(); |
|
|
|
if (sameVersionCount > 0) { |
|
|
|
throw new IllegalArgumentException("新版本号已存在,请刷新后重试"); |
|
|
|
} |
|
|
|
|
|
|
|
Date now = new Date(); |
|
|
|
source.setInvalidationTime(now); |
|
|
|
this.updateById(source); |
|
|
|
|
|
|
|
SysOssEntity newVersion = new SysOssEntity(); |
|
|
|
newVersion.setOrderRef1(source.getOrderRef1()); |
|
|
|
newVersion.setOrderRef2(source.getOrderRef2()); |
|
|
|
newVersion.setOrderRef3(source.getOrderRef3()); |
|
|
|
newVersion.setFileTypeCode(source.getFileTypeCode()); |
|
|
|
newVersion.setFileNo(source.getFileNo()); |
|
|
|
newVersion.setRev(nextRev); |
|
|
|
newVersion.setFileRemark(StringUtils.isNotBlank(fileRemark) ? fileRemark : source.getFileRemark()); |
|
|
|
saveUploadedFile(file, newVersion, now); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void previewOssFileById(Integer id, HttpServletResponse response) { |
|
|
|
SysOssEntity oss = this.getById(id); |
|
|
|
@ -180,4 +210,46 @@ public class SysOssServiceImpl extends ServiceImpl<SysOssDao, SysOssEntity> impl |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void validateFileVersionParam(SysOssEntity oss) { |
|
|
|
if (StringUtils.isBlank(oss.getFileNo())) { |
|
|
|
throw new IllegalArgumentException("文件编码不能为空"); |
|
|
|
} |
|
|
|
if (oss.getRev() == null || oss.getRev() <= 0) { |
|
|
|
throw new IllegalArgumentException("版本号必须大于0"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void saveUploadedFile(MultipartFile file, SysOssEntity oss, Date createDate) { |
|
|
|
String fileName = file.getOriginalFilename(); |
|
|
|
if (StringUtils.isEmpty(fileName)) { |
|
|
|
throw new IllegalArgumentException("文件名不能为空"); |
|
|
|
} |
|
|
|
String[] strings = fileName.split("\\."); |
|
|
|
String suffix = strings[strings.length - 1]; |
|
|
|
String uuid = java.util.UUID.randomUUID().toString().replaceAll("-", ""); |
|
|
|
String newFileName = uuid + "." + suffix; |
|
|
|
String yearMonth = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); |
|
|
|
String path = filePath + "\\" + yearMonth; |
|
|
|
File fileDir = new File(path); |
|
|
|
if (!fileDir.exists()) { |
|
|
|
fileDir.mkdirs(); |
|
|
|
} |
|
|
|
File targetFile = new File(path, newFileName); |
|
|
|
try { |
|
|
|
file.transferTo(targetFile); |
|
|
|
} catch (IOException e) { |
|
|
|
throw new RuntimeException("上传文件失败"); |
|
|
|
} |
|
|
|
|
|
|
|
oss.setFileName(fileName); |
|
|
|
oss.setUrl(path + "\\" + newFileName); |
|
|
|
oss.setNewFileName(newFileName); |
|
|
|
oss.setCreateDate(createDate); |
|
|
|
SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); |
|
|
|
oss.setCreateBy(sysUserEntity.getUsername()); |
|
|
|
oss.setFileType(suffix); |
|
|
|
oss.setFileSuffix(suffix); |
|
|
|
this.save(oss); |
|
|
|
} |
|
|
|
} |