Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-oss
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xingmin
yd-oss
Commits
d788e771
Commit
d788e771
authored
Dec 19, 2025
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
oss-v1版本
parent
ad19eed7
Hide whitespace changes
Inline
Side-by-side
Showing
54 changed files
with
1553 additions
and
245 deletions
+1553
-245
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiMaterialController.java
+38
-0
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiOssController.java
+12
-5
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiOssFileController.java
+49
-0
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiRelObjectMaterialController.java
+59
-0
yd-oss-api/src/main/java/com/yd/oss/api/controller/OssFileController.java
+0
-18
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiMaterialService.java
+11
-0
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiOssFileService.java
+13
-0
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiOssService.java
+3
-1
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiRelObjectMaterialService.java
+15
-0
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiMaterialServiceImpl.java
+46
-0
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiOssFileServiceImpl.java
+74
-0
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiOssServiceImpl.java
+24
-11
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiRelObjectMaterialServiceImpl.java
+95
-0
yd-oss-api/yd-oss-api.iml
+1
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiMaterialFeignClient.java
+26
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiOssFeignClient.java
+12
-10
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiOssFileFeignClient.java
+38
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiRelObjectMaterialFeignClient.java
+44
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiMaterialFeignFallbackFactory.java
+28
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiOssFeignFallbackFactory.java
+6
-5
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiOssFileFeignFallbackFactory.java
+32
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiRelObjectMaterialFeignFallbackFactory.java
+36
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiMaterialListRequest.java
+12
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiOssFileListRequest.java
+15
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiRelObjectMaterialListAddRequest.java
+37
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiRelObjectMaterialPageRequest.java
+28
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiUploadFileRequest.java
+30
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/response/ApiMaterialListResponse.java
+42
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/response/ApiOssFileListResponse.java
+64
-0
yd-oss-feign/src/main/java/com/yd/oss/feign/response/ApiRelObjectMaterialPageResponse.java
+43
-0
yd-oss-feign/yd-oss-feign.iml
+2
-0
yd-oss-service/src/main/java/com/yd/oss/service/dao/MaterialMapper.java
+4
-4
yd-oss-service/src/main/java/com/yd/oss/service/dao/RelObjectMaterialMapper.java
+23
-0
yd-oss-service/src/main/java/com/yd/oss/service/dto/MaterialDto.java
+19
-0
yd-oss-service/src/main/java/com/yd/oss/service/dto/OssFileDto.java
+18
-0
yd-oss-service/src/main/java/com/yd/oss/service/dto/OssUploadFileReqDto.java
+42
-0
yd-oss-service/src/main/java/com/yd/oss/service/dto/OssUploadFileResDto.java
+22
-1
yd-oss-service/src/main/java/com/yd/oss/service/model/Material.java
+28
-26
yd-oss-service/src/main/java/com/yd/oss/service/model/OssFile.java
+25
-1
yd-oss-service/src/main/java/com/yd/oss/service/model/RelObjectMaterial.java
+110
-0
yd-oss-service/src/main/java/com/yd/oss/service/service/IMaterialService.java
+20
-0
yd-oss-service/src/main/java/com/yd/oss/service/service/IOssFileService.java
+5
-0
yd-oss-service/src/main/java/com/yd/oss/service/service/IRelObjectMaterialService.java
+28
-0
yd-oss-service/src/main/java/com/yd/oss/service/service/OssService.java
+7
-2
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/AliYunOssServiceImpl.java
+141
-9
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/ExcelExportServiceImpl.java
+2
-2
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/FileUploadService.java
+0
-144
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/MaterialServiceImpl.java
+30
-0
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/OssFileServiceImpl.java
+24
-2
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/RelObjectMaterialServiceImpl.java
+43
-0
yd-oss-service/src/main/java/com/yd/oss/service/utils/MyBatisPlusCodeGenerator.java
+4
-4
yd-oss-service/src/main/resources/mappers/MaterialMapper.xml
+5
-0
yd-oss-service/src/main/resources/mappers/RelObjectMaterialMapper.xml
+17
-0
yd-oss-service/yd-oss-service.iml
+1
-0
No files found.
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiMaterialController.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
controller
;
import
com.yd.common.result.Result
;
import
com.yd.oss.api.service.ApiMaterialService
;
import
com.yd.oss.feign.client.ApiMaterialFeignClient
;
import
com.yd.oss.feign.request.ApiMaterialListRequest
;
import
com.yd.oss.feign.response.ApiMaterialListResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
/**
* 材料基础信息
*
* @author zxm
* @since 2025-12-17
*/
@RestController
@RequestMapping
(
"/material"
)
@Validated
public
class
ApiMaterialController
implements
ApiMaterialFeignClient
{
@Autowired
private
ApiMaterialService
apiMaterialService
;
/**
* 列表查询-材料基础信息
* @param request
* @return
*/
@Override
public
Result
<
List
<
ApiMaterialListResponse
>>
list
(
ApiMaterialListRequest
request
)
{
return
apiMaterialService
.
list
(
request
);
}
}
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiOssController.java
View file @
d788e771
...
...
@@ -3,6 +3,7 @@ package com.yd.oss.api.controller;
import
com.yd.common.result.Result
;
import
com.yd.oss.api.service.ApiOssService
;
import
com.yd.oss.feign.client.ApiOssFeignClient
;
import
com.yd.oss.feign.request.ApiUploadFileRequest
;
import
com.yd.oss.feign.response.ApiFileMetadataResponse
;
import
com.yd.oss.feign.response.ApiUploadResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -36,6 +37,17 @@ public class ApiOssController implements ApiOssFeignClient {
}
/**
* 上传文件 - body入参方式(新,推荐)
* @param file
* @param request
* @return
*/
@Override
public
Result
<
ApiUploadResponse
>
uploadFileBody
(
MultipartFile
file
,
ApiUploadFileRequest
request
)
{
return
apiOssService
.
uploadFileBody
(
file
,
request
);
}
/**
* 下载文件
* @param fileKey 文件唯一标识
* @return
...
...
@@ -96,9 +108,4 @@ public class ApiOssController implements ApiOssFeignClient {
public
Result
<
ApiFileMetadataResponse
>
getFileMetadata
(
String
fileKey
)
{
return
apiOssService
.
getFileMetadata
(
fileKey
,
""
,
""
);
}
@Override
public
Result
uploadBatchFile
()
{
return
apiOssService
.
uploadBatchFile
();
}
}
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiOssFileController.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
controller
;
import
com.yd.common.result.Result
;
import
com.yd.oss.api.service.ApiOssFileService
;
import
com.yd.oss.feign.client.ApiOssFileFeignClient
;
import
com.yd.oss.feign.request.ApiOssFileListRequest
;
import
com.yd.oss.feign.response.ApiOssFileListResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.validation.constraints.NotBlank
;
import
java.util.List
;
/**
* 文件元数据信息
*
* @author zxm
* @since 2025-08-22
*/
@RestController
@RequestMapping
(
"/ossFile"
)
@Validated
public
class
ApiOssFileController
implements
ApiOssFileFeignClient
{
@Autowired
private
ApiOssFileService
apiOssFileService
;
/**
* 列表查询-文件元数据信息
* @param request
* @return
*/
@Override
public
Result
<
List
<
ApiOssFileListResponse
>>
list
(
ApiOssFileListRequest
request
)
{
return
apiOssFileService
.
list
(
request
);
}
/**
* 删除-文件元数据信息
* @param fileBizId
* @return
*/
@Override
public
Result
del
(
String
fileBizId
)
{
return
apiOssFileService
.
del
(
fileBizId
);
}
}
yd-oss-api/src/main/java/com/yd/oss/api/controller/ApiRelObjectMaterialController.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
controller
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.yd.common.result.Result
;
import
com.yd.oss.api.service.ApiRelObjectMaterialService
;
import
com.yd.oss.feign.client.ApiRelObjectMaterialFeignClient
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialListAddRequest
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
com.yd.oss.feign.response.ApiRelObjectMaterialPageResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* 对象材料关系表信息
*
* @author zxm
* @since 2025-12-17
*/
@RestController
@RequestMapping
(
"/relObjectMaterial"
)
@Validated
public
class
ApiRelObjectMaterialController
implements
ApiRelObjectMaterialFeignClient
{
@Autowired
private
ApiRelObjectMaterialService
apiRelObjectMaterialService
;
/**
* 分页列表查询-对象材料关系表信息
* @param request
* @return
*/
@Override
public
Result
<
IPage
<
ApiRelObjectMaterialPageResponse
>>
page
(
ApiRelObjectMaterialPageRequest
request
)
{
return
apiRelObjectMaterialService
.
page
(
request
);
}
/**
* 删除-对象材料关系表信息
* @param relObjectMaterialBizId
* @return
*/
@Override
public
Result
del
(
String
relObjectMaterialBizId
)
{
return
apiRelObjectMaterialService
.
del
(
relObjectMaterialBizId
);
}
/**
* 添加-单个对象和材料列表关系信息
* @param request
* @return
*/
@Override
public
Result
addRelObjectMaterialList
(
ApiRelObjectMaterialListAddRequest
request
)
{
return
apiRelObjectMaterialService
.
addRelObjectMaterialList
(
request
);
}
}
yd-oss-api/src/main/java/com/yd/oss/api/controller/OssFileController.java
deleted
100644 → 0
View file @
ad19eed7
package
com
.
yd
.
oss
.
api
.
controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 文件元数据表 前端控制器
* </p>
*
* @author zxm
* @since 2025-08-22
*/
@RestController
@RequestMapping
(
"/ossFile"
)
public
class
OssFileController
{
}
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiMaterialService.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
service
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.request.ApiMaterialListRequest
;
import
com.yd.oss.feign.response.ApiMaterialListResponse
;
import
java.util.List
;
public
interface
ApiMaterialService
{
Result
<
List
<
ApiMaterialListResponse
>>
list
(
ApiMaterialListRequest
request
);
}
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiOssFileService.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
service
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.request.ApiOssFileListRequest
;
import
com.yd.oss.feign.response.ApiOssFileListResponse
;
import
java.util.List
;
public
interface
ApiOssFileService
{
Result
<
List
<
ApiOssFileListResponse
>>
list
(
ApiOssFileListRequest
request
);
Result
del
(
String
fileBizId
);
}
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiOssService.java
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
service
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.request.ApiUploadFileRequest
;
import
com.yd.oss.feign.response.ApiFileMetadataResponse
;
import
com.yd.oss.feign.response.ApiUploadResponse
;
import
org.springframework.web.multipart.MultipartFile
;
...
...
@@ -10,6 +11,8 @@ import javax.servlet.http.HttpServletResponse;
public
interface
ApiOssService
{
Result
<
ApiUploadResponse
>
uploadFile
(
MultipartFile
file
,
String
bucket
,
String
provider
,
String
uploadUser
);
Result
<
ApiUploadResponse
>
uploadFileBody
(
MultipartFile
file
,
ApiUploadFileRequest
request
);
void
downloadFile
(
String
fileKey
,
String
bucket
,
String
provider
,
HttpServletResponse
response
);
Result
<
Boolean
>
deleteFile
(
String
fileKey
,
String
bucket
,
String
provider
,
String
operator
);
...
...
@@ -22,5 +25,4 @@ public interface ApiOssService {
Result
<
ApiFileMetadataResponse
>
getFileMetadata
(
String
fileKey
,
String
bucket
,
String
provider
);
Result
uploadBatchFile
();
}
yd-oss-api/src/main/java/com/yd/oss/api/service/ApiRelObjectMaterialService.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialListAddRequest
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
com.yd.oss.feign.response.ApiRelObjectMaterialPageResponse
;
public
interface
ApiRelObjectMaterialService
{
Result
<
IPage
<
ApiRelObjectMaterialPageResponse
>>
page
(
ApiRelObjectMaterialPageRequest
request
);
Result
del
(
String
relObjectMaterialBizId
);
Result
addRelObjectMaterialList
(
ApiRelObjectMaterialListAddRequest
request
);
}
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiMaterialServiceImpl.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
service
.
impl
;
import
com.yd.common.result.Result
;
import
com.yd.oss.api.service.ApiMaterialService
;
import
com.yd.oss.feign.request.ApiMaterialListRequest
;
import
com.yd.oss.feign.response.ApiMaterialListResponse
;
import
com.yd.oss.service.dto.MaterialDto
;
import
com.yd.oss.service.model.Material
;
import
com.yd.oss.service.service.IMaterialService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Slf4j
@Service
public
class
ApiMaterialServiceImpl
implements
ApiMaterialService
{
@Autowired
private
IMaterialService
iMaterialService
;
/**
* 列表查询-材料基础信息
* @param request
* @return
*/
@Override
public
Result
<
List
<
ApiMaterialListResponse
>>
list
(
ApiMaterialListRequest
request
)
{
List
<
Material
>
materialList
=
iMaterialService
.
queryList
(
MaterialDto
.
builder
().
objectType
(
request
.
getObjectType
()).
build
());
if
(!
CollectionUtils
.
isEmpty
(
materialList
))
{
List
<
ApiMaterialListResponse
>
responses
=
materialList
.
stream
().
map
(
dto
->
{
ApiMaterialListResponse
response
=
new
ApiMaterialListResponse
();
BeanUtils
.
copyProperties
(
dto
,
response
);
return
response
;
}).
collect
(
Collectors
.
toList
());
return
Result
.
success
(
responses
);
}
return
Result
.
success
();
}
}
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiOssFileServiceImpl.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
service
.
impl
;
import
com.yd.common.enums.ResultCode
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
import
com.yd.oss.api.service.ApiOssFileService
;
import
com.yd.oss.feign.request.ApiOssFileListRequest
;
import
com.yd.oss.feign.response.ApiOssFileListResponse
;
import
com.yd.oss.service.dto.OssFileDto
;
import
com.yd.oss.service.model.OssFile
;
import
com.yd.oss.service.model.RelObjectMaterial
;
import
com.yd.oss.service.service.IOssFileService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
@Slf4j
@Service
public
class
ApiOssFileServiceImpl
implements
ApiOssFileService
{
@Autowired
private
IOssFileService
iOssFileService
;
/**
* 列表查询-文件元数据信息
* @param request
* @return
*/
@Override
public
Result
<
List
<
ApiOssFileListResponse
>>
list
(
ApiOssFileListRequest
request
)
{
List
<
OssFile
>
list
=
iOssFileService
.
queryList
(
OssFileDto
.
builder
().
objectBizId
(
request
.
getObjectBizId
()).
build
());
if
(!
CollectionUtils
.
isEmpty
(
list
))
{
List
<
ApiOssFileListResponse
>
responses
=
list
.
stream
().
map
(
dto
->
{
ApiOssFileListResponse
response
=
new
ApiOssFileListResponse
();
BeanUtils
.
copyProperties
(
dto
,
response
);
return
response
;
}).
collect
(
Collectors
.
toList
());
return
Result
.
success
(
responses
);
}
return
Result
.
success
();
}
/**
* 删除-文件元数据信息
* @param fileBizId
* @return
*/
@Override
public
Result
del
(
String
fileBizId
)
{
Result
<
OssFile
>
result
=
checkOssFileIsExist
(
fileBizId
);
OssFile
ossFile
=
result
.
getData
();
iOssFileService
.
removeById
(
ossFile
.
getId
());
return
Result
.
success
();
}
/**
* 校验文件元数据信息是否存在
* @param fileBizId
* @return
*/
public
Result
<
OssFile
>
checkOssFileIsExist
(
String
fileBizId
)
{
OssFile
ossFile
=
iOssFileService
.
queryOne
(
fileBizId
);
if
(
Objects
.
isNull
(
ossFile
))
{
//数据不存在
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
ResultCode
.
NULL_ERROR
.
getMessage
());
}
return
Result
.
success
(
ossFile
);
}
}
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiOssServiceImpl.java
View file @
d788e771
...
...
@@ -3,13 +3,14 @@ package com.yd.oss.api.service.impl;
import
com.alibaba.cloud.commons.lang.StringUtils
;
import
com.yd.common.result.Result
;
import
com.yd.oss.api.service.ApiOssService
;
import
com.yd.oss.feign.request.ApiUploadFileRequest
;
import
com.yd.oss.feign.response.ApiFileMetadataResponse
;
import
com.yd.oss.feign.response.ApiUploadResponse
;
import
com.yd.oss.service.dto.FileMetadata
;
import
com.yd.oss.service.dto.OssUploadFileDto
;
import
com.yd.oss.service.dto.OssUploadFileReqDto
;
import
com.yd.oss.service.dto.OssUploadFileResDto
;
import
com.yd.oss.service.dto.UploadResult
;
import
com.yd.oss.service.service.OssService
;
import
com.yd.oss.service.service.impl.FileUploadService
;
import
com.yd.oss.service.utils.FileUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.io.IOUtils
;
...
...
@@ -21,6 +22,7 @@ import javax.servlet.http.HttpServletResponse;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.time.Duration
;
import
java.util.Objects
;
@Slf4j
@Service
...
...
@@ -29,9 +31,6 @@ public class ApiOssServiceImpl implements ApiOssService {
@Autowired
private
OssService
ossService
;
@Autowired
private
FileUploadService
fileUploadService
;
/**
* 上传文件
* @param file 上传的文件
...
...
@@ -50,7 +49,7 @@ public class ApiOssServiceImpl implements ApiOssService {
}
// 上传文件
OssUploadFileDto
ossUploadFileDto
=
ossService
.
uploadFile
(
file
.
getInputStream
(),
file
.
getOriginalFilename
(),
OssUploadFile
Res
Dto
ossUploadFileDto
=
ossService
.
uploadFile
(
file
.
getInputStream
(),
file
.
getOriginalFilename
(),
bucket
,
uploadUser
,
FileUtil
.
getFileType
(
file
.
getOriginalFilename
()));
// 获取上传结果(包含文件信息和访问URL)
...
...
@@ -67,6 +66,25 @@ public class ApiOssServiceImpl implements ApiOssService {
}
/**
* 上传文件 - body入参方式(新,推荐)
* @param file
* @param request
* @return
*/
@Override
public
Result
<
ApiUploadResponse
>
uploadFileBody
(
MultipartFile
file
,
ApiUploadFileRequest
request
)
{
ApiUploadResponse
response
=
null
;
OssUploadFileReqDto
reqDto
=
new
OssUploadFileReqDto
();
BeanUtils
.
copyProperties
(
request
,
reqDto
);
OssUploadFileResDto
fileResDto
=
ossService
.
uploadFileBody
(
file
,
reqDto
);
if
(!
Objects
.
isNull
(
fileResDto
))
{
response
=
new
ApiUploadResponse
();
BeanUtils
.
copyProperties
(
fileResDto
,
response
);
}
return
Result
.
success
(
response
);
}
/**
* 下载文件
* @param fileKey 文件唯一标识
* @param bucket oss桶(不传值使用默认的oss的桶)
...
...
@@ -218,9 +236,4 @@ public class ApiOssServiceImpl implements ApiOssService {
}
}
@Override
public
Result
uploadBatchFile
()
{
fileUploadService
.
batchProcessUrls
();
return
Result
.
success
();
}
}
yd-oss-api/src/main/java/com/yd/oss/api/service/impl/ApiRelObjectMaterialServiceImpl.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
api
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yd.common.enums.CommonEnum
;
import
com.yd.common.enums.ResultCode
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.result.Result
;
import
com.yd.common.utils.RandomStringGenerator
;
import
com.yd.oss.api.service.ApiRelObjectMaterialService
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialListAddRequest
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
com.yd.oss.feign.response.ApiRelObjectMaterialPageResponse
;
import
com.yd.oss.service.model.RelObjectMaterial
;
import
com.yd.oss.service.service.IRelObjectMaterialService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
@Service
@Slf4j
public
class
ApiRelObjectMaterialServiceImpl
implements
ApiRelObjectMaterialService
{
@Autowired
private
IRelObjectMaterialService
iRelObjectMaterialService
;
/**
* 分页列表查询-对象材料关系表信息
* @param request
* @return
*/
@Override
public
Result
<
IPage
<
ApiRelObjectMaterialPageResponse
>>
page
(
ApiRelObjectMaterialPageRequest
request
)
{
Page
<
ApiRelObjectMaterialPageResponse
>
page
=
new
Page
<>(
request
.
getPageNo
(),
request
.
getPageSize
());
IPage
<
ApiRelObjectMaterialPageResponse
>
iPage
=
iRelObjectMaterialService
.
page
(
page
,
request
);
return
Result
.
success
(
iPage
);
}
/**
* 删除-对象材料关系表信息
* @param relObjectMaterialBizId
* @return
*/
@Override
public
Result
del
(
String
relObjectMaterialBizId
)
{
//校验对象材料关系表信息是否存在
Result
<
RelObjectMaterial
>
result
=
checkRelObjectMaterialIsExist
(
relObjectMaterialBizId
);
RelObjectMaterial
relObjectMaterial
=
result
.
getData
();
iRelObjectMaterialService
.
removeById
(
relObjectMaterial
.
getId
());
return
Result
.
success
();
}
/**
* 添加-单个对象和材料列表关系信息
* @param request
* @return
*/
@Override
public
Result
addRelObjectMaterialList
(
ApiRelObjectMaterialListAddRequest
request
)
{
//先删后新增
iRelObjectMaterialService
.
delByObjectBizId
(
request
.
getObjectBizId
());
if
(!
CollectionUtils
.
isEmpty
(
request
.
getMaterialBizIdList
()))
{
List
<
RelObjectMaterial
>
saveList
=
request
.
getMaterialBizIdList
().
stream
().
map
(
materialBizId
->
{
RelObjectMaterial
relObjectMaterial
=
new
RelObjectMaterial
();
BeanUtils
.
copyProperties
(
request
,
relObjectMaterial
);
relObjectMaterial
.
setMaterialBizId
(
materialBizId
);
relObjectMaterial
.
setRelObjectMaterialBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_REL_OBJECT_MATERIAL
.
getCode
()));
return
relObjectMaterial
;
}).
collect
(
Collectors
.
toList
());
iRelObjectMaterialService
.
saveOrUpdateBatch
(
saveList
);
}
return
Result
.
success
();
}
/**
* 校验对象材料关系表信息是否存在
* @param relObjectMaterialBizId
* @return
*/
public
Result
<
RelObjectMaterial
>
checkRelObjectMaterialIsExist
(
String
relObjectMaterialBizId
)
{
RelObjectMaterial
relObjectMaterial
=
iRelObjectMaterialService
.
queryOne
(
relObjectMaterialBizId
);
if
(
Objects
.
isNull
(
relObjectMaterial
))
{
//数据不存在
throw
new
BusinessException
(
ResultCode
.
NULL_ERROR
.
getCode
(),
ResultCode
.
NULL_ERROR
.
getMessage
());
}
return
Result
.
success
(
relObjectMaterial
);
}
}
yd-oss-api/yd-oss-api.iml
View file @
d788e771
...
...
@@ -126,6 +126,7 @@
<orderEntry
type=
"library"
name=
"Maven: com.ibm.icu:icu4j:73.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-csf-feign:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-question-feign:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-base-feign:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-auth-core:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.xiaoymin:knife4j-openapi3-spring-boot-starter:4.3.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.xiaoymin:knife4j-core:4.3.0"
level=
"project"
/>
...
...
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiMaterialFeignClient.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
client
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.fallback.ApiMaterialFeignFallbackFactory
;
import
com.yd.oss.feign.request.ApiMaterialListRequest
;
import
com.yd.oss.feign.response.ApiMaterialListResponse
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
java.util.List
;
/**
* 材料基础信息Feign客户端
*/
@FeignClient
(
name
=
"yd-oss-api"
,
path
=
"/oss/api/material"
,
fallbackFactory
=
ApiMaterialFeignFallbackFactory
.
class
)
public
interface
ApiMaterialFeignClient
{
/**
* 列表查询-材料基础信息
* @param request
* @return
*/
@PostMapping
(
"/list"
)
Result
<
List
<
ApiMaterialListResponse
>>
list
(
@RequestBody
ApiMaterialListRequest
request
);
}
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiOssFeignClient.java
View file @
d788e771
...
...
@@ -2,13 +2,12 @@ package com.yd.oss.feign.client;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.fallback.ApiOssFeignFallbackFactory
;
import
com.yd.oss.feign.request.ApiUploadFileRequest
;
import
com.yd.oss.feign.response.ApiFileMetadataResponse
;
import
com.yd.oss.feign.response.ApiUploadResponse
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
/**
...
...
@@ -26,6 +25,15 @@ public interface ApiOssFeignClient {
Result
<
ApiUploadResponse
>
uploadFile
(
@RequestParam
(
"file"
)
MultipartFile
file
);
/**
* 上传文件 - body入参方式(新,推荐)
* @param file
* @param request
* @return
*/
@PostMapping
(
value
=
"/upload/body"
,
consumes
=
MediaType
.
MULTIPART_FORM_DATA_VALUE
)
Result
<
ApiUploadResponse
>
uploadFileBody
(
@RequestPart
(
"file"
)
MultipartFile
file
,
ApiUploadFileRequest
request
);
/**
* 下载文件
* @param fileKey 文件唯一标识
* @return
...
...
@@ -75,10 +83,4 @@ public interface ApiOssFeignClient {
@GetMapping
(
"/metadata"
)
Result
<
ApiFileMetadataResponse
>
getFileMetadata
(
@RequestParam
(
"fileKey"
)
String
fileKey
);
/**
* 批量上传文件
* @return
*/
@GetMapping
(
"/upload/batch/file"
)
Result
uploadBatchFile
();
}
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiOssFileFeignClient.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
client
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.fallback.ApiOssFileFeignFallbackFactory
;
import
com.yd.oss.feign.request.ApiOssFileListRequest
;
import
com.yd.oss.feign.response.ApiOssFileListResponse
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
javax.validation.constraints.NotBlank
;
import
java.util.List
;
/**
* 文件元数据信息Feign客户端
*/
@FeignClient
(
name
=
"yd-oss-api"
,
path
=
"/oss/api/ossFile"
,
fallbackFactory
=
ApiOssFileFeignFallbackFactory
.
class
)
public
interface
ApiOssFileFeignClient
{
/**
* 列表查询-文件元数据信息
* @param request
* @return
*/
@PostMapping
(
"/list"
)
Result
<
List
<
ApiOssFileListResponse
>>
list
(
@Validated
@RequestBody
ApiOssFileListRequest
request
);
/**
* 删除-文件元数据信息
* @param fileBizId
* @return
*/
@DeleteMapping
(
"/del"
)
Result
del
(
@NotBlank
(
message
=
"文件元数据表唯一业务ID不能为空"
)
@RequestParam
(
value
=
"fileBizId"
)
String
fileBizId
);
}
yd-oss-feign/src/main/java/com/yd/oss/feign/client/ApiRelObjectMaterialFeignClient.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
client
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.fallback.ApiRelObjectMaterialFeignFallbackFactory
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialListAddRequest
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
javax.validation.constraints.NotBlank
;
/**
* 对象材料关系表信息Feign客户端
*/
@FeignClient
(
name
=
"yd-oss-api"
,
path
=
"/oss/api/relObjectMaterial"
,
fallbackFactory
=
ApiRelObjectMaterialFeignFallbackFactory
.
class
)
public
interface
ApiRelObjectMaterialFeignClient
{
/**
* 分页列表查询-对象材料关系表信息
* @param request
* @return
*/
@PostMapping
(
"/page"
)
Result
page
(
@RequestBody
ApiRelObjectMaterialPageRequest
request
);
/**
* 删除-对象材料关系表信息
* @param relObjectMaterialBizId
* @return
*/
@DeleteMapping
(
"/del"
)
Result
del
(
@NotBlank
(
message
=
"对象材料关系表唯一业务ID不能为空"
)
@RequestParam
(
value
=
"relObjectMaterialBizId"
)
String
relObjectMaterialBizId
);
/**
* 添加-单个对象和材料列表关系信息
* @param request
* @return
*/
@PostMapping
(
"/add/relObjectMaterialList"
)
Result
addRelObjectMaterialList
(
@Validated
@RequestBody
ApiRelObjectMaterialListAddRequest
request
);
}
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiMaterialFeignFallbackFactory.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
fallback
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.client.ApiMaterialFeignClient
;
import
com.yd.oss.feign.request.ApiMaterialListRequest
;
import
com.yd.oss.feign.response.ApiMaterialListResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cloud.openfeign.FallbackFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* 材料基础信息Feign降级处理
*/
@Slf4j
@Component
public
class
ApiMaterialFeignFallbackFactory
implements
FallbackFactory
<
ApiMaterialFeignClient
>
{
@Override
public
ApiMaterialFeignClient
create
(
Throwable
cause
)
{
return
new
ApiMaterialFeignClient
()
{
@Override
public
Result
<
List
<
ApiMaterialListResponse
>>
list
(
ApiMaterialListRequest
request
)
{
return
null
;
}
};
}
}
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiOssFeignFallbackFactory.java
View file @
d788e771
...
...
@@ -2,6 +2,7 @@ package com.yd.oss.feign.fallback;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.client.ApiOssFeignClient
;
import
com.yd.oss.feign.request.ApiUploadFileRequest
;
import
com.yd.oss.feign.response.ApiFileMetadataResponse
;
import
com.yd.oss.feign.response.ApiUploadResponse
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -24,6 +25,11 @@ public class ApiOssFeignFallbackFactory implements FallbackFactory<ApiOssFeignCl
}
@Override
public
Result
<
ApiUploadResponse
>
uploadFileBody
(
MultipartFile
file
,
ApiUploadFileRequest
request
)
{
return
null
;
}
@Override
public
Result
downloadFile
(
String
fileKey
)
{
return
null
;
}
...
...
@@ -52,11 +58,6 @@ public class ApiOssFeignFallbackFactory implements FallbackFactory<ApiOssFeignCl
public
Result
<
ApiFileMetadataResponse
>
getFileMetadata
(
String
fileKey
)
{
return
null
;
}
@Override
public
Result
uploadBatchFile
()
{
return
null
;
}
};
}
}
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiOssFileFeignFallbackFactory.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
fallback
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.client.ApiOssFileFeignClient
;
import
com.yd.oss.feign.request.ApiOssFileListRequest
;
import
com.yd.oss.feign.response.ApiOssFileListResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cloud.openfeign.FallbackFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* 文件元数据信息Feign降级处理
*/
@Slf4j
@Component
public
class
ApiOssFileFeignFallbackFactory
implements
FallbackFactory
<
ApiOssFileFeignClient
>
{
@Override
public
ApiOssFileFeignClient
create
(
Throwable
cause
)
{
return
new
ApiOssFileFeignClient
()
{
@Override
public
Result
<
List
<
ApiOssFileListResponse
>>
list
(
ApiOssFileListRequest
request
)
{
return
null
;
}
@Override
public
Result
del
(
String
fileBizId
)
{
return
null
;
}
};
}
}
yd-oss-feign/src/main/java/com/yd/oss/feign/fallback/ApiRelObjectMaterialFeignFallbackFactory.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
fallback
;
import
com.yd.common.result.Result
;
import
com.yd.oss.feign.client.ApiRelObjectMaterialFeignClient
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialListAddRequest
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cloud.openfeign.FallbackFactory
;
import
org.springframework.stereotype.Component
;
/**
* 对象材料关系表信息Feign降级处理
*/
@Slf4j
@Component
public
class
ApiRelObjectMaterialFeignFallbackFactory
implements
FallbackFactory
<
ApiRelObjectMaterialFeignClient
>
{
@Override
public
ApiRelObjectMaterialFeignClient
create
(
Throwable
cause
)
{
return
new
ApiRelObjectMaterialFeignClient
()
{
@Override
public
Result
page
(
ApiRelObjectMaterialPageRequest
request
)
{
return
null
;
}
@Override
public
Result
del
(
String
relObjectMaterialBizId
)
{
return
null
;
}
@Override
public
Result
addRelObjectMaterialList
(
ApiRelObjectMaterialListAddRequest
request
)
{
return
null
;
}
};
}
}
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiMaterialListRequest.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
request
;
import
lombok.Data
;
@Data
public
class
ApiMaterialListRequest
{
/**
* 对象类型(字典)
*/
private
String
objectType
;
}
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiOssFileListRequest.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
request
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
@Data
public
class
ApiOssFileListRequest
{
/**
* 对象业务ID
*/
@NotBlank
(
message
=
"对象业务ID不能为空"
)
private
String
objectBizId
;
}
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiRelObjectMaterialListAddRequest.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
request
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotEmpty
;
import
java.util.List
;
@Data
public
class
ApiRelObjectMaterialListAddRequest
{
/**
* 对象类型
*/
private
String
objectType
;
/**
* 对象所属表名(预约表、新单跟进表等)
*/
private
String
objectTableName
;
/**
* 对象名
*/
private
String
objectName
;
/**
* 对象业务ID
*/
@NotBlank
(
message
=
"对象业务ID不能为空"
)
private
String
objectBizId
;
/**
* 材料信息表唯一业务ID列表
*/
private
List
<
String
>
materialBizIdList
;
}
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiRelObjectMaterialPageRequest.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
request
;
import
com.yd.common.dto.PageDto
;
import
lombok.Data
;
@Data
public
class
ApiRelObjectMaterialPageRequest
extends
PageDto
{
/**
* 对象类型
*/
private
String
objectType
;
/**
* 对象所属表名(预约表、新单跟进表等)
*/
private
String
objectTableName
;
/**
* 对象名
*/
private
String
objectName
;
/**
* 对象业务ID
*/
private
String
objectBizId
;
}
yd-oss-feign/src/main/java/com/yd/oss/feign/request/ApiUploadFileRequest.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
request
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
@Data
public
class
ApiUploadFileRequest
{
/**
* 对象类型
*/
private
String
objectType
;
/**
* 对象所属表名(预约表、新单跟进表等)
*/
private
String
objectTableName
;
/**
* 对象名
*/
private
String
objectName
;
/**
* 对象业务ID
*/
@NotBlank
(
message
=
"对象业务ID不能为空"
)
private
String
objectBizId
;
}
yd-oss-feign/src/main/java/com/yd/oss/feign/response/ApiMaterialListResponse.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
response
;
import
lombok.Data
;
@Data
public
class
ApiMaterialListResponse
{
/**
* 材料信息表主键ID
*/
private
Long
id
;
/**
* 材料信息表唯一业务ID
*/
private
String
materialBizId
;
/**
* 对象类型(字典)
*/
private
String
objectType
;
/**
* 资料人(字典)
*/
private
String
dataPerson
;
/**
* 资料类型(字典)
*/
private
String
dataType
;
/**
* 注意事项
*/
private
String
precautions
;
/**
* 状态:0-禁用,1-启用
*/
private
Integer
status
;
}
yd-oss-feign/src/main/java/com/yd/oss/feign/response/ApiOssFileListResponse.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
response
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
@Data
public
class
ApiOssFileListResponse
{
/**
* 文件元数据表主键ID
*/
private
Long
id
;
/**
* 对象类型
*/
private
String
objectType
;
/**
* 对象所属表名(预约表、新单跟进表等)
*/
private
String
objectTableName
;
/**
* 对象名
*/
private
String
objectName
;
/**
* 对象业务ID
*/
private
String
objectBizId
;
/**
* 文件元数据表唯一业务ID
*/
private
String
fileBizId
;
/**
* 文件唯一标识
*/
private
String
fileKey
;
/**
* 原始文件名
*/
private
String
originalName
;
/**
* 文件大小(字节)
*/
private
Long
fileSize
;
/**
* 文件类型
*/
private
String
fileType
;
/**
* 创建时间
*/
private
LocalDateTime
createTime
;
}
yd-oss-feign/src/main/java/com/yd/oss/feign/response/ApiRelObjectMaterialPageResponse.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
feign
.
response
;
import
lombok.Data
;
@Data
public
class
ApiRelObjectMaterialPageResponse
{
/**
* 对象材料关系表主键ID
*/
private
Long
id
;
/**
* 对象材料关系表唯一业务ID
*/
private
String
relObjectMaterialBizId
;
/**
* 材料信息表唯一业务ID
*/
private
String
materialBizId
;
/**
* 状态: YSC-已上传 WSC-未上传 DSC-待上传
*/
private
String
status
;
/**
* 资料人(字典)
*/
private
String
dataPerson
;
/**
* 资料类型(字典)
*/
private
String
dataType
;
/**
* 注意事项
*/
private
String
precautions
;
}
yd-oss-feign/yd-oss-feign.iml
View file @
d788e771
...
...
@@ -109,5 +109,6 @@
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-databind:2.13.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-core:2.13.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-user-feign:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-base-feign:1.0-SNAPSHOT"
level=
"project"
/>
</component>
</module>
\ No newline at end of file
yd-oss-service/src/main/java/com/yd/oss/service/dao/
ProductFile
Mapper.java
→
yd-oss-service/src/main/java/com/yd/oss/service/dao/
Material
Mapper.java
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
dao
;
import
com.yd.oss.service.model.Material
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.yd.oss.service.model.ProductFile
;
/**
* <p>
*
产品文件关系表
Mapper 接口
*
材料基础信息
Mapper 接口
* </p>
*
* @author zxm
* @since 2025-1
0
-17
* @since 2025-1
2
-17
*/
public
interface
ProductFileMapper
extends
BaseMapper
<
ProductFile
>
{
public
interface
MaterialMapper
extends
BaseMapper
<
Material
>
{
}
yd-oss-service/src/main/java/com/yd/oss/service/dao/RelObjectMaterialMapper.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
dao
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
com.yd.oss.feign.response.ApiRelObjectMaterialPageResponse
;
import
com.yd.oss.service.model.RelObjectMaterial
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Param
;
/**
* <p>
* 对象材料关系表 Mapper 接口
* </p>
*
* @author zxm
* @since 2025-12-17
*/
public
interface
RelObjectMaterialMapper
extends
BaseMapper
<
RelObjectMaterial
>
{
IPage
<
ApiRelObjectMaterialPageResponse
>
page
(
@Param
(
"page"
)
Page
<
ApiRelObjectMaterialPageResponse
>
page
,
@Param
(
"request"
)
ApiRelObjectMaterialPageRequest
request
);
}
yd-oss-service/src/main/java/com/yd/oss/service/dto/MaterialDto.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
dto
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
MaterialDto
{
/**
* 对象类型(字典)
*/
private
String
objectType
;
}
yd-oss-service/src/main/java/com/yd/oss/service/dto/OssFileDto.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
OssFileDto
{
/**
* 对象业务ID
*/
private
String
objectBizId
;
}
yd-oss-service/src/main/java/com/yd/oss/service/dto/OssUploadFileReqDto.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* 提供OSS上传文件请求的DTO
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
OssUploadFileReqDto
{
/**
* 对象类型
*/
private
String
objectType
;
/**
* 对象所属表名(预约表、新单跟进表等)
*/
private
String
objectTableName
;
/**
* 对象名
*/
private
String
objectName
;
/**
* 对象业务ID
*/
private
String
objectBizId
;
/**
* 上传用户业务id
*/
private
String
uploadUser
;
}
yd-oss-service/src/main/java/com/yd/oss/service/dto/OssUploadFileDto.java
→
yd-oss-service/src/main/java/com/yd/oss/service/dto/OssUploadFile
Res
Dto.java
View file @
d788e771
...
...
@@ -2,11 +2,13 @@ package com.yd.oss.service.dto;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* 提供OSS上传文件返回的DTO
*/
@Data
public
class
OssUploadFileDto
{
public
class
OssUploadFile
Res
Dto
{
/**
* 文件元数据表业务ID唯一标识
...
...
@@ -28,4 +30,23 @@ public class OssUploadFileDto {
*/
private
String
url
;
/**
* 访问URL(带过期时间签名URL)
*/
private
String
accessUrl
;
/**
* 文件大小
*/
private
Long
fileSize
;
/**
* 文件类型
*/
private
String
fileType
;
/**
* 上传时间
*/
private
LocalDateTime
uploadTime
;
}
yd-oss-service/src/main/java/com/yd/oss/service/model/
ProductFile
.java
→
yd-oss-service/src/main/java/com/yd/oss/service/model/
Material
.java
View file @
d788e771
...
...
@@ -4,62 +4,64 @@ import com.baomidou.mybatisplus.annotation.IdType;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* <p>
*
产品文件关系表
*
材料基础信息
* </p>
*
* @author zxm
* @since 2025-1
0
-17
* @since 2025-1
2
-17
*/
@Getter
@Setter
@TableName
(
"
product_file
"
)
public
class
ProductFile
implements
Serializable
{
@TableName
(
"
material
"
)
public
class
Material
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 主键ID
*/
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 未知ID
* 材料信息表唯一业务ID
*/
@TableField
(
"material_biz_id"
)
private
String
materialBizId
;
/**
* 对象类型(字典)
*/
@TableField
(
"
biz_id
"
)
private
String
bizId
;
@TableField
(
"
object_type
"
)
private
String
objectType
;
/**
*
产品业务ID
*
资料人(字典)
*/
@TableField
(
"
product_biz_id
"
)
private
String
productBizId
;
@TableField
(
"
data_person
"
)
private
String
dataPerson
;
/**
*
文件名称
*
资料类型(字典)
*/
@TableField
(
"
file_nam
e"
)
private
String
fileNam
e
;
@TableField
(
"
data_typ
e"
)
private
String
dataTyp
e
;
/**
*
原文件URL
*
注意事项
*/
@TableField
(
"
old_file_url
"
)
private
String
oldFileUrl
;
@TableField
(
"
precautions
"
)
private
String
precautions
;
/**
*
新文件URL
*
状态:0-禁用,1-启用
*/
@TableField
(
"
new_file_url
"
)
private
String
newFileUrl
;
@TableField
(
"
status
"
)
private
Integer
status
;
/**
* 通用备注
...
...
@@ -71,7 +73,7 @@ public class ProductFile implements Serializable {
* 删除标识: 0-正常, 1-删除
*/
@TableField
(
"is_deleted"
)
private
Boolean
isDeleted
;
private
Integer
isDeleted
;
/**
* 创建人ID
...
...
yd-oss-service/src/main/java/com/yd/oss/service/model/OssFile.java
View file @
d788e771
...
...
@@ -28,7 +28,31 @@ public class OssFile implements Serializable {
private
Long
id
;
/**
* 业务ID唯一标识
* 对象类型
*/
@TableField
(
"object_type"
)
private
String
objectType
;
/**
* 对象所属表名(预约表、新单跟进表等)
*/
@TableField
(
"object_table_name"
)
private
String
objectTableName
;
/**
* 对象名
*/
@TableField
(
"object_name"
)
private
String
objectName
;
/**
* 对象业务ID
*/
@TableField
(
"object_biz_id"
)
private
String
objectBizId
;
/**
* 文件元数据表唯一业务ID
*/
@TableField
(
"file_biz_id"
)
private
String
fileBizId
;
...
...
yd-oss-service/src/main/java/com/yd/oss/service/model/RelObjectMaterial.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
model
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* <p>
* 对象材料关系表
* </p>
*
* @author zxm
* @since 2025-12-17
*/
@Getter
@Setter
@TableName
(
"rel_object_material"
)
public
class
RelObjectMaterial
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 主键ID
*/
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 对象材料关系表唯一业务ID
*/
@TableField
(
"rel_object_material_biz_id"
)
private
String
relObjectMaterialBizId
;
/**
* 对象类型
*/
@TableField
(
"object_type"
)
private
String
objectType
;
/**
* 对象所属表名(预约表、新单跟进表等)
*/
@TableField
(
"object_table_name"
)
private
String
objectTableName
;
/**
* 对象名
*/
@TableField
(
"object_name"
)
private
String
objectName
;
/**
* 对象业务ID
*/
@TableField
(
"object_biz_id"
)
private
String
objectBizId
;
/**
* 材料信息表唯一业务ID
*/
@TableField
(
"material_biz_id"
)
private
String
materialBizId
;
/**
* 状态: YSC-已上传 WSC-未上传 DSC-待上传
*/
@TableField
(
"status"
)
private
String
status
;
/**
* 通用备注
*/
@TableField
(
"remark"
)
private
String
remark
;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField
(
"is_deleted"
)
private
Integer
isDeleted
;
/**
* 创建人ID
*/
@TableField
(
"creator_id"
)
private
String
creatorId
;
/**
* 更新人ID
*/
@TableField
(
"updater_id"
)
private
String
updaterId
;
/**
* 创建时间
*/
@TableField
(
"create_time"
)
private
LocalDateTime
createTime
;
/**
* 更新时间
*/
@TableField
(
"update_time"
)
private
LocalDateTime
updateTime
;
}
yd-oss-service/src/main/java/com/yd/oss/service/service/IMaterialService.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
service
;
import
com.yd.oss.service.dto.MaterialDto
;
import
com.yd.oss.service.model.Material
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
/**
* <p>
* 材料基础信息 服务类
* </p>
*
* @author zxm
* @since 2025-12-17
*/
public
interface
IMaterialService
extends
IService
<
Material
>
{
List
<
Material
>
queryList
(
MaterialDto
dto
);
}
yd-oss-service/src/main/java/com/yd/oss/service/service/IOssFileService.java
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
service
;
import
com.yd.oss.service.dto.OssFileDto
;
import
com.yd.oss.service.model.OssFile
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.yd.oss.service.model.OssOperationLog
;
...
...
@@ -31,4 +32,8 @@ public interface IOssFileService extends IService<OssFile> {
List
<
OssFile
>
getProviderFiles
(
Long
providerId
);
List
<
OssOperationLog
>
getOperationLogsByFileId
(
Long
fileId
);
List
<
OssFile
>
queryList
(
OssFileDto
dto
);
OssFile
queryOne
(
String
fileBizId
);
}
yd-oss-service/src/main/java/com/yd/oss/service/service/IRelObjectMaterialService.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
com.yd.oss.feign.response.ApiRelObjectMaterialPageResponse
;
import
com.yd.oss.service.model.RelObjectMaterial
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
/**
* <p>
* 对象材料关系表 服务类
* </p>
*
* @author zxm
* @since 2025-12-17
*/
public
interface
IRelObjectMaterialService
extends
IService
<
RelObjectMaterial
>
{
IPage
<
ApiRelObjectMaterialPageResponse
>
page
(
Page
<
ApiRelObjectMaterialPageResponse
>
page
,
ApiRelObjectMaterialPageRequest
request
);
RelObjectMaterial
queryOne
(
String
relObjectMaterialBizId
);
Boolean
delByObjectBizId
(
String
objectBizId
);
}
yd-oss-service/src/main/java/com/yd/oss/service/service/OssService.java
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
service
;
import
com.yd.oss.feign.request.ApiUploadFileRequest
;
import
com.yd.oss.service.dto.FileMetadata
;
import
com.yd.oss.service.dto.OssUploadFileDto
;
import
com.yd.oss.service.dto.OssUploadFileReqDto
;
import
com.yd.oss.service.dto.OssUploadFileResDto
;
import
com.yd.oss.service.dto.UploadResult
;
import
com.yd.oss.service.model.OssProvider
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.InputStream
;
import
java.time.Duration
;
...
...
@@ -13,7 +16,9 @@ import java.time.Duration;
public
interface
OssService
{
// 上传文件
OssUploadFileDto
uploadFile
(
InputStream
inputStream
,
String
fileName
,
String
bucketName
,
String
uploadUser
,
String
type
);
OssUploadFileResDto
uploadFile
(
InputStream
inputStream
,
String
fileName
,
String
bucketName
,
String
uploadUser
,
String
type
);
OssUploadFileResDto
uploadFileBody
(
MultipartFile
file
,
OssUploadFileReqDto
reqDto
);
// 上传文件(使用默认存储桶)
String
uploadFile
(
InputStream
inputStream
,
String
fileName
,
String
uploadUser
);
...
...
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/AliYunOssServiceImpl.java
View file @
d788e771
...
...
@@ -7,10 +7,13 @@ import com.aliyun.oss.model.OSSObject;
import
com.aliyun.oss.model.ObjectMetadata
;
import
com.aliyun.oss.model.PutObjectRequest
;
import
com.yd.common.enums.CommonEnum
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.common.utils.IpUtil
;
import
com.yd.common.utils.RandomStringGenerator
;
import
com.yd.oss.feign.request.ApiUploadFileRequest
;
import
com.yd.oss.service.dto.FileMetadata
;
import
com.yd.oss.service.dto.OssUploadFileDto
;
import
com.yd.oss.service.dto.OssUploadFileReqDto
;
import
com.yd.oss.service.dto.OssUploadFileResDto
;
import
com.yd.oss.service.dto.UploadResult
;
import
com.yd.oss.service.model.OssFile
;
import
com.yd.oss.service.model.OssOperationLog
;
...
...
@@ -24,14 +27,11 @@ import org.apache.commons.lang3.StringUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.*
;
import
java.net.URL
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.Date
;
import
java.util.UUID
;
...
...
@@ -68,9 +68,9 @@ public class AliYunOssServiceImpl implements OssService {
* @return
*/
@Override
public
OssUploadFileDto
uploadFile
(
InputStream
inputStream
,
String
fileName
,
String
bucketName
,
String
uploadUser
,
String
type
)
{
OssUploadFile
Dto
ossUploadFileDto
=
new
OssUploadFile
Dto
();
public
OssUploadFile
Res
Dto
uploadFile
(
InputStream
inputStream
,
String
fileName
,
String
bucketName
,
String
uploadUser
,
String
type
)
{
OssUploadFile
ResDto
ossUploadFileDto
=
new
OssUploadFileRes
Dto
();
long
startTime
=
System
.
currentTimeMillis
();
// 记录开始时间
String
operationResult
=
"success"
;
// 操作结果
String
errorMessage
=
null
;
// 错误信息
...
...
@@ -166,6 +166,138 @@ public class AliYunOssServiceImpl implements OssService {
}
/**
* 上传文件 - body入参方式(新,推荐)
* @param file
* @param reqDto
* @return
*/
@Override
public
OssUploadFileResDto
uploadFileBody
(
MultipartFile
file
,
OssUploadFileReqDto
reqDto
)
{
OssUploadFileResDto
ossUploadFileDto
=
new
OssUploadFileResDto
();
// 记录开始时间
long
startTime
=
System
.
currentTimeMillis
();
// 操作结果
String
operationResult
=
"success"
;
// 错误信息
String
errorMessage
=
null
;
// 文件记录
OssFile
ossFile
=
null
;
//文件输入流
InputStream
inputStream
=
null
;
//原始文件名
String
fileName
=
file
.
getOriginalFilename
();
//文件扩展名
String
type
=
FileUtil
.
getFileType
(
file
.
getOriginalFilename
());
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
throw
new
BusinessException
(
"文件输入流解析异常:{}"
);
}
try
{
// 读取输入流到字节数组
byte
[]
fileData
=
FileUtil
.
readInputStreamToBytes
(
inputStream
);
long
fileSize
=
fileData
.
length
;
ByteArrayInputStream
byteArrayInputStream
=
new
ByteArrayInputStream
(
fileData
);
// 生成文件key
String
fileKey
=
FileUtil
.
generateFileKey
(
fileName
,
type
);
//默认阿里云的桶名
String
actualBucket
=
defaultBucket
;
//获取文件扩展名
String
fileType
=
FileUtil
.
getFileType
(
fileName
);
// 创建上传请求
ObjectMetadata
metadata
=
new
ObjectMetadata
();
metadata
.
setContentLength
(
fileSize
);
metadata
.
setContentType
(
FileUtil
.
getContentType
(
fileType
));
// 设置公共读权限(如果需要)
// metadata.setObjectAcl(CannedAccessControlList.PublicRead);
PutObjectRequest
putObjectRequest
=
new
PutObjectRequest
(
actualBucket
,
fileKey
,
byteArrayInputStream
,
metadata
);
// 上传文件
ossClient
.
putObject
(
putObjectRequest
);
// 创建文件记录
ossFile
=
new
OssFile
();
ossFile
.
setFileBizId
(
RandomStringGenerator
.
generateBizId16
(
CommonEnum
.
UID_TYPE_OSS_FILE
.
getCode
()));
ossFile
.
setFileKey
(
fileKey
);
ossFile
.
setOriginalName
(
fileName
);
ossFile
.
setFileSize
(
fileSize
);
ossFile
.
setFileType
(
fileType
);
ossFile
.
setProviderBizId
(
currentProvider
.
getProviderBizId
());
ossFile
.
setBucketName
(
actualBucket
);
ossFile
.
setUploadUser
(
reqDto
.
getUploadUser
());
//存储对象信息
ossFile
.
setObjectBizId
(
reqDto
.
getObjectBizId
());
ossFile
.
setObjectName
(
reqDto
.
getObjectName
());
ossFile
.
setObjectTableName
(
reqDto
.
getObjectTableName
());
ossFile
.
setObjectType
(
reqDto
.
getObjectType
());
// 保存文件元数据到数据库
ossFileService
.
saveFileMetadata
(
ossFile
);
// 创建操作日志
OssOperationLog
operationLog
=
new
OssOperationLog
();
operationLog
.
setFileBizId
(
ossFile
.
getFileBizId
());
operationLog
.
setOperationType
(
"upload"
);
operationLog
.
setOperationUser
(
reqDto
.
getUploadUser
());
operationLog
.
setOperationResult
(
operationResult
);
operationLog
.
setErrorMessage
(
errorMessage
);
operationLog
.
setClientIp
(
IpUtil
.
getClientIp
());
operationLog
.
setCostTime
(
System
.
currentTimeMillis
()
-
startTime
);
// 保存操作日志到数据库
ossFileService
.
saveOperationLog
(
operationLog
);
log
.
info
(
"文件上传成功: {} -> {}/{}"
,
fileName
,
actualBucket
,
fileKey
);
ossUploadFileDto
.
setFileBizId
(
ossFile
.
getFileBizId
());
ossUploadFileDto
.
setFileKey
(
fileKey
);
ossUploadFileDto
.
setOriginalName
(
fileName
);
// 如果设置了公共读,可以直接拼接URL
String
publicUrl
=
"https://"
+
actualBucket
+
"."
+
defaultEndpoint
+
"/"
+
fileKey
;
ossUploadFileDto
.
setUrl
(
publicUrl
);
ossUploadFileDto
.
setFileSize
(
fileSize
);
ossUploadFileDto
.
setFileType
(
fileType
);
return
ossUploadFileDto
;
}
catch
(
Exception
e
)
{
// 标记操作失败
operationResult
=
"failure"
;
// 记录错误信息
errorMessage
=
e
.
getMessage
();
log
.
error
(
"阿里云OSS上传文件失败: {}"
,
fileName
,
e
);
throw
new
RuntimeException
(
"阿里云OSS上传文件失败: "
+
fileName
,
e
);
}
finally
{
// 关闭资源
FileUtil
.
closeQuietly
(
inputStream
);
// 记录失败日志
if
(
"failure"
.
equals
(
operationResult
))
{
OssOperationLog
operationLog
=
new
OssOperationLog
();
if
(
ossFile
!=
null
)
{
operationLog
.
setFileBizId
(
ossFile
.
getFileBizId
());
}
else
{
// 使用无效文件ID
operationLog
.
setFileBizId
(
"-1"
);
}
operationLog
.
setOperationType
(
"upload"
);
operationLog
.
setOperationUser
(
reqDto
.
getUploadUser
());
operationLog
.
setOperationResult
(
operationResult
);
operationLog
.
setErrorMessage
(
errorMessage
);
operationLog
.
setClientIp
(
IpUtil
.
getClientIp
());
operationLog
.
setCostTime
(
System
.
currentTimeMillis
()
-
startTime
);
// 保存操作日志到数据库
ossFileService
.
saveOperationLog
(
operationLog
);
}
}
}
/**
* 上传文件(使用默认存储桶)
* @param inputStream
* @param fileName
...
...
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/ExcelExportServiceImpl.java
View file @
d788e771
...
...
@@ -6,7 +6,7 @@ import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import
cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity
;
import
com.yd.oss.feign.dto.ExportParam
;
import
com.yd.oss.feign.dto.ExportResult
;
import
com.yd.oss.service.dto.OssUploadFileDto
;
import
com.yd.oss.service.dto.OssUploadFile
Res
Dto
;
import
com.yd.oss.service.service.ExcelExportService
;
import
com.yd.oss.service.service.OssService
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -110,7 +110,7 @@ public class ExcelExportServiceImpl implements ExcelExportService {
String
fileName
=
generateExcelFileName
(
exportParam
.
getFileName
());
// 调用OSS服务上传文件到云端存储
OssUploadFileDto
uploadResult
=
ossService
.
uploadFile
(
OssUploadFile
Res
Dto
uploadResult
=
ossService
.
uploadFile
(
inputStream
,
// Excel文件输入流
fileName
,
// 生成的文件名
""
,
// 存储桶名称(空字符串表示使用默认存储桶)
...
...
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/FileUploadService.java
deleted
100644 → 0
View file @
ad19eed7
package
com
.
yd
.
oss
.
service
.
service
.
impl
;
import
com.aliyun.oss.OSS
;
import
com.aliyun.oss.model.PutObjectRequest
;
import
com.yd.oss.service.dao.ProductFileMapper
;
import
com.yd.oss.service.model.ProductFile
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.compress.utils.IOUtils
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpGet
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.io.ByteArrayInputStream
;
import
java.io.InputStream
;
import
java.net.URL
;
import
java.util.List
;
import
java.util.UUID
;
@Service
@Slf4j
public
class
FileUploadService
{
@Autowired
private
OSS
ossClient
;
@Autowired
private
ProductFileMapper
productFileMapper
;
@Autowired
private
String
defaultBucket
;
// 从配置注入默认存储桶
@Autowired
private
String
defaultEndpoint
;
// 注入默认服务端点
/**
* 批量处理URL上传
*/
public
void
batchProcessUrls
()
{
List
<
ProductFile
>
productFileList
=
productFileMapper
.
selectList
(
null
);
for
(
ProductFile
productFile
:
productFileList
)
{
try
{
// 处理单个URL
processSingleUrl
(
productFile
);
}
catch
(
Exception
e
)
{
log
.
error
(
"处理URL失败: {}, 错误: {}"
,
productFile
.
getOldFileUrl
(),
e
.
getMessage
());
}
}
}
/**
* 处理单个URL
*/
private
void
processSingleUrl
(
ProductFile
productFile
)
throws
Exception
{
// 1. 下载文件
byte
[]
fileContent
=
downloadFile
(
productFile
.
getOldFileUrl
());
// 2. 生成OSS文件名(使用原始URL路径)
String
ossFileName
=
generateOssFileName
(
productFile
.
getOldFileUrl
(),
""
);
// 3. 上传到阿里云OSS
String
ossUrl
=
uploadToAliOss
(
fileContent
,
ossFileName
);
// 4. 更新数据库
productFile
.
setNewFileUrl
(
ossUrl
);
productFileMapper
.
updateById
(
productFile
);
log
.
info
(
"文件上传成功: {} -> {}"
,
productFile
.
getFileName
(),
ossUrl
);
}
/**
* 下载文件
*/
private
byte
[]
downloadFile
(
String
fileUrl
)
throws
Exception
{
CloseableHttpClient
httpClient
=
HttpClients
.
createDefault
();
HttpGet
httpGet
=
new
HttpGet
(
fileUrl
);
try
(
CloseableHttpResponse
response
=
httpClient
.
execute
(
httpGet
);
InputStream
inputStream
=
response
.
getEntity
().
getContent
())
{
return
IOUtils
.
toByteArray
(
inputStream
);
}
finally
{
httpClient
.
close
();
}
}
/**
* 生成OSS文件名 - 保留原始URL路径结构
*/
private
String
generateOssFileName
(
String
originalUrl
,
String
originalFileName
)
{
try
{
// 解析原始URL,提取路径部分
URL
url
=
new
URL
(
originalUrl
);
String
path
=
url
.
getPath
();
// 得到类似:/wslucky/product/2024/12/27/9ba093ee-be9a-4291-aa86-d6a1995e16f9.pdf
// 移除开头的斜杠(如果有)
if
(
path
.
startsWith
(
"/"
))
{
path
=
path
.
substring
(
1
);
}
// 如果路径为空,使用备选方案
if
(
path
.
isEmpty
())
{
return
generateFallbackFileName
(
originalFileName
);
}
return
path
;
}
catch
(
Exception
e
)
{
log
.
warn
(
"解析URL路径失败: {}, 使用备选方案"
,
originalUrl
,
e
);
return
generateFallbackFileName
(
originalFileName
);
}
}
/**
* 备选文件名生成方案
*/
private
String
generateFallbackFileName
(
String
originalFileName
)
{
String
fileExtension
=
originalFileName
.
substring
(
originalFileName
.
lastIndexOf
(
"."
));
String
timestamp
=
String
.
valueOf
(
System
.
currentTimeMillis
());
String
randomStr
=
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
).
substring
(
0
,
8
);
return
"insurance/"
+
timestamp
+
"_"
+
randomStr
+
fileExtension
;
}
/**
* 上传到阿里云OSS
*/
private
String
uploadToAliOss
(
byte
[]
fileContent
,
String
ossFileName
)
{
// 创建上传请求
PutObjectRequest
putObjectRequest
=
new
PutObjectRequest
(
defaultBucket
,
ossFileName
,
new
ByteArrayInputStream
(
fileContent
));
// 上传文件
ossClient
.
putObject
(
putObjectRequest
);
// 生成访问URL
return
String
.
format
(
"https://%s.%s/%s"
,
defaultBucket
,
defaultEndpoint
,
ossFileName
);
}
}
\ No newline at end of file
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/MaterialServiceImpl.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.yd.oss.service.dto.MaterialDto
;
import
com.yd.oss.service.model.Material
;
import
com.yd.oss.service.dao.MaterialMapper
;
import
com.yd.oss.service.service.IMaterialService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* <p>
* 材料基础信息 服务实现类
* </p>
*
* @author zxm
* @since 2025-12-17
*/
@Service
public
class
MaterialServiceImpl
extends
ServiceImpl
<
MaterialMapper
,
Material
>
implements
IMaterialService
{
@Override
public
List
<
Material
>
queryList
(
MaterialDto
dto
)
{
return
this
.
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
Material
>()
.
eq
(
Material:
:
getObjectType
,
dto
.
getObjectType
()));
}
}
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/OssFileServiceImpl.java
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.yd.common.exception.BusinessException
;
import
com.yd.oss.service.dao.OssOperationLogMapper
;
import
com.yd.oss.service.dto.OssFileDto
;
import
com.yd.oss.service.model.OssFile
;
import
com.yd.oss.service.dao.OssFileMapper
;
import
com.yd.oss.service.model.OssOperationLog
;
import
com.yd.oss.service.service.IOssFileService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.util.Date
;
import
java.util.List
;
...
...
@@ -30,10 +34,10 @@ import java.util.List;
@Service
public
class
OssFileServiceImpl
extends
ServiceImpl
<
OssFileMapper
,
OssFile
>
implements
IOssFileService
{
@
Autowired
@
Resource
private
OssFileMapper
ossFileMapper
;
@
Autowired
@
Resource
private
OssOperationLogMapper
ossOperationLogMapper
;
/**
...
...
@@ -128,5 +132,23 @@ public class OssFileServiceImpl extends ServiceImpl<OssFileMapper, OssFile> impl
return
ossOperationLogMapper
.
selectByFileId
(
fileId
);
}
/**
* 查询列表
* @param dto
* @return
*/
@Override
public
List
<
OssFile
>
queryList
(
OssFileDto
dto
)
{
List
<
OssFile
>
list
=
baseMapper
.
selectList
(
new
LambdaQueryWrapper
<
OssFile
>()
.
eq
(
StringUtils
.
isNotBlank
(
dto
.
getObjectBizId
()),
OssFile:
:
getObjectBizId
,
dto
.
getObjectBizId
())
);
return
list
;
}
@Override
public
OssFile
queryOne
(
String
fileBizId
)
{
return
this
.
getOne
(
new
LambdaQueryWrapper
<
OssFile
>().
eq
(
OssFile:
:
getFileBizId
,
fileBizId
));
}
}
yd-oss-service/src/main/java/com/yd/oss/service/service/impl/RelObjectMaterialServiceImpl.java
0 → 100644
View file @
d788e771
package
com
.
yd
.
oss
.
service
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.yd.oss.feign.request.ApiRelObjectMaterialPageRequest
;
import
com.yd.oss.feign.response.ApiRelObjectMaterialPageResponse
;
import
com.yd.oss.service.model.RelObjectMaterial
;
import
com.yd.oss.service.dao.RelObjectMaterialMapper
;
import
com.yd.oss.service.service.IRelObjectMaterialService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* <p>
* 对象材料关系表 服务实现类
* </p>
*
* @author zxm
* @since 2025-12-17
*/
@Service
public
class
RelObjectMaterialServiceImpl
extends
ServiceImpl
<
RelObjectMaterialMapper
,
RelObjectMaterial
>
implements
IRelObjectMaterialService
{
@Override
public
IPage
<
ApiRelObjectMaterialPageResponse
>
page
(
Page
<
ApiRelObjectMaterialPageResponse
>
page
,
ApiRelObjectMaterialPageRequest
request
)
{
return
baseMapper
.
page
(
page
,
request
);
}
@Override
public
RelObjectMaterial
queryOne
(
String
relObjectMaterialBizId
)
{
return
this
.
getOne
(
new
LambdaQueryWrapper
<
RelObjectMaterial
>()
.
eq
(
RelObjectMaterial:
:
getRelObjectMaterialBizId
,
relObjectMaterialBizId
));
}
@Override
public
Boolean
delByObjectBizId
(
String
objectBizId
)
{
return
this
.
remove
(
new
LambdaQueryWrapper
<
RelObjectMaterial
>().
eq
(
RelObjectMaterial:
:
getObjectBizId
,
objectBizId
));
}
}
yd-oss-service/src/main/java/com/yd/oss/service/utils/MyBatisPlusCodeGenerator.java
View file @
d788e771
...
...
@@ -5,11 +5,11 @@ import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
public
class
MyBatisPlusCodeGenerator
{
public
static
void
main
(
String
[]
args
)
{
FastAutoGenerator
.
create
(
"jdbc:mysql://
localhost:3306/test?serverTimezone=GMT%2B8"
,
"root"
,
"123456
"
)
FastAutoGenerator
.
create
(
"jdbc:mysql://
139.224.145.34:3308/yd_oss?serverTimezone=GMT%2B8"
,
"root"
,
"Zxm7320017
"
)
.
globalConfig
(
builder
->
{
builder
.
author
(
"zxm"
)
.
outputDir
(
"src/main/java/com/yd/oss/service"
);
//
.outputDir("D:/soft/ideaproject/v2/yd-oss/yd-oss-service/src/main/java");
//
.outputDir("src/main/java/com/yd/oss/service");
.
outputDir
(
"D:/soft/ideaproject/v2/yd-oss/yd-oss-service/src/main/java"
);
})
.
packageConfig
(
builder
->
{
builder
.
parent
(
"com.yd.oss.service"
)
...
...
@@ -21,7 +21,7 @@ public class MyBatisPlusCodeGenerator {
})
.
strategyConfig
(
builder
->
{
builder
.
addInclude
(
"
product_file
"
"
material"
,
"rel_object_material
"
)
.
entityBuilder
()
.
enableLombok
()
...
...
yd-oss-service/src/main/resources/mappers/MaterialMapper.xml
0 → 100644
View file @
d788e771
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.yd.oss.service.dao.MaterialMapper"
>
</mapper>
yd-oss-service/src/main/resources/mappers/RelObjectMaterialMapper.xml
0 → 100644
View file @
d788e771
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.yd.oss.service.dao.RelObjectMaterialMapper"
>
<select
id=
"page"
resultType=
"com.yd.oss.feign.response.ApiRelObjectMaterialPageResponse"
>
select rom.id,rom.rel_object_material_biz_id,rom.material_biz_id
rom.status,m.data_person,m.data_type,m.precautions
from rel_object_material rom
left join material m on m.material_biz_id = rom.material_biz_id and m.is_deleted = 0
<where>
<if
test=
"request.objectBizId != null and request.objectBizId != ''"
>
and rom.object_biz_id = #{request.objectBizId}
</if>
and rom.is_deleted = 0
</where>
</select>
</mapper>
yd-oss-service/yd-oss-service.iml
View file @
d788e771
...
...
@@ -68,6 +68,7 @@
<orderEntry
type=
"library"
name=
"Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.2"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-csf-feign:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-question-feign:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-base-feign:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.yd:yd-auth-core:1.0-SNAPSHOT"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.xiaoymin:knife4j-openapi3-spring-boot-starter:4.3.0"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"Maven: com.github.xiaoymin:knife4j-core:4.3.0"
level=
"project"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment