版本管理 和 版本文件上传

This commit is contained in:
2024-08-28 15:45:46 +08:00
parent 09c6cd178a
commit 17fc234975
15 changed files with 129 additions and 27 deletions

View File

@@ -40,6 +40,14 @@ public class TbVersionController {
return new ResponseEntity<>(HttpStatus.NO_CONTENT); return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} }
@PutMapping("upSel")
@ApiOperation("修改当前选中")
public ResponseEntity<Object> updateSel(@Validated @RequestBody TbVersion resources){
tbVersionService.updateSel(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@DeleteMapping @DeleteMapping
@ApiOperation("删除版本") @ApiOperation("删除版本")
public ResponseEntity<Object> deleteTbVersion(@RequestBody Integer[] ids) { public ResponseEntity<Object> deleteTbVersion(@RequestBody Integer[] ids) {

View File

@@ -14,7 +14,7 @@ public class TbVersionDto implements Serializable {
private Integer id; private Integer id;
/** LDBL_APP;WX; */ /** PC;APP; */
private String source; private String source;
/** ios;android; */ /** ios;android; */
@@ -22,9 +22,12 @@ public class TbVersionDto implements Serializable {
/** 版本号 */ /** 版本号 */
private String version; private String version;
/** 下载地址 */
private String url;
/** 0不更新1更新 */ /** 是否强制更新 0否 1 */
private Integer isUp; private Integer isUp;
private Integer sel;
/** 更新提示内容 */ /** 更新提示内容 */
private String message; private String message;

View File

@@ -12,7 +12,7 @@ import lombok.Data;
public class TbVersionQueryCriteria{ public class TbVersionQueryCriteria{
@Query @Query
/** LDBL-APP;WX; */ /** PCAPP; */
private String source; private String source;
@Query @Query
/** ios;android; */ /** ios;android; */
@@ -21,7 +21,7 @@ public class TbVersionQueryCriteria{
/** 版本号 */ /** 版本号 */
private String version; private String version;
@Query @Query
/** 0不更新1更新 */ /** 是否强制更新 0否 1*/
private Integer isUp; private Integer isUp;
private Integer pageSize; private Integer pageSize;

View File

@@ -19,7 +19,7 @@ public class TbVersion implements Serializable {
private Integer id; private Integer id;
@Column(name = "`source`") @Column(name = "`source`")
@ApiModelProperty(value = "LDBL-APP;WX;") @ApiModelProperty(value = "PCAPP;")
private String source; private String source;
@Column(name = "`type`") @Column(name = "`type`")
@@ -30,10 +30,17 @@ public class TbVersion implements Serializable {
@ApiModelProperty(value = "版本号") @ApiModelProperty(value = "版本号")
private String version; private String version;
@Column(name = "`url`")
@ApiModelProperty(value = "下载地址")
private String url;
@Column(name = "`is_up`") @Column(name = "`is_up`")
@ApiModelProperty(value = "0不更新1更新") @ApiModelProperty(value = "是否强制更新 0否 1")
private Integer isUp; private Integer isUp;
@ApiModelProperty(value = "选中 0否 1")
private Integer sel;
@Column(name = "`message`") @Column(name = "`message`")
@ApiModelProperty(value = "更新提示内容") @ApiModelProperty(value = "更新提示内容")
private String message; private String message;

View File

@@ -4,6 +4,7 @@ import cn.ysk.cashier.pojo.TbVersion;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
/** /**
@@ -15,4 +16,15 @@ public interface TbVersionRepository extends JpaRepository<TbVersion, Integer>,
@Query("SELECT count(1) FROM TbVersion WHERE source = :source AND type =:type AND version =:version") @Query("SELECT count(1) FROM TbVersion WHERE source = :source AND type =:type AND version =:version")
int isExist(@Param("source") String source, @Param("type") String type, @Param("version") String version); int isExist(@Param("source") String source, @Param("type") String type, @Param("version") String version);
@Query("SELECT count(1) FROM TbVersion WHERE source = :source AND version =:version")
int isExist(@Param("source") String source, @Param("version") String version);
@Modifying
@Query("update TbVersion version set version.sel=CASE" +
" WHEN version.source=:source AND version.id=:id THEN 1 " +
" WHEN version.source=:source AND version.id!=:id THEN 0 " +
" ELSE version.sel END " +
" WHERE version.source = :source")
int updateSelBySource(@Param("source") String source, @Param("id") Integer id);
} }

View File

@@ -52,6 +52,8 @@ public interface TbVersionService {
*/ */
void update(TbVersion resources); void update(TbVersion resources);
void updateSel(TbVersion resources);
/** /**
* 多选删除 * 多选删除
* @param ids / * @param ids /

View File

@@ -7,10 +7,7 @@ import cn.ysk.cashier.mapper.TbVersionMapper;
import cn.ysk.cashier.pojo.TbVersion; import cn.ysk.cashier.pojo.TbVersion;
import cn.ysk.cashier.repository.TbVersionRepository; import cn.ysk.cashier.repository.TbVersionRepository;
import cn.ysk.cashier.service.TbVersionService; import cn.ysk.cashier.service.TbVersionService;
import cn.ysk.cashier.utils.PageUtil; import cn.ysk.cashier.utils.*;
import cn.ysk.cashier.utils.QueryHelp;
import cn.ysk.cashier.utils.RedisUtils;
import cn.ysk.cashier.utils.ValidationUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
@@ -61,17 +58,17 @@ public class TbVersionServiceImpl implements TbVersionService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public TbVersionDto create(TbVersion resources) { public TbVersionDto create(TbVersion resources) {
int exist = tbVersionRepository.isExist(resources.getSource(), resources.getType(), resources.getVersion()); int exist = tbVersionRepository.isExist(resources.getSource(), resources.getVersion());
if (exist > 0) { if (exist > 0) {
throw new BadRequestException("该版本已存在。"); throw new BadRequestException("该版本已存在。");
} }
resources.setCreatedAt(Instant.now().toEpochMilli()); resources.setCreatedAt(Instant.now().toEpochMilli());
TbVersionDto dto = tbVersionMapper.toDto(tbVersionRepository.save(resources)); TbVersionDto dto = tbVersionMapper.toDto(tbVersionRepository.save(resources));
if (dto.getIsUp() == 1) { // if (dto.getIsUp() == 1) {
//产品标识:型号:版本 // //产品标识:型号:版本
//LDBL_APP_VERSION:ios:version 存在即需要强制更新 // //VERSION:PC::version 存在即需要强制更新
redisUtils.set(dto.getSource() + "_VERSION:" + dto.getType() + ":" + dto.getVersion(), dto.getMessage()); // redisUtils.set(CacheKey.VERSION + dto.getSource() + ":" + dto.getVersion(), dto);
} // }
return dto; return dto;
} }
@@ -80,17 +77,23 @@ public class TbVersionServiceImpl implements TbVersionService {
public void update(TbVersion resources) { public void update(TbVersion resources) {
TbVersion tbVersion = tbVersionRepository.findById(resources.getId()).orElseGet(TbVersion::new); TbVersion tbVersion = tbVersionRepository.findById(resources.getId()).orElseGet(TbVersion::new);
ValidationUtil.isNull(tbVersion.getId(), "TbVersion", "id", resources.getId()); ValidationUtil.isNull(tbVersion.getId(), "TbVersion", "id", resources.getId());
redisUtils.del(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion()); // redisUtils.del(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion());
tbVersion.copy(resources); tbVersion.copy(resources);
tbVersion.setUpdatedAt(Instant.now().toEpochMilli()); tbVersion.setUpdatedAt(Instant.now().toEpochMilli());
tbVersionRepository.save(tbVersion); tbVersionRepository.save(tbVersion);
if (resources.getIsUp() == 1) { // if (resources.getIsUp() == 1) {
//产品标识:型号:版本 // //产品标识:型号:版本
//LDBL_APP_VERSION:ios:version 存在即需要强制更新 // //LDBL_APP_VERSION:ios:version 存在即需要强制更新
redisUtils.set(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion(), tbVersion.getMessage()); // redisUtils.set(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion(), tbVersion.getMessage());
} else { // } else {
redisUtils.del(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion()); // redisUtils.del(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion());
} // }
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateSel(TbVersion resources) {
tbVersionRepository.updateSelBySource(resources.getSource(),resources.getId());
} }
@Override @Override
@@ -99,9 +102,9 @@ public class TbVersionServiceImpl implements TbVersionService {
TbVersion tbVersion = tbVersionRepository.findById(id).orElseGet(TbVersion::new); TbVersion tbVersion = tbVersionRepository.findById(id).orElseGet(TbVersion::new);
ValidationUtil.isNull(tbVersion.getId(), "TbVersion", "id", id); ValidationUtil.isNull(tbVersion.getId(), "TbVersion", "id", id);
tbVersionRepository.deleteById(id); tbVersionRepository.deleteById(id);
if (tbVersion.getIsUp() == 1) { // if (tbVersion.getIsUp() == 1) {
redisUtils.del(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion()); // redisUtils.del(tbVersion.getSource() + "_VERSION:" + tbVersion.getType() + ":" + tbVersion.getVersion());
} // }
} }
} }

View File

@@ -89,6 +89,15 @@ public class QiniuController {
return new ResponseEntity<>(map,HttpStatus.OK); return new ResponseEntity<>(map,HttpStatus.OK);
} }
@ApiOperation("上传PC版本文件")
@AnonymousPostMapping("uploadVersionFile")
public ResponseEntity<Object> uploadVersionFile(@RequestParam MultipartFile file,@RequestParam String name){
String url = qiNiuService.uploadVersionFile(file,qiNiuService.findCloud(),name);
Map<String,Object> map = new HashMap<>(1);
map.put("data",url);
return new ResponseEntity<>(map,HttpStatus.OK);
}
// @Log("上传文件") // @Log("上传文件")
@ApiOperation("上传文件") @ApiOperation("上传文件")

View File

@@ -63,6 +63,8 @@ public interface QiNiuService {
*/ */
List<QiniuContent> queryAll(QiniuQueryCriteria criteria); List<QiniuContent> queryAll(QiniuQueryCriteria criteria);
String uploadVersionFile(MultipartFile file, CloudStorageConfig qiniuConfig,String fileName);
/** /**
* 上传文件 * 上传文件
* @param file 文件 * @param file 文件

View File

@@ -115,6 +115,22 @@ public class QiNiuServiceImpl implements QiNiuService {
return qiniuContentRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)); return qiniuContentRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder));
} }
@Override
@Transactional(rollbackFor = Exception.class)
public String uploadVersionFile(MultipartFile file, CloudStorageConfig qiniuConfig,String fileName) {
if(qiniuConfig== null){
throw new BadRequestException("请先添加相应配置,再操作");
}
// 构造一个带指定Zone对象的配置类
try {
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
return OSSFactory.build(qiniuConfig).uploadFileName(file.getBytes(), extension,fileName);
} catch (Exception e) {
throw new BadRequestException(e.getMessage());
}
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public QiniuContent upload(MultipartFile file, CloudStorageConfig qiniuConfig) { public QiniuContent upload(MultipartFile file, CloudStorageConfig qiniuConfig) {

View File

@@ -43,6 +43,25 @@ public abstract class AbstractCloudStorageService {
return path + "." + suffix; return path + "." + suffix;
} }
/**
* 文件路径
* @param prefix 前缀
* @param fileName 文件名
* @param suffix 后缀
* @return 返回上传路径
*/
public String getPath(String prefix,String suffix, String fileName) {
//文件路径
// String path = DateUtils.getDays() + "/" + fileName;
String path = "version/" + fileName;
if(StringUtils.isNotBlank(prefix)){
path = prefix + "/" + path;
}
return path + "." + suffix;
}
/** /**
* 文件上传 * 文件上传
* @param data 文件字节数组 * @param data 文件字节数组
@@ -58,6 +77,7 @@ public abstract class AbstractCloudStorageService {
* @return 返回http地址 * @return 返回http地址
*/ */
public abstract String uploadSuffix(byte[] data, String suffix) throws Exception; public abstract String uploadSuffix(byte[] data, String suffix) throws Exception;
public abstract String uploadFileName(byte[] data, String suffix,String fileName) throws Exception;
/** /**
* 文件上传 * 文件上传

View File

@@ -49,6 +49,11 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
return upload(data, getPath(config.getPrefix(), suffix)); return upload(data, getPath(config.getPrefix(), suffix));
} }
@Override
public String uploadFileName(byte[] data, String suffix,String fileName) throws Exception {
return upload(data, getPath(config.getPrefix(), suffix,fileName));
}
@Override @Override
public String uploadSuffix(InputStream inputStream, String suffix) throws Exception { public String uploadSuffix(InputStream inputStream, String suffix) throws Exception {
return upload(inputStream, getPath(config.getPrefix(), suffix)); return upload(inputStream, getPath(config.getPrefix(), suffix));

View File

@@ -35,6 +35,11 @@ public class HuaweiCloudStorageService extends AbstractCloudStorageService {
return config.getUrl() + "/" + path; return config.getUrl() + "/" + path;
} }
@Override
public String uploadFileName(byte[] data, String suffix,String fileName) throws Exception {
return upload(data, getPath(config.getPrefix(), suffix,fileName));
}
@Override @Override
public String uploadSuffix(InputStream inputStream, String suffix) throws Exception { public String uploadSuffix(InputStream inputStream, String suffix) throws Exception {
return upload(inputStream, getPath(config.getPrefix(), suffix)); return upload(inputStream, getPath(config.getPrefix(), suffix));

View File

@@ -82,4 +82,9 @@ public class QcloudCloudStorageService extends AbstractCloudStorageService {
public String uploadSuffix(InputStream inputStream, String suffix) throws Exception { public String uploadSuffix(InputStream inputStream, String suffix) throws Exception {
return upload(inputStream, getPath(config.getPrefix(), suffix)); return upload(inputStream, getPath(config.getPrefix(), suffix));
} }
@Override
public String uploadFileName(byte[] data, String suffix,String fileName) throws Exception {
return upload(data, getPath(config.getPrefix(), suffix,fileName));
}
} }

View File

@@ -75,4 +75,9 @@ public class QiniuCloudStorageService extends AbstractCloudStorageService {
public String uploadSuffix(InputStream inputStream, String suffix) throws Exception { public String uploadSuffix(InputStream inputStream, String suffix) throws Exception {
return upload(inputStream, getPath(config.getPrefix(), suffix)); return upload(inputStream, getPath(config.getPrefix(), suffix));
} }
@Override
public String uploadFileName(byte[] data, String suffix,String fileName) throws Exception {
return upload(data, getPath(config.getPrefix(), suffix,fileName));
}
} }