From 321bcd9f9df356dd0ecc70975328f9f67c66d56c Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Fri, 31 Mar 2023 15:00:59 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.3.4=E3=80=91=E3=80=90file=E3=80=91?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6=E7=BB=91=E5=AE=9A=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E4=BF=A1=E6=81=AF=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kernel/file/api/FileBusinessApi.java | 68 ++++++++++++++++ .../pojo/response/SysFileInfoResponse.java | 6 ++ .../service/SysFileBusinessService.java | 3 +- .../impl/SysFileBusinessServiceImpl.java | 78 ++++++++++++++++--- 4 files changed, 145 insertions(+), 10 deletions(-) create mode 100644 kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileBusinessApi.java diff --git a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileBusinessApi.java b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileBusinessApi.java new file mode 100644 index 000000000..9ed08a6a8 --- /dev/null +++ b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/FileBusinessApi.java @@ -0,0 +1,68 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.file.api; + +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; + +import java.util.List; + +/** + * 文件业务信息绑定的API + * + * @author fengshuonan + * @date 2023/3/31 13:38 + */ +public interface FileBusinessApi { + + /** + * 添加业务和文件的绑定 + * + * @param businessCode 业务编码 + * @param businessId 业务id + * @param fileIdList 文件id集合 + * @author fengshuonan + * @date 2023/3/31 13:43 + */ + void addFileBusinessBind(String businessCode, Long businessId, List fileIdList); + + /** + * 获取业务绑定的文件列表信息 + * + * @param businessId 业务id + * @return 文件的信息,不包含文件本身的字节信息 + * @author fengshuonan + * @date 2020/11/29 16:26 + */ + List getBusinessFileInfoList(Long businessId); + + /** + * 新增文件下载次数 + * + * @author fengshuonan + * @date 2023/3/31 14:23 + */ + void addFileDownloadCount(Long businessId, Long fileId); + +} diff --git a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/pojo/response/SysFileInfoResponse.java b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/pojo/response/SysFileInfoResponse.java index 95e9497b9..995e99c50 100644 --- a/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/pojo/response/SysFileInfoResponse.java +++ b/kernel-d-file/file-api/src/main/java/cn/stylefeng/roses/kernel/file/api/pojo/response/SysFileInfoResponse.java @@ -130,4 +130,10 @@ public class SysFileInfoResponse { @ChineseDescription("文件访问路径") private String fileUrl; + /** + * 下载次数 + */ + @ChineseDescription("下载次数") + private Integer downloadCount; + } diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/SysFileBusinessService.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/SysFileBusinessService.java index eb346b8ee..a2cfef381 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/SysFileBusinessService.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/SysFileBusinessService.java @@ -1,6 +1,7 @@ package cn.stylefeng.roses.kernel.file.modular.service; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.file.api.FileBusinessApi; import cn.stylefeng.roses.kernel.file.modular.entity.SysFileBusiness; import cn.stylefeng.roses.kernel.file.modular.pojo.request.SysFileBusinessRequest; import com.baomidou.mybatisplus.extension.service.IService; @@ -13,7 +14,7 @@ import java.util.List; * @author fengshuonan * @date 2023/03/31 13:30 */ -public interface SysFileBusinessService extends IService { +public interface SysFileBusinessService extends IService, FileBusinessApi { /** * 新增 diff --git a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileBusinessServiceImpl.java b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileBusinessServiceImpl.java index 2ad134c46..5fdd73f9d 100644 --- a/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileBusinessServiceImpl.java +++ b/kernel-d-file/file-business/src/main/java/cn/stylefeng/roses/kernel/file/modular/service/impl/SysFileBusinessServiceImpl.java @@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjectUtil; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.file.api.FileInfoApi; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; import cn.stylefeng.roses.kernel.file.modular.entity.SysFileBusiness; import cn.stylefeng.roses.kernel.file.modular.enums.SysFileBusinessExceptionEnum; import cn.stylefeng.roses.kernel.file.modular.mapper.SysFileBusinessMapper; @@ -16,6 +18,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; /** @@ -27,6 +31,9 @@ import java.util.List; @Service public class SysFileBusinessServiceImpl extends ServiceImpl implements SysFileBusinessService { + @Resource + private FileInfoApi fileInfoApi; + @Override public void add(SysFileBusinessRequest sysFileBusinessRequest) { SysFileBusiness sysFileBusiness = new SysFileBusiness(); @@ -65,6 +72,68 @@ public class SysFileBusinessServiceImpl extends ServiceImpl fileIdList) { + + if (ObjectUtil.isEmpty(fileIdList) || ObjectUtil.isEmpty(businessCode) || ObjectUtil.isEmpty(businessId)) { + return; + } + + ArrayList sysFileBusinesses = new ArrayList<>(); + for (Long fileId : fileIdList) { + SysFileBusiness sysFileBusiness = new SysFileBusiness(); + sysFileBusiness.setBusinessCode(businessCode); + sysFileBusiness.setBusinessId(businessId); + sysFileBusiness.setFileId(fileId); + sysFileBusinesses.add(sysFileBusiness); + } + + this.saveBatch(sysFileBusinesses); + } + + @Override + public List getBusinessFileInfoList(Long businessId) { + + // 获取业务下绑定的文件列表 + LambdaQueryWrapper sysFileBusinessLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysFileBusinessLambdaQueryWrapper.eq(SysFileBusiness::getBusinessId, businessId); + List list = this.list(sysFileBusinessLambdaQueryWrapper); + + if (ObjectUtil.isEmpty(list)) { + return new ArrayList<>(); + } + + // 填充文件的详细信息 + ArrayList sysFileInfoResponses = new ArrayList<>(); + for (SysFileBusiness sysFileBusiness : list) { + + // 获取每个文件的详情 + Long fileId = sysFileBusiness.getFileId(); + SysFileInfoResponse fileInfoWithoutContent = fileInfoApi.getFileInfoWithoutContent(fileId); + if (fileInfoWithoutContent != null) { + fileInfoWithoutContent.setDownloadCount(sysFileBusiness.getDownloadCount()); + sysFileInfoResponses.add(fileInfoWithoutContent); + } + } + + return sysFileInfoResponses; + } + + @Override + public void addFileDownloadCount(Long businessId, Long fileId) { + + LambdaQueryWrapper sysFileBusinessLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysFileBusinessLambdaQueryWrapper.eq(SysFileBusiness::getBusinessId, businessId); + sysFileBusinessLambdaQueryWrapper.eq(SysFileBusiness::getFileId, fileId); + SysFileBusiness sysFileBusiness = this.getOne(sysFileBusinessLambdaQueryWrapper, true); + + if (sysFileBusiness != null) { + sysFileBusiness.setDownloadCount(sysFileBusiness.getDownloadCount() + 1); + } + + this.updateById(sysFileBusiness); + } + /** * 获取信息 * @@ -88,17 +157,8 @@ public class SysFileBusinessServiceImpl extends ServiceImpl createWrapper(SysFileBusinessRequest sysFileBusinessRequest) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - Long fileBusinessId = sysFileBusinessRequest.getFileBusinessId(); Long businessId = sysFileBusinessRequest.getBusinessId(); - Long fileId = sysFileBusinessRequest.getFileId(); - Integer downloadCount = sysFileBusinessRequest.getDownloadCount(); - Long tenantId = sysFileBusinessRequest.getTenantId(); - - queryWrapper.eq(ObjectUtil.isNotNull(fileBusinessId), SysFileBusiness::getFileBusinessId, fileBusinessId); queryWrapper.eq(ObjectUtil.isNotNull(businessId), SysFileBusiness::getBusinessId, businessId); - queryWrapper.eq(ObjectUtil.isNotNull(fileId), SysFileBusiness::getFileId, fileId); - queryWrapper.eq(ObjectUtil.isNotNull(downloadCount), SysFileBusiness::getDownloadCount, downloadCount); - queryWrapper.eq(ObjectUtil.isNotNull(tenantId), SysFileBusiness::getTenantId, tenantId); return queryWrapper; }