Commit 3ab6e756 authored by shengnan hu's avatar shengnan hu
Browse files

init

parents
Pipeline #294 passed with stage
in 2 minutes and 13 seconds
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mall4cloud</artifactId>
<groupId>com.mall4j.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall4cloud-biz</artifactId>
<packaging>jar</packaging>
<description>mall4cloud 业务代码。如图片上传等</description>
<dependencies>
<!--注册中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-common-database</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-common-cache</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-common-security</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-api-platform</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-api-biz</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-api-multishop</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-api-user</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.mall4j.cloud.biz;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author FrozenWatermelon
* @date 2020/9/10
*/
@SpringBootApplication(scanBasePackages = { "com.mall4j.cloud" })
@EnableFeignClients(basePackages = {"com.mall4j.cloud.api.**.feign"})
public class BizServerApplication {
public static void main(String[] args) {
SpringApplication.run(BizServerApplication.class, args);
}
}
package com.mall4j.cloud.biz.config;
import com.mall4j.cloud.common.exception.Mall4cloudException;
import com.mall4j.cloud.common.response.ResponseEnum;
import io.minio.*;
import io.minio.http.Method;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* @author FrozenWatermelon
*/
@Component
public class MinioTemplate implements InitializingBean {
@Autowired
private OssConfig ossConfig;
private MinioClient minioClient;
static final Logger logger = LoggerFactory.getLogger(MinioTemplate.class);
@Override
public void afterPropertiesSet() throws Exception {
this.minioClient = MinioClient.builder().endpoint(ossConfig.getEndpoint())
.credentials(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret())
.build();
}
/**
* 删除文件
*
* @param objectName 文件名称
* @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject
*/
public void removeObject(String objectName) throws Exception {
minioClient.removeObject(RemoveObjectArgs.builder().object(objectName).bucket(ossConfig.getBucket()).build());
}
/**
* 获得上传的URL
* @param objectName
*/
public String getPresignedObjectUrl(String objectName){
try {
String presignedObjectUrl = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(ossConfig.getBucket()).object(objectName).expiry(10, TimeUnit.MINUTES).method(Method.PUT).build());
return presignedObjectUrl;
} catch (Exception e) {
e.printStackTrace();
throw new Mall4cloudException(ResponseEnum.EXCEPTION);
}
}
public void uploadMinio(byte[] bytes, String filePath, String contentType) throws IOException {
InputStream input = null;
try {
input = new ByteArrayInputStream(bytes);
minioClient.putObject(
PutObjectArgs.builder()
.bucket(ossConfig.getBucket())
.contentType(contentType)
.stream(input, input.available(), -1)
.object(filePath)
.build()
);
} catch (Exception e) {
logger.error("minio上传文件错误:", e);
} finally {
if (Objects.nonNull(input)) {
input.close();
}
}
}
}
package com.mall4j.cloud.biz.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author FrozenWatermelon
* @date 2020/9/10
*/
@RefreshScope
@Configuration
public class OssConfig {
@Value("${biz.oss.endpoint}")
private String endpoint;
@Value("${biz.oss.bucket}")
private String bucket;
@Value("${biz.oss.access-key-id}")
private String accessKeyId;
@Value("${biz.oss.access-key-secret}")
private String accessKeySecret;
@Value("${biz.oss.type}")
private Integer ossType;
/**
* 最大上传长度单位m,默认20M
*/
@Value("${biz.oss.maxLength:20}")
private Integer maxLength;
public String getAccessId() {
return accessKeyId;
}
public String getBucket() {
return bucket;
}
public String getEndpoint() {
return endpoint;
}
public Integer getMaxLength() {
return maxLength;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
public String getAccessKeyId() {
return accessKeyId;
}
public void setAccessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
}
public String getAccessKeySecret() {
return accessKeySecret;
}
public void setAccessKeySecret(String accessKeySecret) {
this.accessKeySecret = accessKeySecret;
}
public void setMaxLength(Integer maxLength) {
this.maxLength = maxLength;
}
public Integer getOssType() {
return ossType;
}
public void setOssType(Integer ossType) {
this.ossType = ossType;
}
}
package com.mall4j.cloud.biz.constant;
/**
* 文件上传存储类型
* @author FrozenWatermelon
* @date 2021/01/20
*/
public enum OssType {
/**
* 阿里云oss
*/
ALI(0),
/**
* minio
*/
MINIO(1),
;
private final Integer value;
public Integer value() {
return value;
}
OssType(Integer value) {
this.value = value;
}
}
package com.mall4j.cloud.biz.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.mall4j.cloud.biz.config.MinioTemplate;
import com.mall4j.cloud.biz.config.OssConfig;
import com.mall4j.cloud.biz.constant.OssType;
import com.mall4j.cloud.biz.vo.OssVO;
import com.mall4j.cloud.common.response.ServerResponseEntity;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @author FrozenWatermelon
* @date 2020/9/10
*/
@RequestMapping(value = "/oss")
@RestController
@Tag(name = "文件管理")
public class OssController {
private static final Logger log = LoggerFactory.getLogger(OssController.class);
/**
* 上传的文件夹(根据时间确定)
*/
public static final String NORM_DAY_PATTERN = "yyyy/MM/dd";
@Autowired
private OssConfig ossConfig;
@Autowired
private MinioTemplate minioTemplate;
@GetMapping(value = "/info")
@Operation(summary = "token" , description = "获取文件上传需要的token")
@Parameter(name = "fileNum", description = "需要获取token的文件数量")
public ServerResponseEntity<OssVO> info(@RequestParam("fileNum") Integer fileNum) {
OssVO ossVO = new OssVO();
// minio文件上传
if (Objects.equals(ossConfig.getOssType(), OssType.MINIO.value())) {
fillMinIoInfo(ossVO, fileNum);
}
return ServerResponseEntity.success(ossVO);
}
private void fillMinIoInfo(OssVO ossVo, Integer fileNum) {
List<OssVO> ossVOList = new ArrayList<>();
for (int i = 0; i<fileNum; i++) {
OssVO oss = loadOssVO(new OssVO());
String actionUrl = minioTemplate.getPresignedObjectUrl(oss.getDir() + oss.getFileName());
oss.setActionUrl(actionUrl);
ossVOList.add(oss);
}
ossVo.setOssList(ossVOList);
}
private OssVO loadOssVO(OssVO ossVo) {
String dir = DateUtil.format(new Date(), NORM_DAY_PATTERN)+ "/";
String fileName = IdUtil.simpleUUID();
ossVo.setDir(dir);
ossVo.setFileName(fileName);
return ossVo;
}
@PostMapping("/upload_minio")
@Operation(summary = "文件上传接口" , description = "上传文件,返回文件路径与域名")
public ServerResponseEntity<OssVO> uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
if (file.isEmpty()) {
return ServerResponseEntity.success();
}
OssVO oss = loadOssVO(new OssVO());
minioTemplate.uploadMinio(file.getBytes(), oss.getDir() + oss.getFileName(), file.getContentType());
return ServerResponseEntity.success(oss);
}
}
package com.mall4j.cloud.biz.controller.multishop;
import com.mall4j.cloud.biz.dto.AttachFileDTO;
import com.mall4j.cloud.biz.model.AttachFile;
import com.mall4j.cloud.biz.service.AttachFileService;
import com.mall4j.cloud.biz.vo.AttachFileVO;
import com.mall4j.cloud.common.database.dto.PageDTO;
import com.mall4j.cloud.common.database.vo.PageVO;
import com.mall4j.cloud.common.exception.Mall4cloudException;
import com.mall4j.cloud.common.response.ServerResponseEntity;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import com.mall4j.cloud.common.util.BeanUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import java.util.List;
import java.util.Objects;
/**
* 上传文件记录表
*
* @author YXF
* @date 2020-11-21 10:21:40
*/
@RestController("multishopAttachFileController")
@RequestMapping("/m/attach_file")
@Tag(name = "上传文件记录表")
public class AttachFileController {
@Autowired
private AttachFileService attachFileService;
@GetMapping("/page")
@Operation(summary = "获取上传文件记录表列表" , description = "分页获取上传文件记录表列表")
public ServerResponseEntity<PageVO<AttachFileVO>> page(@Valid PageDTO pageDTO, String fileName, Long fileGroupId) {
if (fileGroupId == 0) {
fileGroupId = null;
}
PageVO<AttachFileVO> attachFilePage = attachFileService.page(pageDTO, fileName, fileGroupId);
return ServerResponseEntity.success(attachFilePage);
}
@PostMapping
@Operation(summary = "保存上传文件记录" , description = "保存上传文件记录")
public ServerResponseEntity<Void> save(@RequestBody List<AttachFileDTO> attachFileDtos) {
List<AttachFile> attachFiles = BeanUtil.mapAsList(attachFileDtos, AttachFile.class);
attachFileService.save(attachFiles);
return ServerResponseEntity.success();
}
/**
* 更改文件名或分组
*/
@PutMapping("/update_file")
@Operation(summary = "更新文件记录" , description = "更新文件记录")
public ServerResponseEntity<Boolean> updateFileName(@RequestBody AttachFileDTO attachFileDto) {
if (Objects.isNull(attachFileDto.getFileName())) {
// 图片名称不能为空
throw new Mall4cloudException("图片名称不能为空");
}
AttachFile attachFile = BeanUtil.map(attachFileDto, AttachFile.class);
return ServerResponseEntity.success(attachFileService.updateFileName(attachFile));
}
@DeleteMapping
@Operation(summary = "删除上传文件记录" , description = "根据上传文件记录表id删除上传文件记录")
public ServerResponseEntity<Void> delete(@RequestParam Long fileId) {
attachFileService.deleteById(fileId);
return ServerResponseEntity.success();
}
}
package com.mall4j.cloud.biz.controller.multishop;
import com.mall4j.cloud.biz.dto.AttachFileGroupDTO;
import com.mall4j.cloud.biz.model.AttachFileGroup;
import com.mall4j.cloud.biz.service.AttachFileGroupService;
import com.mall4j.cloud.biz.vo.AttachFileGroupVO;
import com.mall4j.cloud.common.response.ServerResponseEntity;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import com.mall4j.cloud.common.util.BeanUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import java.util.List;
/**
*
*
* @author YXF
* @date 2020-12-04 16:15:02
*/
@RestController("multishopAttachFileGroupController")
@RequestMapping("/m/attach_file_group")
@Tag(name = "店铺-文件分组")
public class AttachFileGroupController {
@Autowired
private AttachFileGroupService attachFileGroupService;
@GetMapping("/list")
@Operation(summary = "获取列表" , description = "分页获取列表")
public ServerResponseEntity<List<AttachFileGroupVO>> list() {
List<AttachFileGroupVO> attachFileGroupPage = attachFileGroupService.list();
return ServerResponseEntity.success(attachFileGroupPage);
}
@GetMapping
@Operation(summary = "获取" , description = "根据attachFileGroupId获取")
public ServerResponseEntity<AttachFileGroupVO> getByAttachFileGroupId(@RequestParam Long attachFileGroupId) {
return ServerResponseEntity.success(attachFileGroupService.getByAttachFileGroupId(attachFileGroupId));
}
@PostMapping
@Operation(summary = "保存" , description = "保存")
public ServerResponseEntity<Void> save(@Valid @RequestBody AttachFileGroupDTO attachFileGroupDTO) {
AttachFileGroup attachFileGroup = BeanUtil.map(attachFileGroupDTO, AttachFileGroup.class);
attachFileGroup.setAttachFileGroupId(null);
attachFileGroupService.save(attachFileGroup);
return ServerResponseEntity.success();
}
@PutMapping
@Operation(summary = "更新" , description = "更新")
public ServerResponseEntity<Void> update(@Valid @RequestBody AttachFileGroupDTO attachFileGroupDTO) {
AttachFileGroup attachFileGroup = BeanUtil.map(attachFileGroupDTO, AttachFileGroup.class);
attachFileGroupService.update(attachFileGroup);
return ServerResponseEntity.success();
}
@DeleteMapping
@Operation(summary = "删除" , description = "根据id删除")
public ServerResponseEntity<Void> delete(@RequestParam Long attachFileGroupId) {
attachFileGroupService.deleteById(attachFileGroupId);
return ServerResponseEntity.success();
}
}
package com.mall4j.cloud.biz.dto;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* 上传文件记录表DTO
*
* @author YXF
* @date 2020-11-21 10:21:40
*/
public class AttachFileDTO {
private static final long serialVersionUID = 1L;
private Long fileId;
@Schema(description = "文件路径" )
private String filePath;
@Schema(description = "文件类型" )
private String fileType;
@Schema(description = "文件名" )
private String fileName;
@Schema(description = "文件大小" )
private Integer fileSize;
@Schema(description = "店铺id" )
private Long shopId;
@Schema(description = "文件 1:图片 2:视频 3:文件" )
private Integer type;
@Schema(description = "文件分组id" )
private Long attachFileGroupId;
public Long getFileId() {
return fileId;
}
public void setFileId(Long fileId) {
this.fileId = fileId;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public Integer getFileSize() {
return fileSize;
}
public void setFileSize(Integer fileSize) {
this.fileSize = fileSize;
}
public Long getShopId() {
return shopId;
}
public void setShopId(Long shopId) {
this.shopId = shopId;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Long getAttachFileGroupId() {
return attachFileGroupId;
}
public void setAttachFileGroupId(Long attachFileGroupId) {
this.attachFileGroupId = attachFileGroupId;
}
@Override
public String toString() {
return "AttachFileDTO{" +
"fileId=" + fileId +
", filePath='" + filePath + '\'' +
", fileType='" + fileType + '\'' +
", fileName='" + fileName + '\'' +
", fileSize=" + fileSize +
", shopId=" + shopId +
", type=" + type +
", attachFileGroupId=" + attachFileGroupId +
'}';
}
}
package com.mall4j.cloud.biz.dto;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* DTO
*
* @author YXF
* @date 2020-12-04 16:15:02
*/
public class AttachFileGroupDTO{
private static final long serialVersionUID = 1L;
private Long attachFileGroupId;
@Schema(description = "店铺id" )
private Long shopId;
@Schema(description = "分组名称" )
private String name;
public Long getAttachFileGroupId() {
return attachFileGroupId;
}
public void setAttachFileGroupId(Long attachFileGroupId) {
this.attachFileGroupId = attachFileGroupId;
}
public Long getShopId() {
return shopId;
}
public void setShopId(Long shopId) {
this.shopId = shopId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "AttachFileGroupDTO{" +
"attachFileGroupId=" + attachFileGroupId +
",shopId=" + shopId +
",name=" + name +
'}';
}
}
package com.mall4j.cloud.biz.mapper;
import com.mall4j.cloud.biz.model.AttachFileGroup;
import com.mall4j.cloud.biz.vo.AttachFileGroupVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author YXF
* @date 2020-12-04 16:15:02
*/
public interface AttachFileGroupMapper {
/**
* 获取列表
* @param shopId
* @return 列表
*/
List<AttachFileGroupVO> list(@Param("shopId") Long shopId);
/**
* 根据id获取
*
* @param attachFileGroupId id
* @return
*/
AttachFileGroupVO getByAttachFileGroupId(@Param("attachFileGroupId") Long attachFileGroupId);
/**
* 保存
*
* @param attachFileGroup
*/
void save(@Param("attachFileGroup") AttachFileGroup attachFileGroup);
/**
* 更新
*
* @param attachFileGroup
*/
void update(@Param("attachFileGroup") AttachFileGroup attachFileGroup);
/**
* 根据id删除
*
* @param attachFileGroupId
*/
void deleteById(@Param("attachFileGroupId") Long attachFileGroupId);
}
package com.mall4j.cloud.biz.mapper;
import com.mall4j.cloud.biz.model.AttachFile;
import com.mall4j.cloud.biz.vo.AttachFileVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 上传文件记录表
*
* @author YXF
* @date 2020-11-21 10:21:40
*/
public interface AttachFileMapper {
/**
* 获取上传文件记录表列表
*
* @param fileName 文件名称
* @param shopId
* @param fileGroupId 文件分组id
* @return 文件记录表列表
*/
List<AttachFileVO> list(@Param("fileName") String fileName, @Param("shopId") Long shopId, @Param("fileGroupId") Long fileGroupId);
/**
* 保存上传文件记录表
*
* @param attachFiles 上传文件记录表
* @param shopId 店铺id
*/
void save(@Param("attachFiles") List<AttachFile> attachFiles, @Param("shopId") Long shopId);
/**
* 更新上传文件记录表
*
* @param attachFile
* @param attachFile 上传文件记录表
*/
void update(@Param("attachFile") AttachFile attachFile);
/**
* 根据上传文件记录表id删除上传文件记录表
*
* @param fileId
*/
void deleteById(@Param("fileId") Long fileId);
/**
* 根据id获取文件信息
*
* @param fileId
* @return
*/
AttachFile getById(@Param("fileId") Long fileId);
/**
* 批量更新文件的分组
* @param attachFileGroupId
*/
void updateBatchByAttachFileGroupId(@Param("attachFileGroupId") Long attachFileGroupId);
}
package com.mall4j.cloud.biz.model;
import com.mall4j.cloud.common.model.BaseModel;
import java.io.Serializable;
/**
* 上传文件记录表
*
* @author FrozenWatermelon
* @date 2020-11-21 10:21:40
*/
public class AttachFile extends BaseModel implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
private Long fileId;
/**
* 文件路径
*/
private String filePath;
/**
* 文件类型
*/
private String fileType;
/**
* 文件名
*/
private String fileName;
/**
* 文件大小
*/
private Integer fileSize;
/**
* 店铺id
*/
private Long shopId;
/**
* 文件 1:图片 2:视频 3:文件
*/
private Integer type;
/**
* 文件分组id(0:默认为所有)
*/
private Long attachFileGroupId;
public Long getFileId() {
return fileId;
}
public void setFileId(Long fileId) {
this.fileId = fileId;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public Integer getFileSize() {
return fileSize;
}
public void setFileSize(Integer fileSize) {
this.fileSize = fileSize;
}
public Long getShopId() {
return shopId;
}
public void setShopId(Long shopId) {
this.shopId = shopId;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Long getAttachFileGroupId() {
return attachFileGroupId;
}
public void setAttachFileGroupId(Long attachFileGroupId) {
this.attachFileGroupId = attachFileGroupId;
}
@Override
public String toString() {
return "AttachFile{" +
"fileId=" + fileId +
", filePath='" + filePath + '\'' +
", fileType='" + fileType + '\'' +
", fileName='" + fileName + '\'' +
", fileSize=" + fileSize +
", shopId=" + shopId +
", type=" + type +
", attachFileGroupId=" + attachFileGroupId +
", createTime=" + createTime +
", updateTime=" + updateTime +
'}';
}
}
package com.mall4j.cloud.biz.model;
import java.io.Serializable;
import com.mall4j.cloud.common.model.BaseModel;
/**
*
*
* @author YXF
* @date 2020-12-04 16:15:02
*/
public class AttachFileGroup extends BaseModel implements Serializable{
private static final long serialVersionUID = 1L;
/**
*
*/
private Long attachFileGroupId;
/**
* 店铺id
*/
private Long shopId;
/**
* 分组名称
*/
private String name;
public Long getAttachFileGroupId() {
return attachFileGroupId;
}
public void setAttachFileGroupId(Long attachFileGroupId) {
this.attachFileGroupId = attachFileGroupId;
}
public Long getShopId() {
return shopId;
}
public void setShopId(Long shopId) {
this.shopId = shopId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "AttachFileGroup{" +
"attachFileGroupId=" + attachFileGroupId +
",createTime=" + createTime +
",updateTime=" + updateTime +
",shopId=" + shopId +
",name=" + name +
'}';
}
}
package com.mall4j.cloud.biz.service;
import com.mall4j.cloud.biz.model.AttachFileGroup;
import com.mall4j.cloud.biz.vo.AttachFileGroupVO;
import java.util.List;
/**
*
*
* @author YXF
* @date 2020-12-04 16:15:02
*/
public interface AttachFileGroupService {
/**
* 获取列表
* @return 列表数据
*/
List<AttachFileGroupVO> list();
/**
* 根据id获取
*
* @param attachFileGroupId id
* @return
*/
AttachFileGroupVO getByAttachFileGroupId(Long attachFileGroupId);
/**
* 保存
* @param attachFileGroup
*/
void save(AttachFileGroup attachFileGroup);
/**
* 更新
* @param attachFileGroup
*/
void update(AttachFileGroup attachFileGroup);
/**
* 根据id删除
* @param attachFileGroupId
*/
void deleteById(Long attachFileGroupId);
}
package com.mall4j.cloud.biz.service;
import com.mall4j.cloud.biz.model.AttachFile;
import com.mall4j.cloud.biz.vo.AttachFileVO;
import com.mall4j.cloud.common.database.dto.PageDTO;
import com.mall4j.cloud.common.database.vo.PageVO;
import java.util.List;
/**
* 上传文件记录表
*
* @author YXF
* @date 2020-11-21 10:21:40
*/
public interface AttachFileService {
/**
* 分页获取上传文件记录表列表
* @param pageDTO 分页参数
* @param fileName 文件名
* @param fileGroupId 文件分组id
* @return 上传文件记录表列表分页数据
*/
PageVO<AttachFileVO> page(PageDTO pageDTO, String fileName, Long fileGroupId);
/**
* 保存上传文件记录表
* @param attachFiles 上传文件记录表
*/
void save(List<AttachFile> attachFiles);
/**
* 更新上传文件记录表
* @param attachFile 上传文件记录表
*/
void update(AttachFile attachFile);
/**
* 根据上传文件记录表id删除上传文件记录表
* @param fileId
*/
void deleteById(Long fileId);
/**
* 更新文件名称
* @param attachFile
* @return
*/
Boolean updateFileName(AttachFile attachFile);
}
package com.mall4j.cloud.biz.service.impl;
import com.mall4j.cloud.biz.mapper.AttachFileMapper;
import com.mall4j.cloud.biz.model.AttachFileGroup;
import com.mall4j.cloud.biz.mapper.AttachFileGroupMapper;
import com.mall4j.cloud.biz.service.AttachFileGroupService;
import com.mall4j.cloud.biz.vo.AttachFileGroupVO;
import com.mall4j.cloud.common.security.AuthUserContext;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
*
* @author YXF
* @date 2020-12-04 16:15:02
*/
@Service
public class AttachFileGroupServiceImpl implements AttachFileGroupService {
@Autowired
private AttachFileMapper attachFileMapper;
@Autowired
private AttachFileGroupMapper attachFileGroupMapper;
@Override
public List<AttachFileGroupVO> list() {
return attachFileGroupMapper.list(AuthUserContext.get().getTenantId());
}
@Override
public AttachFileGroupVO getByAttachFileGroupId(Long attachFileGroupId) {
return attachFileGroupMapper.getByAttachFileGroupId(attachFileGroupId);
}
@Override
public void save(AttachFileGroup attachFileGroup) {
attachFileGroup.setShopId(AuthUserContext.get().getTenantId());
attachFileGroupMapper.save(attachFileGroup);
}
@Override
public void update(AttachFileGroup attachFileGroup) {
attachFileGroupMapper.update(attachFileGroup);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteById(Long attachFileGroupId) {
attachFileGroupMapper.deleteById(attachFileGroupId);
attachFileMapper.updateBatchByAttachFileGroupId(attachFileGroupId);
}
}
package com.mall4j.cloud.biz.service.impl;
import cn.hutool.core.util.StrUtil;
import com.mall4j.cloud.biz.config.MinioTemplate;
import com.mall4j.cloud.biz.mapper.AttachFileMapper;
import com.mall4j.cloud.biz.model.AttachFile;
import com.mall4j.cloud.biz.service.AttachFileService;
import com.mall4j.cloud.biz.vo.AttachFileVO;
import com.mall4j.cloud.common.database.dto.PageDTO;
import com.mall4j.cloud.common.database.util.PageUtil;
import com.mall4j.cloud.common.database.vo.PageVO;
import com.mall4j.cloud.common.security.AuthUserContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
/**
* 上传文件记录表
*
* @author YXF
* @date 2020-11-21 10:21:40
*/
@Service
public class AttachFileServiceImpl implements AttachFileService {
@Autowired
private AttachFileMapper attachFileMapper;
@Autowired
private Environment environment;
@Autowired
private MinioTemplate minioTemplate;
@Override
public PageVO<AttachFileVO> page(PageDTO pageDTO, String fileName, Long fileGroupId) {
return PageUtil.doPage(pageDTO, () -> attachFileMapper.list(fileName, AuthUserContext.get().getTenantId(), fileGroupId));
}
@Override
public void save(List<AttachFile> attachFiles) {
attachFileMapper.save(attachFiles, AuthUserContext.get().getTenantId());
}
@Override
public void update(AttachFile attachFile) {
attachFileMapper.update(attachFile);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteById(Long fileId) {
AttachFile attachFile = attachFileMapper.getById(fileId);
deleteFile(attachFile.getFilePath());
attachFileMapper.deleteById(fileId);
}
@Override
public Boolean updateFileName(AttachFile attachFile) {
if (Objects.isNull(attachFile.getFileName()) && Objects.isNull(attachFile.getAttachFileGroupId())) {
return Boolean.TRUE;
}
attachFileMapper.update(attachFile);
return Boolean.TRUE;
}
/**
* 根据文件路径,删除文件
* @param filePath 文件路径
*/
public void deleteFile(String filePath){
// 获取文件的实际路径--数据库中保存的文件路径为: / + 实际的文件路径
if (StrUtil.isNotBlank(filePath)) {
filePath = filePath.substring(1);
}
try {
minioTemplate.removeObject(filePath);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.mall4j.cloud.biz.vo;
import com.mall4j.cloud.common.vo.BaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* VO
*
* @author YXF
* @date 2020-12-04 16:15:02
*/
public class AttachFileGroupVO extends BaseVO{
private static final long serialVersionUID = 1L;
private Long attachFileGroupId;
@Schema(description = "店铺id" )
private Long shopId;
@Schema(description = "分组名称" )
private String name;
public Long getAttachFileGroupId() {
return attachFileGroupId;
}
public void setAttachFileGroupId(Long attachFileGroupId) {
this.attachFileGroupId = attachFileGroupId;
}
public Long getShopId() {
return shopId;
}
public void setShopId(Long shopId) {
this.shopId = shopId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "AttachFileGroupVO{" +
"attachFileGroupId=" + attachFileGroupId +
",createTime=" + createTime +
",updateTime=" + updateTime +
",shopId=" + shopId +
",name=" + name +
'}';
}
}
package com.mall4j.cloud.biz.vo;
import com.mall4j.cloud.common.vo.BaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* 上传文件记录表VO
*
* @author YXF
* @date 2020-11-21 10:21:40
*/
public class AttachFileVO extends BaseVO {
private static final long serialVersionUID = 1L;
private Long fileId;
@Schema(description = "文件路径" )
private String filePath;
@Schema(description = "文件类型" )
private String fileType;
@Schema(description = "文件名" )
private String fileName;
@Schema(description = "文件大小" )
private Integer fileSize;
@Schema(description = "店铺id" )
private Long shopId;
@Schema(description = "文件 1:图片 2:视频 3:文件" )
private Integer type;
@Schema(description = "分组id" )
private Long attachFileGroupId;
public Long getFileId() {
return fileId;
}
public void setFileId(Long fileId) {
this.fileId = fileId;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public Integer getFileSize() {
return fileSize;
}
public void setFileSize(Integer fileSize) {
this.fileSize = fileSize;
}
public Long getShopId() {
return shopId;
}
public void setShopId(Long shopId) {
this.shopId = shopId;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Long getAttachFileGroupId() {
return attachFileGroupId;
}
public void setAttachFileGroupId(Long attachFileGroupId) {
this.attachFileGroupId = attachFileGroupId;
}
@Override
public String toString() {
return "AttachFileVO{" +
"fileId=" + fileId +
", filePath='" + filePath + '\'' +
", fileType='" + fileType + '\'' +
", fileName='" + fileName + '\'' +
", fileSize=" + fileSize +
", shopId=" + shopId +
", type=" + type +
", attachFileGroupId=" + attachFileGroupId +
", createTime=" + createTime +
", updateTime=" + updateTime +
'}';
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment