diff --git a/src/main/java/com/spring/modules/base/service/Impl/BaseServiceImpl.java b/src/main/java/com/spring/modules/base/service/Impl/BaseServiceImpl.java index e0c74bc2..ead47830 100644 --- a/src/main/java/com/spring/modules/base/service/Impl/BaseServiceImpl.java +++ b/src/main/java/com/spring/modules/base/service/Impl/BaseServiceImpl.java @@ -264,6 +264,8 @@ public class BaseServiceImpl implements BaseService { ossEntity.setOrderRef1(inData.getOrderRef1()); ossEntity.setOrderRef2(inData.getOrderRef2()); ossEntity.setOrderRef3(inData.getOrderRef3()); + ossEntity.setFileNo(inData.getFileNo()); + ossEntity.setRev(inData.getRev()); ossEntity.setFileRemark(inData.getFileRemark()); sysOssService.save(ossEntity); return ossEntity; @@ -315,6 +317,8 @@ public class BaseServiceImpl implements BaseService { ossEntity.setOrderRef1(inData.getOrderRef1()); ossEntity.setOrderRef2(inData.getOrderRef2()); ossEntity.setOrderRef3(inData.getOrderRef3()); + ossEntity.setFileNo(inData.getFileNo()); + ossEntity.setRev(inData.getRev()); ossEntity.setFileRemark(inData.getFileRemark()); sysOssService.save(ossEntity); ossEntityList.add(ossEntity); diff --git a/src/main/java/com/spring/modules/oss/controller/OssController.java b/src/main/java/com/spring/modules/oss/controller/OssController.java index b94e3661..302e5946 100644 --- a/src/main/java/com/spring/modules/oss/controller/OssController.java +++ b/src/main/java/com/spring/modules/oss/controller/OssController.java @@ -9,7 +9,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; import java.util.List; @RestController @@ -25,6 +24,14 @@ public class OssController { return R.ok("操作成功"); } + @PostMapping("/upgrade") + public R upgrade(@RequestParam("file") MultipartFile file, + @RequestParam("sourceId") Long sourceId, + @RequestParam(value = "fileRemark", required = false) String fileRemark){ + sysOssService.upgradeOssFile(file, sourceId, fileRemark); + return R.ok("操作成功"); + } + @PostMapping("/remove") public R removeOssFile(@RequestBody List ids){ sysOssService.removeOssFile(ids); diff --git a/src/main/java/com/spring/modules/oss/entity/SysOssEntity.java b/src/main/java/com/spring/modules/oss/entity/SysOssEntity.java index 81edb90c..1f190d0f 100644 --- a/src/main/java/com/spring/modules/oss/entity/SysOssEntity.java +++ b/src/main/java/com/spring/modules/oss/entity/SysOssEntity.java @@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import org.apache.ibatis.type.Alias; +import org.springframework.format.annotation.DateTimeFormat; +import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.util.Date; @@ -76,6 +78,23 @@ public class SysOssEntity implements Serializable { * 文件备注 */ private String fileRemark; + + /** + * 文件编码 + */ + private String fileNo; + + /** + * 版本号 + */ + private Integer rev; + + /** + * 失效时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date invalidationTime; /** * 集合 */ diff --git a/src/main/java/com/spring/modules/oss/service/SysOssService.java b/src/main/java/com/spring/modules/oss/service/SysOssService.java index 43a90616..870f1447 100644 --- a/src/main/java/com/spring/modules/oss/service/SysOssService.java +++ b/src/main/java/com/spring/modules/oss/service/SysOssService.java @@ -9,7 +9,6 @@ import com.spring.modules.oss.vo.SysOssEntityData; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.util.List; import java.util.Map; @@ -50,4 +49,6 @@ public interface SysOssService extends IService { List queryOssFile(SysOssEntity oss); void previewOssFileById(Integer id,HttpServletResponse response); + + void upgradeOssFile(MultipartFile file, Long sourceId, String fileRemark); } diff --git a/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java b/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java index 9120166d..40f56aad 100644 --- a/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java +++ b/src/main/java/com/spring/modules/oss/service/impl/SysOssServiceImpl.java @@ -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 impl @Override public PageUtils queryPage(Map 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 pageData = this.baseMapper.queryPage(new Page(page, limit), params); @@ -72,43 +62,34 @@ public class SysOssServiceImpl extends ServiceImpl impl @Override @Transactional public void upload(List 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 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 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); + } } diff --git a/src/main/java/com/spring/modules/sys/entity/GetParamInData.java b/src/main/java/com/spring/modules/sys/entity/GetParamInData.java index 611c9e8c..2fe5f1bd 100644 --- a/src/main/java/com/spring/modules/sys/entity/GetParamInData.java +++ b/src/main/java/com/spring/modules/sys/entity/GetParamInData.java @@ -18,6 +18,8 @@ public class GetParamInData { private String orderRef1; private String orderRef2; private String orderRef3; + private String fileNo; + private Integer rev; private String projectId; private String fileRemark; // 文件备注 @@ -57,6 +59,22 @@ public class GetParamInData { this.orderRef3 = orderRef3; } + public String getFileNo() { + return fileNo; + } + + public void setFileNo(String fileNo) { + this.fileNo = fileNo; + } + + public Integer getRev() { + return rev; + } + + public void setRev(Integer rev) { + this.rev = rev; + } + public String getNum() { return num; }