Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
pms
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
pms
Commits
54dd9c08
提交
54dd9c08
authored
6月 08, 2023
作者:
xiaowang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
加入用户token及 服务数据
上级
b3e8c575
隐藏空白字符变更
内嵌
并排
正在显示
28 个修改的文件
包含
2010 行增加
和
952 行删除
+2010
-952
pom.xml
pom.xml
+203
-103
DataFilterYml.java
src/main/java/com/mmc/pms/auth/DataFilterYml.java
+26
-0
MvcConfiguration.java
src/main/java/com/mmc/pms/auth/MvcConfiguration.java
+23
-0
NotCheckUriConfig.java
src/main/java/com/mmc/pms/auth/NotCheckUriConfig.java
+23
-0
TokenCheckHandleInterceptor.java
...in/java/com/mmc/pms/auth/TokenCheckHandleInterceptor.java
+99
-0
LoginSuccessDTO.java
src/main/java/com/mmc/pms/auth/dto/LoginSuccessDTO.java
+30
-0
BackstageTaskServiceController.java
...om/mmc/pms/controller/BackstageTaskServiceController.java
+63
-0
BaseController.java
src/main/java/com/mmc/pms/controller/BaseController.java
+58
-0
PartUploadController.java
...ain/java/com/mmc/pms/controller/PartUploadController.java
+189
-188
UploadController.java
src/main/java/com/mmc/pms/controller/UploadController.java
+483
-483
BackstageTaskServiceDao.java
src/main/java/com/mmc/pms/dao/BackstageTaskServiceDao.java
+25
-0
ProductDao.java
src/main/java/com/mmc/pms/dao/ProductDao.java
+2
-0
BaseEntity.java
src/main/java/com/mmc/pms/entity/BaseEntity.java
+13
-13
ProductSkuDO.java
src/main/java/com/mmc/pms/entity/ProductSkuDO.java
+1
-0
RepoCashDO.java
src/main/java/com/mmc/pms/entity/RepoCashDO.java
+49
-49
ServiceDO.java
src/main/java/com/mmc/pms/entity/ServiceDO.java
+93
-0
JsonUtil.java
src/main/java/com/mmc/pms/json/JsonUtil.java
+95
-95
ServiceQO.java
src/main/java/com/mmc/pms/model/qo/ServiceQO.java
+52
-0
ServiceVO.java
src/main/java/com/mmc/pms/model/work/vo/ServiceVO.java
+60
-0
BackstageTaskService.java
src/main/java/com/mmc/pms/service/BackstageTaskService.java
+23
-0
BackstageTaskServiceImpl.java
...va/com/mmc/pms/service/Impl/BackstageTaskServiceImpl.java
+56
-0
ProductServiceImpl.java
...ain/java/com/mmc/pms/service/Impl/ProductServiceImpl.java
+3
-3
BizException.java
src/main/java/com/mmc/pms/util/BizException.java
+90
-0
PathUtil.java
src/main/java/com/mmc/pms/util/PathUtil.java
+16
-0
application-local.yml
src/main/resources/application-local.yml
+14
-9
ProductDao.xml
src/main/resources/mapper/ProductDao.xml
+24
-9
BackstageTaskServiceDao.xml
src/main/resources/mapper/work/BackstageTaskServiceDao.xml
+189
-0
not-check.yml
src/main/resources/not-check.yml
+8
-0
没有找到文件。
pom.xml
浏览文件 @
54dd9c08
...
...
@@ -5,185 +5,285 @@
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.
7.6
</version>
<relativePath/>
<!-- lookup parent from repository -->
<version>
2.
2.6.RELEASE
</version>
<relativePath/>
</parent>
<groupId>
com.mmc
</groupId>
<artifactId>
pms
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
pms
</name>
<description>
pms
</description>
<properties>
<java.version>
1.8
</java.version>
<spring-cloud.version>
2021.0.3
</spring-cloud.version>
<spring-cloud.version>
Hoxton.SR6
</spring-cloud.version>
<springfox.version>
2.9.2
</springfox.version>
<spring-cloud-alibaba-seata.version>
2.2.1.RELEASE
</spring-cloud-alibaba-seata.version>
<seata.version>
1.1.0
</seata.version>
</properties>
<dependencies>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid
</artifactId>
<version>
1.1.22
</version>
</dependency>
<dependency>
<groupId>
javax.xml.bind
</groupId>
<artifactId>
jaxb-api
</artifactId>
<version>
2.3.0
</version>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
1.18.20
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-redis
</artifactId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<
!--<scope>runtime</scope>--
>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<
version>
1.2.83
</version
>
</dependency>
<dependency>
<groupId>
com.github.xiaoymin
</groupId>
<artifactId>
knife4j-spring-
ui
</artifactId>
<artifactId>
knife4j-spring-
boot-starter
</artifactId>
<version>
3.0.2
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
<groupId>
com.github.xiaoymin
</groupId>
<artifactId>
knife4j-spring-ui
</artifactId>
<version>
3.0.2
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
<dependency>
<groupId>
com.
baomidou
</groupId>
<artifactId>
mybatis-plus-boot-starter
</artifactId>
<version>
3.4.3.4
</version>
<groupId>
com.
alibaba.fastjson2
</groupId>
<artifactId>
fastjson2
</artifactId>
<version>
2.0.29
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-validation
</artifactId>
<version>
3.0.0
</version>
<!--<scope>compile</scope>-->
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-collections4
</artifactId>
<version>
4.4
</version>
</dependency>
<!--logback 日志 -->
<dependency>
<groupId>
org.projectlombo
k
</groupId>
<artifactId>
lo
mbok
</artifactId>
<
optional>
true
</optional
>
<groupId>
net.logstash.logbac
k
</groupId>
<artifactId>
lo
gstash-logback-encoder
</artifactId>
<
version>
5.3
</version
>
</dependency>
<!-- 引入 Web 功能 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
2.0.32
</version>
</dependency>
<dependency>
<groupId>
com.aliyun.oss
</groupId>
<artifactId>
aliyun-sdk-oss
</artifactId>
<version>
3.10.2
</version>
</dependency>
<!--<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.12</version>
</dependency>-->
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
3.12.0
</version>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<!-- 健康监控 -->
<dependency>
<groupId>
io.jsonwebtoken
</groupId>
<artifactId>
jjwt
</artifactId>
<version>
0.6.0
</version>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<!-- 引入 Feign, 可以以声明的方式调用微服务 -->
<dependency>
<groupId>
com.auth0
</groupId>
<artifactId>
java-jwt
</artifactId>
<version>
3.1.0
</version>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-openfeign
</artifactId>
</dependency>
<!-- 使用okhttp-feign-连接池技术 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-ao
p
</artifactId>
<groupId>
io.github.openfeign
</groupId>
<artifactId>
feign-okhtt
p
</artifactId>
</dependency>
<!--
swagger
-->
<!--
引入服务容错 Hystrix 的依赖
-->
<dependency>
<groupId>
com.github.xiaoymin
</groupId>
<artifactId>
knife4j-spring-boot-starter
</artifactId>
<version>
3.0.2
</version>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-netflix-hystrix
</artifactId>
<exclusions>
<exclusion>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- <dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-spring-boot-starter</artifactId>
<version>3.6.3</version>
</dependency>-->
<!-- mybatis驱动&Druid数据源-start -->
<dependency>
<groupId>
com.deepoove
</groupId>
<artifactId>
poi-tl
</artifactId>
<version>
1.12.0
</version>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid-spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-core
</artifactId>
<version>
5.8.16
</version>
<groupId>
org.mybatis.spring.boot
</groupId>
<artifactId>
mybatis-spring-boot-starter
</artifactId>
</dependency>
<!-- minio 相关依赖 -->
<dependency>
<groupId>
io.minio
</groupId>
<artifactId>
minio
</artifactId>
<version>
3.0.10
</version>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
</dependency>
<!--amqp的起步依赖-->
<!-- mybatis驱动&Druid数据源-end -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-amqp
</artifactId>
<artifactId>
spring-boot-devtools
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.
jetbrains.kotlin
</groupId>
<artifactId>
kotlin-stdlib
</artifactId>
<
version>
1.6.0
</version
>
<groupId>
org.
springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<
optional>
true
</optional
>
</dependency>
<dependency>
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
okhttp
</artifactId>
<version>
3.14.9
</version>
<scope>
compile
</scope>
<groupId>
org.redisson
</groupId>
<artifactId>
redisson-spring-boot-starter
</artifactId>
<version>
3.13.1
</version>
</dependency>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-openfeign
</artifactId>
<version>
2.2.9.RELEASE
</version>
<groupId>
com.baomidou
</groupId>
<artifactId>
mybatis-plus-boot-starter
</artifactId>
<version>
3.4.3.4
</version>
</dependency>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-netflix-hystrix
</artifactId>
<version>
2.2.9.RELEASE
</version>
<groupId>
com.aliyun.oss
</groupId>
<artifactId>
aliyun-sdk-oss
</artifactId>
<version>
3.10.2
</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-dependencies
</artifactId>
<version>
2021.0.6
</version>
<version>
${spring-cloud.version}
</version>
<type>
pom
</type>
<scope>
import
</scope>
</dependency>
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-seata
</artifactId>
<version>
${spring-cloud-alibaba-seata.version}
</version>
</dependency>
<dependency>
<groupId>
io.seata
</groupId>
<artifactId>
seata-spring-boot-starter
</artifactId>
<version>
${seata.version}
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid-spring-boot-starter
</artifactId>
<version>
1.1.10
</version>
</dependency>
<dependency>
<groupId>
org.mybatis.spring.boot
</groupId>
<artifactId>
mybatis-spring-boot-starter
</artifactId>
<version>
2.1.2
</version>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<version>
8.0.28
</version>
</dependency>
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-base
</artifactId>
<version>
4.1.0
</version>
</dependency>
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-web
</artifactId>
<version>
4.1.0
</version>
</dependency>
<dependency>
<groupId>
cn.afterturn
</groupId>
<artifactId>
easypoi-annotation
</artifactId>
<version>
4.1.0
</version>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-collections4
</artifactId>
<version>
4.4
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
3.1.3
</version>
</dependency>
<dependency>
<groupId>
com.aliyun.oss
</groupId>
<artifactId>
aliyun-sdk-oss
</artifactId>
<version>
3.10.2
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>
commons-fileupload
</groupId>
<artifactId>
commons-fileupload
</artifactId>
<version>
1.5
</version>
</dependency>
<dependency>
<groupId>
org.redisson
</groupId>
<artifactId>
redisson-spring-boot-starter
</artifactId>
<version>
3.13.1
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
<version>
31.1-jre
</version>
</dependency>
<dependency>
<groupId>
org.apache.poi
</groupId>
<artifactId>
poi
</artifactId>
<version>
4.1.1
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 配置远程仓库 -->
<repositories>
<repository>
<id>
spring-milestones
</id>
<name>
Spring Milestones
</name>
<url>
https://repo.spring.io/milestone
</url>
<snapshots>
<enabled>
false
</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
<resources>
<!--需要动态添加的资源 -->
<resource>
<directory>
src/main/resources
</directory>
<filtering>
true
</filtering>
<includes>
<!--读取打包命令中指定的环境 -->
<include>
**/*.yml
</include>
<include>
**/*.xml
</include>
<include>
**/*.properties
</include>
</includes>
</resource>
</resources>
</build>
</project>
src/main/java/com/mmc/pms/auth/DataFilterYml.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
auth
;
import
org.springframework.beans.factory.config.YamlPropertiesFactoryBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.support.PropertySourcesPlaceholderConfigurer
;
import
org.springframework.core.io.ClassPathResource
;
import
java.util.Objects
;
/**
* Author: geDuo
* Date: 2022/6/2 17:26
*/
@Configuration
public
class
DataFilterYml
{
@Bean
public
static
PropertySourcesPlaceholderConfigurer
loadYml
()
{
PropertySourcesPlaceholderConfigurer
configurer
=
new
PropertySourcesPlaceholderConfigurer
();
YamlPropertiesFactoryBean
yaml
=
new
YamlPropertiesFactoryBean
();
yaml
.
setResources
(
new
ClassPathResource
(
"not-check.yml"
));
configurer
.
setProperties
(
Objects
.
requireNonNull
(
yaml
.
getObject
()));
return
configurer
;
}
}
src/main/java/com/mmc/pms/auth/MvcConfiguration.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
auth
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
/**
* @author: zj
* @Date: 2023/5/28 10:52
*/
@Configuration
public
class
MvcConfiguration
implements
WebMvcConfigurer
{
@Autowired
private
TokenCheckHandleInterceptor
tokenCheckHandleInterceptor
;
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
registry
.
addInterceptor
(
tokenCheckHandleInterceptor
);
WebMvcConfigurer
.
super
.
addInterceptors
(
registry
);
}
}
src/main/java/com/mmc/pms/auth/NotCheckUriConfig.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
auth
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.PropertySource
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/5/28 13:54
*/
@Data
@Configuration
@ConfigurationProperties
(
prefix
=
"data-filter"
,
ignoreUnknownFields
=
false
)
@PropertySource
(
"classpath:not-check.yml"
)
public
class
NotCheckUriConfig
{
// 不需要验证token的请求地址
private
List
<
String
>
notAuthPath
;
// 不需要验证token的请求地址;// 不需要验证token的请求地址
private
List
<
String
>
uploadPath
;
}
src/main/java/com/mmc/pms/auth/TokenCheckHandleInterceptor.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
auth
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
import
com.mmc.pms.common.ResultBody
;
import
com.mmc.pms.common.ResultEnum
;
import
com.mmc.pms.util.PathUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.PrintWriter
;
/**
* @author: zj
* @Date: 2023/5/28 10:46
*/
@Slf4j
@Component
public
class
TokenCheckHandleInterceptor
implements
HandlerInterceptor
{
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
@Autowired
private
NotCheckUriConfig
notCheckUriConfig
;
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
String
requestURI
=
request
.
getRequestURI
();
// //根据uri确认是否要拦截
if
(!
shouldFilter
(
requestURI
))
{
return
true
;
}
String
token
=
request
.
getHeader
(
"token"
);
if
(
StringUtils
.
isBlank
(
token
))
{
exceptionProcess
(
response
);
return
false
;
}
String
tokenJson
=
stringRedisTemplate
.
opsForValue
().
get
(
token
);
if
(
StringUtils
.
isBlank
(
tokenJson
))
{
exceptionProcess
(
response
);
return
false
;
}
//
// String serverName = request.getServerName();
// String remoteHost = request.getRemoteHost();
// log.info("hostName: {}", hostName);
// log.info("serverName: {}", serverName);
// log.info("remoteHost: {}", remoteHost);
// log.info("forwardedFor: {}", forwardedFor);
// log.info("forwardedHost: {}", forwardedHost);
// if (hostName.equals("iuav.mmcuav.cn") || hostName.equals("test.iuav.mmcuav.cn") || hostName.equals("www.iuav.shop") || hostName.equals("test.iuav.shop")){
// String token = request.getHeader("token");
// if (StringUtils.isBlank(token)){
// exceptionProcess(response);
// return false;
// }
// String tokenJson = stringRedisTemplate.opsForValue().get(token);
// if (StringUtils.isBlank(tokenJson)){
// exceptionProcess(response);
// return false;
// }
// return true;
// }
//测试-打印请求信息
return
true
;
}
@Override
public
void
postHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
ModelAndView
modelAndView
)
throws
Exception
{
}
@Override
public
void
afterCompletion
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
Exception
ex
)
throws
Exception
{
}
public
void
exceptionProcess
(
HttpServletResponse
response
)
throws
Exception
{
response
.
setContentType
(
"application/json;charset=utf-8"
);
PrintWriter
writer
=
response
.
getWriter
();
writer
.
write
(
ResultBody
.
error
(
ResultEnum
.
LOGIN_ACCOUNT_STATUS_ERROR
).
toString
());
writer
.
close
();
}
private
boolean
shouldFilter
(
String
path
)
{
// 路径与配置的相匹配,则执行过滤
for
(
String
pathPattern
:
notCheckUriConfig
.
getNotAuthPath
())
{
if
(
PathUtil
.
isPathMatch
(
pathPattern
,
path
))
{
// 如果匹配
return
false
;
}
}
return
true
;
}
}
src/main/java/com/mmc/pms/auth/dto/LoginSuccessDTO.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
auth
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月31日 下午8:06:14
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
LoginSuccessDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1200834589953161925L
;
private
String
token
;
private
Integer
userAccountId
;
private
String
accountNo
;
private
Integer
portType
;
private
String
uid
;
private
String
phoneNum
;
private
String
userName
;
private
String
nickName
;
// private RoleInfoDTO roleInfo;
}
src/main/java/com/mmc/pms/controller/BackstageTaskServiceController.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
controller
;
import
com.mmc.pms.common.ResultBody
;
import
com.mmc.pms.model.group.Create
;
import
com.mmc.pms.model.group.Update
;
import
com.mmc.pms.model.qo.ServiceQO
;
import
com.mmc.pms.model.work.vo.ServiceVO
;
import
com.mmc.pms.service.BackstageTaskService
;
import
io.swagger.annotations.*
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @Author LW
* @date 2023/6/6 10:41
* 概要:
*/
@Api
(
tags
=
{
"后台-服务管理-模块"
})
@RestController
@RequestMapping
(
"/backstage/work"
)
public
class
BackstageTaskServiceController
extends
BaseController
{
@Resource
private
BackstageTaskService
backstageTaskService
;
@ApiOperation
(
value
=
"新增作业服务"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"addWorkService"
)
public
ResultBody
addWorkService
(
@Validated
(
Create
.
class
)
@RequestBody
ServiceVO
param
,
HttpServletRequest
request
)
{
return
backstageTaskService
.
addWorkService
(
param
,
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
());
}
@ApiOperation
(
value
=
"修改作业服务"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"updateWorkService"
)
public
ResultBody
updateWorkService
(
@Validated
(
Update
.
class
)
@RequestBody
ServiceVO
param
)
{
return
backstageTaskService
.
updateById
(
param
);
}
@ApiOperation
(
value
=
"删除作业服务"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"deleteWorkService"
)
public
ResultBody
deleteWorkService
(
@ApiParam
(
"作业服务id"
)
@RequestParam
(
value
=
"id"
)
Integer
id
)
{
return
backstageTaskService
.
deleteById
(
id
);
}
@ApiOperation
(
value
=
"查询作业服务"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"queryWorkService"
)
public
ResultBody
queryWorkService
(
@ApiParam
(
"作业服务id"
)
@RequestParam
(
value
=
"id"
)
Integer
id
)
{
return
backstageTaskService
.
queryById
(
id
);
}
@ApiOperation
(
value
=
"查询工作服务列表"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"queryWorkServiceList"
)
public
ResultBody
queryWorkServiceList
(
@Validated
(
Create
.
class
)
@RequestBody
ServiceQO
param
,
HttpServletRequest
request
)
{
return
backstageTaskService
.
queryWorkServiceList
(
param
,
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
());
}
}
src/main/java/com/mmc/pms/controller/BaseController.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
controller
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mmc.pms.auth.dto.LoginSuccessDTO
;
import
com.mmc.pms.common.ResultEnum
;
import
com.mmc.pms.util.BizException
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @author: zj
* @Date: 2023/5/25 18:11
*/
public
abstract
class
BaseController
{
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
/**
* 解析token,获取用户信息
* @param request
* @return
*/
// public BaseAccountDTO getUserLoginInfo(HttpServletRequest request) {
// String token = request.getHeader("token");
// try {
// Claims claims = JwtUtil.parseJwt(token);
// String userId = claims.get(JwtConstant.USER_ACCOUNT_ID).toString();
//// String roleId = claims.get("").toString();
// String tokenType = claims.get(JwtConstant.TOKEN_TYPE).toString();
// return BaseAccountDTO.builder().id(Integer.parseInt(userId)).tokenPort(tokenType).build();
// }catch (Exception e){
// throw new BizException("Invalid token");
// }
// }
/**
* 使用token从redis获取用户信息
*
* @param request
* @return
*/
public
LoginSuccessDTO
getUserLoginInfoFromRedis
(
HttpServletRequest
request
)
{
String
token
=
request
.
getHeader
(
"token"
);
if
(
StringUtils
.
isBlank
(
token
))
{
throw
new
BizException
(
ResultEnum
.
LOGIN_ACCOUNT_STATUS_ERROR
);
}
String
json
=
stringRedisTemplate
.
opsForValue
().
get
(
token
);
if
(
StringUtils
.
isBlank
(
json
))
{
throw
new
BizException
(
ResultEnum
.
LOGIN_ACCOUNT_STATUS_ERROR
);
}
LoginSuccessDTO
loginSuccessDTO
=
JSONObject
.
parseObject
(
json
,
LoginSuccessDTO
.
class
);
return
loginSuccessDTO
;
}
}
src/main/java/com/mmc/pms/controller/PartUploadController.java
浏览文件 @
54dd9c08
...
...
@@ -32,196 +32,197 @@ import java.util.List;
@RequestMapping
(
"/partupload"
)
public
class
PartUploadController
{
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
@ApiOperation
(
value
=
"初始化分片上传"
)
@GetMapping
(
"/initPartUpload"
)
public
ResultBody
initPartUpload
(
@RequestParam
String
fileName
,
HttpServletRequest
httpRequest
)
{
// 创建OSSClient实例。
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
StringBuffer
objectName
=
new
StringBuffer
();
objectName
.
append
(
OssConstant
.
BUCKET
);
objectName
.
append
(
"/"
);
objectName
.
append
(
fileName
);
objectName
.
append
(
"-"
);
objectName
.
append
(
TDateUtil
.
getCurrentDateByType
(
"yyyyMMddHHmm"
));
// 创建InitiateMultipartUploadRequest对象。
InitiateMultipartUploadRequest
request
=
new
InitiateMultipartUploadRequest
(
OssConstant
.
BUCKET
,
objectName
.
toString
());
// 如果需要在初始化分片时设置文件存储类型,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS,
// StorageClass.Standard.toString());
// request.setObjectMetadata(metadata);
// 初始化分片。
InitiateMultipartUploadResult
upresult
=
ossClient
.
initiateMultipartUpload
(
request
);
// 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
String
uploadId
=
upresult
.
getUploadId
();
// 记录缓存信息
PartUploadInfo
pinfo
=
new
PartUploadInfo
();
pinfo
.
setBucketName
(
OssConstant
.
BUCKET
);
pinfo
.
setObjectName
(
objectName
.
toString
());
pinfo
.
setUploadId
(
uploadId
);
stringRedisTemplate
.
opsForValue
()
.
set
(
RedisConstant
.
createPartUploadKey
(
uploadId
),
JsonUtil
.
parseObjToJson
(
pinfo
));
return
ResultBody
.
success
(
uploadId
);
}
@ApiOperation
(
value
=
"进行片段上传"
)
@PostMapping
(
"/partUpload"
)
public
ResultBody
partUpload
(
@RequestParam
(
"partFile"
)
MultipartFile
partFile
,
@RequestParam
(
"uploadId"
)
String
uploadId
)
throws
IOException
{
PartUploadInfo
pinfo
=
JsonUtil
.
parseJsonToObj
(
stringRedisTemplate
.
opsForValue
().
get
(
RedisConstant
.
createPartUploadKey
(
uploadId
)),
PartUploadInfo
.
class
);
// 创建OSSClient实例。
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
List
<
PartETag
>
partETags
=
new
ArrayList
<
PartETag
>();
// 每个分片的大小,用于计算文件有多少个分片。单位为字节。
final
long
partSize
=
1
*
1024
*
1024L
;
// 1 MB。
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
final
File
sampleFile
=
new
File
(
"D:\\localpath\\examplefile.txt"
);
long
fileLength
=
sampleFile
.
length
();
int
partCount
=
(
int
)
(
fileLength
/
partSize
);
if
(
fileLength
%
partSize
!=
0
)
{
partCount
++;
}
// 遍历分片上传。
for
(
int
i
=
0
;
i
<
partCount
;
i
++)
{
long
startPos
=
i
*
partSize
;
long
curPartSize
=
(
i
+
1
==
partCount
)
?
(
fileLength
-
startPos
)
:
partSize
;
InputStream
instream
=
new
FileInputStream
(
sampleFile
);
// 跳过已经上传的分片。
instream
.
skip
(
startPos
);
UploadPartRequest
uploadPartRequest
=
new
UploadPartRequest
();
uploadPartRequest
.
setBucketName
(
pinfo
.
getBucketName
());
uploadPartRequest
.
setKey
(
pinfo
.
getObjectName
());
uploadPartRequest
.
setUploadId
(
uploadId
);
uploadPartRequest
.
setInputStream
(
instream
);
// 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
uploadPartRequest
.
setPartSize
(
curPartSize
);
// 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
uploadPartRequest
.
setPartNumber
(
i
+
1
);
// 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
UploadPartResult
uploadPartResult
=
ossClient
.
uploadPart
(
uploadPartRequest
);
// 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
partETags
.
add
(
uploadPartResult
.
getPartETag
());
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
@ApiOperation
(
value
=
"初始化分片上传"
)
@GetMapping
(
"/initPartUpload"
)
public
ResultBody
initPartUpload
(
@RequestParam
String
fileName
,
HttpServletRequest
httpRequest
)
{
// 创建OSSClient实例。
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
StringBuffer
objectName
=
new
StringBuffer
();
objectName
.
append
(
OssConstant
.
BUCKET
);
objectName
.
append
(
"/"
);
objectName
.
append
(
fileName
);
objectName
.
append
(
"-"
);
objectName
.
append
(
TDateUtil
.
getCurrentDateByType
(
"yyyyMMddHHmm"
));
// 创建InitiateMultipartUploadRequest对象。
InitiateMultipartUploadRequest
request
=
new
InitiateMultipartUploadRequest
(
OssConstant
.
BUCKET
,
objectName
.
toString
());
// 如果需要在初始化分片时设置文件存储类型,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS,
// StorageClass.Standard.toString());
// request.setObjectMetadata(metadata);
// 初始化分片。
InitiateMultipartUploadResult
upresult
=
ossClient
.
initiateMultipartUpload
(
request
);
// 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
String
uploadId
=
upresult
.
getUploadId
();
// 记录缓存信息
PartUploadInfo
pinfo
=
new
PartUploadInfo
();
pinfo
.
setBucketName
(
OssConstant
.
BUCKET
);
pinfo
.
setObjectName
(
objectName
.
toString
());
pinfo
.
setUploadId
(
uploadId
);
stringRedisTemplate
.
opsForValue
()
.
set
(
RedisConstant
.
createPartUploadKey
(
uploadId
),
JsonUtil
.
parseObjToJson
(
pinfo
));
return
ResultBody
.
success
(
uploadId
);
}
// 创建CompleteMultipartUploadRequest对象。
// 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
CompleteMultipartUploadRequest
completeMultipartUploadRequest
=
new
CompleteMultipartUploadRequest
(
pinfo
.
getBucketName
(),
pinfo
.
getObjectName
(),
uploadId
,
partETags
);
// 如果需要在完成文件上传的同时设置文件访问权限,请参考以下示例代码。
// completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.PublicRead);
// 完成上传。
CompleteMultipartUploadResult
completeMultipartUploadResult
=
ossClient
.
completeMultipartUpload
(
completeMultipartUploadRequest
);
System
.
out
.
println
(
completeMultipartUploadResult
.
getETag
());
// 关闭OSSClient。
ossClient
.
shutdown
();
return
ResultBody
.
success
();
}
@ApiOperation
(
value
=
"上传到阿里云oss"
)
@PostMapping
(
"/oss"
)
public
ResultBody
oss
(
@RequestPart
(
"uploadFile"
)
MultipartFile
uploadFile
,
HttpServletRequest
httpRequest
)
throws
Exception
{
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String
endpoint
=
"yourEndpoint"
;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String
accessKeyId
=
"yourAccessKeyId"
;
String
accessKeySecret
=
"yourAccessKeySecret"
;
// 填写Bucket名称,例如examplebucket。
String
bucketName
=
"examplebucket"
;
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
String
objectName
=
"exampledir/exampleobject.txt"
;
// 创建OSSClient实例。
OSS
ossClient
=
new
OSSClientBuilder
().
build
(
endpoint
,
accessKeyId
,
accessKeySecret
);
// 创建InitiateMultipartUploadRequest对象。
InitiateMultipartUploadRequest
request
=
new
InitiateMultipartUploadRequest
(
bucketName
,
objectName
);
// 如果需要在初始化分片时设置文件存储类型,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS,
// StorageClass.Standard.toString());
// request.setObjectMetadata(metadata);
// 初始化分片。
InitiateMultipartUploadResult
upresult
=
ossClient
.
initiateMultipartUpload
(
request
);
// 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
String
uploadId
=
upresult
.
getUploadId
();
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
List
<
PartETag
>
partETags
=
new
ArrayList
<
PartETag
>();
// 每个分片的大小,用于计算文件有多少个分片。单位为字节。
final
long
partSize
=
1
*
1024
*
1024L
;
// 1 MB。
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
final
File
sampleFile
=
new
File
(
"D:\\localpath\\examplefile.txt"
);
long
fileLength
=
sampleFile
.
length
();
int
partCount
=
(
int
)
(
fileLength
/
partSize
);
if
(
fileLength
%
partSize
!=
0
)
{
partCount
++;
}
// 遍历分片上传。
for
(
int
i
=
0
;
i
<
partCount
;
i
++)
{
long
startPos
=
i
*
partSize
;
long
curPartSize
=
(
i
+
1
==
partCount
)
?
(
fileLength
-
startPos
)
:
partSize
;
InputStream
instream
=
new
FileInputStream
(
sampleFile
);
// 跳过已经上传的分片。
instream
.
skip
(
startPos
);
UploadPartRequest
uploadPartRequest
=
new
UploadPartRequest
();
uploadPartRequest
.
setBucketName
(
bucketName
);
uploadPartRequest
.
setKey
(
objectName
);
uploadPartRequest
.
setUploadId
(
uploadId
);
uploadPartRequest
.
setInputStream
(
instream
);
// 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
uploadPartRequest
.
setPartSize
(
curPartSize
);
// 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
uploadPartRequest
.
setPartNumber
(
i
+
1
);
// 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
UploadPartResult
uploadPartResult
=
ossClient
.
uploadPart
(
uploadPartRequest
);
// 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
partETags
.
add
(
uploadPartResult
.
getPartETag
());
@ApiOperation
(
value
=
"进行片段上传"
)
@PostMapping
(
"/partUpload"
)
public
ResultBody
partUpload
(
@RequestParam
(
"partFile"
)
MultipartFile
partFile
,
@RequestParam
(
"uploadId"
)
String
uploadId
)
throws
IOException
{
PartUploadInfo
pinfo
=
JsonUtil
.
parseJsonToObj
(
stringRedisTemplate
.
opsForValue
().
get
(
RedisConstant
.
createPartUploadKey
(
uploadId
)),
PartUploadInfo
.
class
);
// 创建OSSClient实例。
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
List
<
PartETag
>
partETags
=
new
ArrayList
<
PartETag
>();
// 每个分片的大小,用于计算文件有多少个分片。单位为字节。
final
long
partSize
=
1
*
1024
*
1024L
;
// 1 MB。
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
final
File
sampleFile
=
new
File
(
"D:\\localpath\\examplefile.txt"
);
long
fileLength
=
sampleFile
.
length
();
int
partCount
=
(
int
)
(
fileLength
/
partSize
);
if
(
fileLength
%
partSize
!=
0
)
{
partCount
++;
}
// 遍历分片上传。
for
(
int
i
=
0
;
i
<
partCount
;
i
++)
{
long
startPos
=
i
*
partSize
;
long
curPartSize
=
(
i
+
1
==
partCount
)
?
(
fileLength
-
startPos
)
:
partSize
;
InputStream
instream
=
new
FileInputStream
(
sampleFile
);
// 跳过已经上传的分片。
instream
.
skip
(
startPos
);
UploadPartRequest
uploadPartRequest
=
new
UploadPartRequest
();
uploadPartRequest
.
setBucketName
(
pinfo
.
getBucketName
());
uploadPartRequest
.
setKey
(
pinfo
.
getObjectName
());
uploadPartRequest
.
setUploadId
(
uploadId
);
uploadPartRequest
.
setInputStream
(
instream
);
// 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
uploadPartRequest
.
setPartSize
(
curPartSize
);
// 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
uploadPartRequest
.
setPartNumber
(
i
+
1
);
// 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
UploadPartResult
uploadPartResult
=
ossClient
.
uploadPart
(
uploadPartRequest
);
// 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
partETags
.
add
(
uploadPartResult
.
getPartETag
());
}
// 创建CompleteMultipartUploadRequest对象。
// 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
CompleteMultipartUploadRequest
completeMultipartUploadRequest
=
new
CompleteMultipartUploadRequest
(
pinfo
.
getBucketName
(),
pinfo
.
getObjectName
(),
uploadId
,
partETags
);
// 如果需要在完成文件上传的同时设置文件访问权限,请参考以下示例代码。
// completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.PublicRead);
// 完成上传。
CompleteMultipartUploadResult
completeMultipartUploadResult
=
ossClient
.
completeMultipartUpload
(
completeMultipartUploadRequest
);
System
.
out
.
println
(
completeMultipartUploadResult
.
getETag
());
// 关闭OSSClient。
ossClient
.
shutdown
();
return
ResultBody
.
success
();
}
// 创建CompleteMultipartUploadRequest对象。
// 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
CompleteMultipartUploadRequest
completeMultipartUploadRequest
=
new
CompleteMultipartUploadRequest
(
bucketName
,
objectName
,
uploadId
,
partETags
);
// 如果需要在完成文件上传的同时设置文件访问权限,请参考以下示例代码。
// completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.PublicRead);
// 完成上传。
CompleteMultipartUploadResult
completeMultipartUploadResult
=
ossClient
.
completeMultipartUpload
(
completeMultipartUploadRequest
);
System
.
out
.
println
(
completeMultipartUploadResult
.
getETag
());
// 关闭OSSClient。
ossClient
.
shutdown
();
return
ResultBody
.
success
();
}
@ApiOperation
(
value
=
"上传到阿里云oss"
)
@PostMapping
(
"/oss"
)
public
ResultBody
oss
(
@RequestPart
(
"uploadFile"
)
MultipartFile
uploadFile
,
HttpServletRequest
httpRequest
)
throws
Exception
{
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String
endpoint
=
"yourEndpoint"
;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String
accessKeyId
=
"yourAccessKeyId"
;
String
accessKeySecret
=
"yourAccessKeySecret"
;
// 填写Bucket名称,例如examplebucket。
String
bucketName
=
"examplebucket"
;
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
String
objectName
=
"exampledir/exampleobject.txt"
;
// 创建OSSClient实例。
OSS
ossClient
=
new
OSSClientBuilder
().
build
(
endpoint
,
accessKeyId
,
accessKeySecret
);
// 创建InitiateMultipartUploadRequest对象。
InitiateMultipartUploadRequest
request
=
new
InitiateMultipartUploadRequest
(
bucketName
,
objectName
);
// 如果需要在初始化分片时设置文件存储类型,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS,
// StorageClass.Standard.toString());
// request.setObjectMetadata(metadata);
// 初始化分片。
InitiateMultipartUploadResult
upresult
=
ossClient
.
initiateMultipartUpload
(
request
);
// 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
String
uploadId
=
upresult
.
getUploadId
();
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
List
<
PartETag
>
partETags
=
new
ArrayList
<
PartETag
>();
// 每个分片的大小,用于计算文件有多少个分片。单位为字节。
final
long
partSize
=
1
*
1024
*
1024L
;
// 1 MB。
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
final
File
sampleFile
=
new
File
(
"D:\\localpath\\examplefile.txt"
);
long
fileLength
=
sampleFile
.
length
();
int
partCount
=
(
int
)
(
fileLength
/
partSize
);
if
(
fileLength
%
partSize
!=
0
)
{
partCount
++;
}
// 遍历分片上传。
for
(
int
i
=
0
;
i
<
partCount
;
i
++)
{
long
startPos
=
i
*
partSize
;
long
curPartSize
=
(
i
+
1
==
partCount
)
?
(
fileLength
-
startPos
)
:
partSize
;
InputStream
instream
=
new
FileInputStream
(
sampleFile
);
// 跳过已经上传的分片。
instream
.
skip
(
startPos
);
UploadPartRequest
uploadPartRequest
=
new
UploadPartRequest
();
uploadPartRequest
.
setBucketName
(
bucketName
);
uploadPartRequest
.
setKey
(
objectName
);
uploadPartRequest
.
setUploadId
(
uploadId
);
uploadPartRequest
.
setInputStream
(
instream
);
// 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
uploadPartRequest
.
setPartSize
(
curPartSize
);
// 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
uploadPartRequest
.
setPartNumber
(
i
+
1
);
// 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
UploadPartResult
uploadPartResult
=
ossClient
.
uploadPart
(
uploadPartRequest
);
// 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
partETags
.
add
(
uploadPartResult
.
getPartETag
());
}
// 创建CompleteMultipartUploadRequest对象。
// 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
CompleteMultipartUploadRequest
completeMultipartUploadRequest
=
new
CompleteMultipartUploadRequest
(
bucketName
,
objectName
,
uploadId
,
partETags
);
// 如果需要在完成文件上传的同时设置文件访问权限,请参考以下示例代码。
// completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.PublicRead);
// 完成上传。
CompleteMultipartUploadResult
completeMultipartUploadResult
=
ossClient
.
completeMultipartUpload
(
completeMultipartUploadRequest
);
System
.
out
.
println
(
completeMultipartUploadResult
.
getETag
());
// 关闭OSSClient。
ossClient
.
shutdown
();
return
ResultBody
.
success
();
}
}
src/main/java/com/mmc/pms/controller/UploadController.java
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
controller
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson
2
.JSONObject
;
import
com.aliyun.oss.ClientBuilderConfiguration
;
import
com.aliyun.oss.OSS
;
import
com.aliyun.oss.OSSClientBuilder
;
...
...
@@ -30,527 +30,527 @@ import java.util.*;
@RestController
@RequestMapping
(
"/upload"
)
public
class
UploadController
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy/MM/dd/"
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy/MM/dd/"
);
@ApiOperation
(
value
=
"V1.0.1-上传一个图片或者文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件/图片/后缀无限制"
),
})
@PostMapping
(
"/oss"
)
public
ResultBody
oss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
uploadFile
,
HttpServletRequest
request
)
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
InputStream
inputStream
=
null
;
try
{
inputStream
=
uploadFile
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
}
String
oldName
=
uploadFile
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
inputStream
);
ossClient
.
shutdown
();
String
filePath
=
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
;
JSONObject
jsObj
=
new
JSONObject
();
jsObj
.
put
(
"filePath"
,
filePath
);
return
ResultBody
.
success
(
jsObj
);
}
@ApiOperation
(
value
=
"V1.0.1-上传多个文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件/图片"
),
})
@PostMapping
(
"/osses"
)
public
ResultBody
osses
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
@ApiOperation
(
value
=
"V1.0.1-上传一个图片或者文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件/图片/后缀无限制"
),
})
@PostMapping
(
"/oss"
)
public
ResultBody
oss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
uploadFile
,
HttpServletRequest
request
)
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
InputStream
inputStream
=
null
;
try
{
inputStream
=
f
ile
.
getInputStream
();
inputStream
=
uploadF
ile
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
return
ResultBody
.
error
(
e
.
getMessage
());
}
String
oldName
=
file
.
getOriginalFilename
();
String
oldName
=
uploadFile
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
inputStream
);
// ossClient.shutdown();
// String filePath = "https://" + OssConstant.BUCKET + '.' +
// OssConstant.ENDPOINT + "/" +
// newName;
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
}
ossClient
.
shutdown
();
String
filePath
=
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
;
JSONObject
jsObj
=
new
JSONObject
();
jsObj
.
put
(
"filePath"
,
filePath
);
return
ResultBody
.
success
(
jsObj
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
@ApiOperation
(
value
=
"V1.0.1-上传多个视频文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"视频不能超过1MB/mkv/avi/mov/mp4"
),
})
@PostMapping
(
"/videoOss"
)
public
ResultBody
videoOss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
ClientBuilderConfiguration
clientBuilderConfiguration
=
new
ClientBuilderConfiguration
();
clientBuilderConfiguration
.
setRequestTimeoutEnabled
(
true
);
clientBuilderConfiguration
.
setConnectionRequestTimeout
(
600000
*
20
);
clientBuilderConfiguration
.
setConnectionTimeout
(
600000
*
20
);
@ApiOperation
(
value
=
"V1.0.1-上传多个文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件/图片"
),
})
@PostMapping
(
"/osses"
)
public
ResultBody
osses
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
,
clientBuilderConfiguration
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
3
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_VIDEO_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"视频名称:"
+
newName
);
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
return
ResultBody
.
error
(
e
.
getMessage
());
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
inputStream
);
// ossClient.shutdown();
// String filePath = "https://" + OssConstant.BUCKET + '.' +
// OssConstant.ENDPOINT + "/" +
// newName;
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
}
}
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
@ApiOperation
(
value
=
"V1.0.1-上传一
个视频文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"视频不能超过1MB/mkv/avi/mov/mp4"
),
})
@PostMapping
(
"/videoOsse
s"
)
public
ResultBody
videoOsse
s
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
ClientBuilderConfiguration
clientBuilderConfiguration
=
new
ClientBuilderConfiguration
();
clientBuilderConfiguration
.
setRequestTimeoutEnabled
(
true
);
clientBuilderConfiguration
.
setConnectionRequestTimeout
(
600000
*
20
);
clientBuilderConfiguration
.
setConnectionTimeout
(
600000
*
20
);
@ApiOperation
(
value
=
"V1.0.1-上传多
个视频文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"视频不能超过1MB/mkv/avi/mov/mp4"
),
})
@PostMapping
(
"/videoOs
s"
)
public
ResultBody
videoOs
s
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
ClientBuilderConfiguration
clientBuilderConfiguration
=
new
ClientBuilderConfiguration
();
clientBuilderConfiguration
.
setRequestTimeoutEnabled
(
true
);
clientBuilderConfiguration
.
setConnectionRequestTimeout
(
600000
*
20
);
clientBuilderConfiguration
.
setConnectionTimeout
(
600000
*
20
);
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
,
clientBuilderConfiguration
);
Map
map
=
new
HashMap
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
,
clientBuilderConfiguration
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
3
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_VIDEO_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"视频名称:"
+
newName
);
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
}
}
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
3
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_VIDEO_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"视频名称:"
+
newName
);
map
.
put
(
"filePath"
,
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
map
.
put
(
"fileName"
,
oldName
);
map
.
put
(
"fileSize"
,
file
.
getSize
());
map
.
put
(
"fileType"
,
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
)).
replace
(
"."
,
""
));
}
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
map
);
}
@ApiOperation
(
value
=
"V1.0.1-上传多张图片文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"图片"
),
})
@PostMapping
(
"/imgOss"
)
public
ResultBody
imgOss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
@ApiOperation
(
value
=
"V1.0.1-上传一个视频文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"视频不能超过1MB/mkv/avi/mov/mp4"
),
})
@PostMapping
(
"/videoOsses"
)
public
ResultBody
videoOsses
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
ClientBuilderConfiguration
clientBuilderConfiguration
=
new
ClientBuilderConfiguration
();
clientBuilderConfiguration
.
setRequestTimeoutEnabled
(
true
);
clientBuilderConfiguration
.
setConnectionRequestTimeout
(
600000
*
20
);
clientBuilderConfiguration
.
setConnectionTimeout
(
600000
*
20
);
return
ResultBody
.
error
(
e
.
getMessage
());
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
,
clientBuilderConfiguration
);
Map
map
=
new
HashMap
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
3
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_VIDEO_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"视频名称:"
+
newName
);
map
.
put
(
"filePath"
,
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
map
.
put
(
"fileName"
,
oldName
);
map
.
put
(
"fileSize"
,
file
.
getSize
());
map
.
put
(
"fileType"
,
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
)).
replace
(
"."
,
""
));
}
}
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
1
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_IMG_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"图片名称:"
+
newName
);
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
}
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
map
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
@ApiOperation
(
value
=
"V1.0.1-上传一张图片文件到阿里云oss
"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件
"
),
})
@PostMapping
(
"/singleI
mgOss"
)
public
ResultBody
singleI
mgOss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
)
{
if
(
uploadFile
.
getSize
()
/
1024
>
3096
)
{
return
ResultBody
.
error
(
"请上传小于3M的图片"
);
}
InputStream
inputStream
=
null
;
try
{
inputStream
=
uploadF
ile
.
getInputStream
();
}
catch
(
IOException
e
)
{
@ApiOperation
(
value
=
"V1.0.1-上传多张图片文件到阿里云oss
"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"图片
"
),
})
@PostMapping
(
"/i
mgOss"
)
public
ResultBody
i
mgOss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
f
ile
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
1
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_IMG_ERROR
);
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
1
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_IMG_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"图片名称:"
+
newName
);
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
}
}
}
String
oldName
=
uploadFile
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"图片名称:"
+
newName
);
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
@ApiOperation
(
value
=
"V1.0.1-上传一张图片文件到阿里云oss "
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"图片/返回图片名称及图片大小
"
),
})
@PostMapping
(
"/imgOsse
s"
)
public
ResultBody
imgOsse
s
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
Map
map
=
new
HashMap
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
f
ile
.
getInputStream
();
}
catch
(
IOException
e
)
{
@ApiOperation
(
value
=
"V1.0.1-上传一张图片文件到阿里云oss "
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件
"
),
})
@PostMapping
(
"/singleImgOs
s"
)
public
ResultBody
singleImgOs
s
(
@RequestParam
(
"uploadFile"
)
MultipartFile
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
List
list
=
new
LinkedList
();
if
(
uploadFile
!=
null
)
{
if
(
uploadFile
.
getSize
()
/
1024
>
3096
)
{
return
ResultBody
.
error
(
"请上传小于3M的图片"
);
}
InputStream
inputStream
=
null
;
try
{
inputStream
=
uploadF
ile
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
1
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_IMG_ERROR
);
}
String
oldName
=
uploadFile
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"图片名称:"
+
newName
);
list
.
add
(
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
}
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
1
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_IMG_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"图片名称:"
+
newName
);
map
.
put
(
"filePath"
,
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
map
.
put
(
"fileName"
,
oldName
);
map
.
put
(
"fileSize"
,
file
.
getSize
());
map
.
put
(
"fileType"
,
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
)).
replace
(
"."
,
""
));
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
list
);
}
@ApiOperation
(
value
=
"V1.0.1-上传一张图片文件到阿里云oss "
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
false
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"图片/返回图片名称及图片大小"
),
})
@PostMapping
(
"/imgOsses"
)
public
ResultBody
imgOsses
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
Map
map
=
new
HashMap
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
1
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_IMG_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"图片名称:"
+
newName
);
map
.
put
(
"filePath"
,
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
map
.
put
(
"fileName"
,
oldName
);
map
.
put
(
"fileSize"
,
file
.
getSize
());
map
.
put
(
"fileType"
,
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
)).
replace
(
"."
,
""
));
}
}
}
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
map
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
map
);
}
private
byte
[]
readByte
(
final
InputStream
is
)
throws
IOException
{
try
(
BufferedInputStream
bis
=
new
BufferedInputStream
(
is
);
ByteArrayOutputStream
bas
=
new
ByteArrayOutputStream
(
4096
);
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
bas
))
{
byte
[]
bytes
=
new
byte
[
4096
];
int
size
;
while
((
size
=
bis
.
read
(
bytes
))
!=
-
1
)
{
bos
.
write
(
bytes
,
0
,
size
);
}
return
bas
.
toByteArray
();
private
byte
[]
readByte
(
final
InputStream
is
)
throws
IOException
{
try
(
BufferedInputStream
bis
=
new
BufferedInputStream
(
is
);
ByteArrayOutputStream
bas
=
new
ByteArrayOutputStream
(
4096
);
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
bas
))
{
byte
[]
bytes
=
new
byte
[
4096
];
int
size
;
while
((
size
=
bis
.
read
(
bytes
))
!=
-
1
)
{
bos
.
write
(
bytes
,
0
,
size
);
}
return
bas
.
toByteArray
();
}
}
}
@ApiOperation
(
value
=
"V1.0.1-上传文档文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
true
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件 doc,ppt,pdf,xls结尾"
),
})
@PostMapping
(
"/docOss"
)
public
ResultBody
docOss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
Map
map
=
new
HashMap
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
@ApiOperation
(
value
=
"V1.0.1-上传文档文件到阿里云oss"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
paramType
=
"header"
,
name
=
"mmc-identity"
,
dataTypeClass
=
java
.
lang
.
String
.
class
,
dataType
=
"String"
,
required
=
true
,
value
=
"token"
),
@ApiImplicitParam
(
name
=
"uploadFile"
,
dataType
=
"MultipartFile"
,
dataTypeClass
=
org
.
springframework
.
web
.
multipart
.
MultipartFile
.
class
,
required
=
true
,
value
=
"文件 doc,ppt,pdf,xls结尾"
),
})
@PostMapping
(
"/docOss"
)
public
ResultBody
docOss
(
@RequestParam
(
"uploadFile"
)
MultipartFile
[]
uploadFile
,
HttpServletRequest
request
)
throws
IOException
{
OSS
ossClient
=
new
OSSClientBuilder
()
.
build
(
OssConstant
.
ENDPOINT
,
OssConstant
.
ACCESSKEYID
,
OssConstant
.
ACCESSKEYSECRET
);
Map
map
=
new
HashMap
();
if
(
uploadFile
!=
null
&&
uploadFile
.
length
>
0
)
{
System
.
out
.
println
(
"osses文件数量"
+
uploadFile
.
length
);
for
(
int
i
=
0
;
i
<
uploadFile
.
length
;
i
++)
{
MultipartFile
file
=
uploadFile
[
i
];
InputStream
inputStream
=
null
;
try
{
inputStream
=
file
.
getInputStream
();
}
catch
(
IOException
e
)
{
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
2
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_DOC_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"文档名称:"
+
newName
);
return
ResultBody
.
error
(
e
.
getMessage
());
}
try
(
final
BufferedInputStream
bis
=
new
BufferedInputStream
(
inputStream
))
{
// 校验
int
typeNum
=
FileLoadUtil
.
checkFileType
(
FileLoadUtil
.
getType
(
bis
));
if
(
typeNum
!=
2
)
{
return
ResultBody
.
error
(
ResultEnum
.
UPLOAD_DOC_ERROR
);
}
String
oldName
=
file
.
getOriginalFilename
();
String
newName
=
"file/"
+
UUID
.
randomUUID
().
toString
()
+
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
),
oldName
.
length
());
ossClient
.
putObject
(
OssConstant
.
BUCKET
,
newName
,
bis
);
System
.
out
.
println
(
"文档名称:"
+
newName
);
map
.
put
(
"filePath"
,
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
map
.
put
(
"fileName"
,
oldName
);
map
.
put
(
"fileSize"
,
file
.
getSize
());
map
.
put
(
"fileType"
,
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
)).
replace
(
"."
,
""
));
map
.
put
(
"filePath"
,
"https://"
+
OssConstant
.
BUCKET
+
'.'
+
OssConstant
.
ENDPOINT
+
"/"
+
newName
);
map
.
put
(
"fileName"
,
oldName
);
map
.
put
(
"fileSize"
,
file
.
getSize
());
map
.
put
(
"fileType"
,
oldName
.
substring
(
oldName
.
lastIndexOf
(
"."
)).
replace
(
"."
,
""
));
}
}
}
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
map
);
}
ossClient
.
shutdown
();
// 关流
return
ResultBody
.
success
(
map
);
}
/**
* 上传文件
*
* @param uploadFile
* @return
*/
@ApiIgnore
@RequestMapping
(
value
=
"/local"
,
method
=
RequestMethod
.
POST
)
public
ResultBody
local
(
@RequestParam
(
value
=
"uploadFile"
,
required
=
false
)
MultipartFile
[]
uploadFile
,
@RequestParam
(
value
=
"directory"
,
required
=
false
,
defaultValue
=
"upload"
)
String
directory
,
HttpServletRequest
request
)
throws
IOException
{
return
FileLoadUtil
.
bathCreateFile
(
directory
,
uploadFile
);
}
/**
* 上传文件
*
* @param uploadFile
* @return
*/
@ApiIgnore
@RequestMapping
(
value
=
"/local"
,
method
=
RequestMethod
.
POST
)
public
ResultBody
local
(
@RequestParam
(
value
=
"uploadFile"
,
required
=
false
)
MultipartFile
[]
uploadFile
,
@RequestParam
(
value
=
"directory"
,
required
=
false
,
defaultValue
=
"upload"
)
String
directory
,
HttpServletRequest
request
)
throws
IOException
{
return
FileLoadUtil
.
bathCreateFile
(
directory
,
uploadFile
);
}
/**
* 下载文件
*
* @param path
* @param response
* @throws IOException
*/
@ApiIgnore
@RequestMapping
(
value
=
"/download/{path}"
,
method
=
RequestMethod
.
GET
)
public
void
getDownloadFile
(
@PathVariable
(
"path"
)
String
path
,
HttpServletResponse
response
)
throws
IOException
{
response
.
setContentType
(
"application/x-001"
);
path
=
FileLoadUtil
.
explainLoadPath
(
path
);
ServletOutputStream
out
=
response
.
getOutputStream
();
FileInputStream
in
=
new
FileInputStream
(
new
File
(
path
));
byte
buffer
[]
=
new
byte
[
1024
];
int
length
=
0
;
while
((
length
=
in
.
read
(
buffer
))
!=
-
1
)
{
out
.
write
(
buffer
,
0
,
length
);
/**
* 下载文件
*
* @param path
* @param response
* @throws IOException
*/
@ApiIgnore
@RequestMapping
(
value
=
"/download/{path}"
,
method
=
RequestMethod
.
GET
)
public
void
getDownloadFile
(
@PathVariable
(
"path"
)
String
path
,
HttpServletResponse
response
)
throws
IOException
{
response
.
setContentType
(
"application/x-001"
);
path
=
FileLoadUtil
.
explainLoadPath
(
path
);
ServletOutputStream
out
=
response
.
getOutputStream
();
FileInputStream
in
=
new
FileInputStream
(
new
File
(
path
));
byte
buffer
[]
=
new
byte
[
1024
];
int
length
=
0
;
while
((
length
=
in
.
read
(
buffer
))
!=
-
1
)
{
out
.
write
(
buffer
,
0
,
length
);
}
in
.
close
();
out
.
close
();
}
in
.
close
();
out
.
close
();
}
@ApiIgnore
@RequestMapping
(
value
=
"/heart"
,
method
=
RequestMethod
.
GET
)
public
ResultBody
heart
()
{
return
ResultBody
.
success
(
"heart"
);
}
@ApiIgnore
@RequestMapping
(
value
=
"/heart"
,
method
=
RequestMethod
.
GET
)
public
ResultBody
heart
()
{
return
ResultBody
.
success
(
"heart"
);
}
}
src/main/java/com/mmc/pms/dao/BackstageTaskServiceDao.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
dao
;
import
com.mmc.pms.entity.ServiceDO
;
import
com.mmc.pms.model.qo.ServiceQO
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
/**
* @Author LW
* @date 2023/6/6 10:48
* 概要:
*/
@Mapper
public
interface
BackstageTaskServiceDao
{
int
insert
(
ServiceDO
serviceDO
);
int
update
(
ServiceDO
serviceDO
);
int
deleteById
(
Integer
id
);
ServiceDO
queryById
(
Integer
id
);
List
<
ServiceDO
>
queryAllByLimit
(
ServiceQO
param
);
}
src/main/java/com/mmc/pms/dao/ProductDao.java
浏览文件 @
54dd9c08
...
...
@@ -110,6 +110,8 @@ public interface ProductDao {
Set
<
Integer
>
listProductSpecIds
(
@Param
(
"mallProdSkuSpecIds"
)
Set
<
Integer
>
mallProdSkuSpecIds
);
List
<
OrderGoodsProdDTO
>
listProdGoodsSkuInfo
(
MallOrderGoodsInfoQO
mallOrderGoodsInfoQO
);
List
<
MallProdSkuInfoSpecDO
>
listMallProductSpec
(
Integer
id
);
}
...
...
src/main/java/com/mmc/pms/entity/BaseEntity.java
浏览文件 @
54dd9c08
...
...
@@ -16,21 +16,21 @@ import java.time.LocalDateTime;
*/
@Data
public
class
BaseEntity
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Integer
id
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Integer
id
;
@ApiModelProperty
(
"添加时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
addtime
;
@ApiModelProperty
(
"添加时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
addtime
;
@ApiModelProperty
(
"最近一次编辑时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
updatetime
;
@ApiModelProperty
(
"最近一次编辑时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
updatetime
;
@ApiModelProperty
(
"1删除"
)
@JsonProperty
(
access
=
JsonProperty
.
Access
.
WRITE_ONLY
)
@TableLogic
private
Integer
deleted
;
@ApiModelProperty
(
"1删除"
)
@JsonProperty
(
access
=
JsonProperty
.
Access
.
WRITE_ONLY
)
@TableLogic
private
Integer
deleted
;
}
src/main/java/com/mmc/pms/entity/ProductSkuDO.java
浏览文件 @
54dd9c08
...
...
@@ -59,6 +59,7 @@ public class ProductSkuDO implements Serializable {
.
productBrand
(
this
.
brandName
)
.
createTime
(
this
.
createTime
)
.
categoriesId
(
categoriesId
)
.
productBrandId
(
brandInfoId
)
.
directoryId
(
directoryId
)
.
categoryName
(
this
.
categoryName
)
.
directoryName
(
directoryName
)
...
...
src/main/java/com/mmc/pms/entity/RepoCashDO.java
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
entity
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
import
com.mmc.pms.model.other.dto.RepoCashDTO
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.apache.commons.lang.StringUtils
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
...
...
@@ -20,53 +20,53 @@ import java.util.Date;
@AllArgsConstructor
@NoArgsConstructor
public
class
RepoCashDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
7930603317037474755L
;
private
Integer
id
;
private
Integer
repoAccountId
;
private
String
uid
;
private
String
accountName
;
private
Integer
orderInfoId
;
private
String
orderNo
;
private
Integer
skuInfoId
;
private
String
skuTitle
;
private
Integer
wareInfoId
;
private
String
wareNo
;
private
String
wareTitle
;
private
String
payNo
;
private
Integer
payMethod
;
private
BigDecimal
amtPaid
;
private
BigDecimal
cashAmt
;
private
Date
payTime
;
private
String
refundNo
;
private
String
voucher
;
private
String
remark
;
private
Integer
createUser
;
private
Date
createTime
;
private
Integer
updateUser
;
private
Date
updateTime
;
private
static
final
long
serialVersionUID
=
-
7930603317037474755L
;
private
Integer
id
;
private
Integer
repoAccountId
;
private
String
uid
;
private
String
accountName
;
private
Integer
orderInfoId
;
private
String
orderNo
;
private
Integer
skuInfoId
;
private
String
skuTitle
;
private
Integer
wareInfoId
;
private
String
wareNo
;
private
String
wareTitle
;
private
String
payNo
;
private
Integer
payMethod
;
private
BigDecimal
amtPaid
;
private
BigDecimal
cashAmt
;
private
Date
payTime
;
private
String
refundNo
;
private
String
voucher
;
private
String
remark
;
private
Integer
createUser
;
private
Date
createTime
;
private
Integer
updateUser
;
private
Date
updateTime
;
public
RepoCashDTO
buildRepoCashDTO
()
{
return
RepoCashDTO
.
builder
()
.
id
(
this
.
id
)
.
repoAccountId
(
this
.
repoAccountId
)
.
uid
(
this
.
uid
)
.
accountName
(
this
.
accountName
)
.
orderInfoId
(
this
.
orderInfoId
)
.
orderNo
(
this
.
orderNo
)
.
skuInfoId
(
this
.
skuInfoId
)
.
skuTitle
(
this
.
skuTitle
)
.
wareInfoId
(
this
.
wareInfoId
)
.
wareNo
(
this
.
wareNo
)
.
wareTitle
(
this
.
wareTitle
)
.
payNo
(
this
.
payNo
)
.
payMethod
(
this
.
payMethod
)
.
amtPaid
(
this
.
amtPaid
)
.
refundNo
(
this
.
refundNo
)
.
createUser
(
this
.
createUser
)
.
voucher
(
StringUtils
.
isBlank
(
this
.
voucher
)
?
null
:
Arrays
.
asList
(
this
.
voucher
.
split
(
","
)))
.
cashAmt
(
this
.
cashAmt
)
.
payTime
(
this
.
payTime
)
.
remark
(
this
.
remark
)
.
build
();
}
public
RepoCashDTO
buildRepoCashDTO
()
{
return
RepoCashDTO
.
builder
()
.
id
(
this
.
id
)
.
repoAccountId
(
this
.
repoAccountId
)
.
uid
(
this
.
uid
)
.
accountName
(
this
.
accountName
)
.
orderInfoId
(
this
.
orderInfoId
)
.
orderNo
(
this
.
orderNo
)
.
skuInfoId
(
this
.
skuInfoId
)
.
skuTitle
(
this
.
skuTitle
)
.
wareInfoId
(
this
.
wareInfoId
)
.
wareNo
(
this
.
wareNo
)
.
wareTitle
(
this
.
wareTitle
)
.
payNo
(
this
.
payNo
)
.
payMethod
(
this
.
payMethod
)
.
amtPaid
(
this
.
amtPaid
)
.
refundNo
(
this
.
refundNo
)
.
createUser
(
this
.
createUser
)
.
voucher
(
StringUtils
.
isBlank
(
this
.
voucher
)
?
null
:
Arrays
.
asList
(
this
.
voucher
.
split
(
","
)))
.
cashAmt
(
this
.
cashAmt
)
.
payTime
(
this
.
payTime
)
.
remark
(
this
.
remark
)
.
build
();
}
}
src/main/java/com/mmc/pms/entity/ServiceDO.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
entity
;
import
com.mmc.pms.model.work.vo.ServiceVO
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @Author LW
* @date 2023/6/8 10:33
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
ServiceDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
Integer
id
;
@ApiModelProperty
(
value
=
"服务名称"
)
private
String
serviceName
;
@ApiModelProperty
(
value
=
"应用"
)
private
Integer
applicationId
;
@ApiModelProperty
(
value
=
"行业"
)
private
Integer
industryId
;
@ApiModelProperty
(
value
=
"展示状态"
)
private
Integer
displayState
;
@ApiModelProperty
(
value
=
"封面图"
)
private
String
coverPlan
;
@ApiModelProperty
(
value
=
"分享卡片"
)
private
String
shareCard
;
@ApiModelProperty
(
value
=
"视频"
)
private
String
video
;
@ApiModelProperty
(
value
=
"服务介绍"
)
private
String
serviceIntroduction
;
@ApiModelProperty
(
value
=
"创建人id"
)
private
Integer
accountId
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
Date
createTime
;
@ApiModelProperty
(
value
=
"修改时间"
)
private
Date
updateTime
;
@ApiModelProperty
(
value
=
"逻辑删除字段"
)
private
Integer
isDeleted
;
public
ServiceDO
(
ServiceVO
param
,
Integer
accountId
)
{
this
.
id
=
param
.
getId
();
this
.
serviceName
=
param
.
getServiceName
();
this
.
applicationId
=
param
.
getApplicationId
();
this
.
industryId
=
param
.
getIndustryId
();
this
.
displayState
=
param
.
getDisplayState
();
this
.
coverPlan
=
param
.
getCoverPlan
();
this
.
shareCard
=
param
.
getShareCard
();
this
.
video
=
param
.
getVideo
();
this
.
serviceIntroduction
=
param
.
getServiceIntroduction
();
this
.
accountId
=
accountId
;
}
public
ServiceDO
(
ServiceVO
param
)
{
this
.
id
=
param
.
getId
();
this
.
serviceName
=
param
.
getServiceName
();
this
.
applicationId
=
param
.
getApplicationId
();
this
.
industryId
=
param
.
getIndustryId
();
this
.
displayState
=
param
.
getDisplayState
();
this
.
coverPlan
=
param
.
getCoverPlan
();
this
.
shareCard
=
param
.
getShareCard
();
this
.
video
=
param
.
getVideo
();
this
.
serviceIntroduction
=
param
.
getServiceIntroduction
();
}
public
ServiceDO
(
Integer
id
,
Integer
accountId
)
{
this
.
id
=
id
;
this
.
accountId
=
accountId
;
}
}
src/main/java/com/mmc/pms/json/JsonUtil.java
浏览文件 @
54dd9c08
...
...
@@ -13,107 +13,107 @@ import java.util.List;
*/
public
class
JsonUtil
{
public
static
void
main
(
String
[]
args
)
{
String
array
=
"[1,24,23]"
;
List
<
Integer
>
list
=
JSONArray
.
parseArray
(
array
,
Integer
.
class
);
System
.
out
.
println
(
list
.
get
(
2
));
}
public
static
void
main
(
String
[]
args
)
{
String
array
=
"[1,24,23]"
;
List
<
Integer
>
list
=
JSONArray
.
parseArray
(
array
,
Integer
.
class
);
System
.
out
.
println
(
list
.
get
(
2
));
}
/**
* 把Java对象转换成json字符串
*
* @param object 待转化为JSON字符串的Java对象
* @return json 串 or null
*/
public
static
String
parseObjToJson
(
Object
object
)
{
String
string
=
null
;
try
{
string
=
JSONObject
.
toJSONString
(
object
);
}
catch
(
Exception
e
)
{
// LOGGER.error(e.getMessage());
/**
* 把Java对象转换成json字符串
*
* @param object 待转化为JSON字符串的Java对象
* @return json 串 or null
*/
public
static
String
parseObjToJson
(
Object
object
)
{
String
string
=
null
;
try
{
string
=
JSONObject
.
toJSONString
(
object
);
}
catch
(
Exception
e
)
{
// LOGGER.error(e.getMessage());
}
return
string
;
}
return
string
;
}
/**
* 将Json字符串信息转换成对应的Java对象
*
* @param json json字符串对象
* @param c 对应的类型
*/
public
static
<
T
>
T
parseJsonToObj
(
String
json
,
Class
<
T
>
c
)
{
try
{
JSONObject
jsonObject
=
JSON
.
parseObject
(
json
);
return
JSON
.
toJavaObject
(
jsonObject
,
c
);
}
catch
(
Exception
e
)
{
// LOGGER.error(e.getMessage());
/**
* 将Json字符串信息转换成对应的Java对象
*
* @param json json字符串对象
* @param c 对应的类型
*/
public
static
<
T
>
T
parseJsonToObj
(
String
json
,
Class
<
T
>
c
)
{
try
{
JSONObject
jsonObject
=
JSON
.
parseObject
(
json
);
return
JSON
.
toJavaObject
(
jsonObject
,
c
);
}
catch
(
Exception
e
)
{
// LOGGER.error(e.getMessage());
}
return
null
;
}
return
null
;
}
/**
* 读取json文件
*
* @param fileName
* @return
*/
public
static
String
readJsonFile
(
String
fileName
)
{
String
jsonStr
=
""
;
try
{
File
jsonFile
=
new
File
(
fileName
);
FileReader
fileReader
=
new
FileReader
(
jsonFile
);
Reader
reader
=
new
InputStreamReader
(
new
FileInputStream
(
jsonFile
),
"utf-8"
);
int
ch
=
0
;
StringBuffer
sb
=
new
StringBuffer
();
while
((
ch
=
reader
.
read
())
!=
-
1
)
{
sb
.
append
((
char
)
ch
);
}
fileReader
.
close
();
reader
.
close
();
jsonStr
=
sb
.
toString
();
return
jsonStr
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
null
;
/**
* 读取json文件
*
* @param fileName
* @return
*/
public
static
String
readJsonFile
(
String
fileName
)
{
String
jsonStr
=
""
;
try
{
File
jsonFile
=
new
File
(
fileName
);
FileReader
fileReader
=
new
FileReader
(
jsonFile
);
Reader
reader
=
new
InputStreamReader
(
new
FileInputStream
(
jsonFile
),
"utf-8"
);
int
ch
=
0
;
StringBuffer
sb
=
new
StringBuffer
();
while
((
ch
=
reader
.
read
())
!=
-
1
)
{
sb
.
append
((
char
)
ch
);
}
fileReader
.
close
();
reader
.
close
();
jsonStr
=
sb
.
toString
();
return
jsonStr
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
}
/**
* 将JSON数据格式化并保存到文件中
*
* @param jsonData 需要输出的json数
* @param filePath 输出的文件地址
* @return
*/
public
static
boolean
createJsonFile
(
Object
jsonData
,
String
filePath
)
{
String
content
=
JSON
.
toJSONString
(
jsonData
,
SerializerFeature
.
PrettyFormat
,
SerializerFeature
.
WriteMapNullValue
,
SerializerFeature
.
WriteDateUseDateFormat
);
// 标记文件生成是否成功
boolean
flag
=
true
;
// 生成json格式文件
try
{
// 保证创建一个新文件
File
file
=
new
File
(
filePath
);
if
(!
file
.
getParentFile
().
exists
())
{
// 如果父目录不存在,创建父目录
file
.
getParentFile
().
mkdirs
();
}
if
(
file
.
exists
())
{
// 如果已存在,删除旧文件
file
.
delete
();
}
file
.
createNewFile
();
// 将格式化后的字符串写入文件
Writer
write
=
new
OutputStreamWriter
(
new
FileOutputStream
(
file
),
"UTF-8"
);
write
.
write
(
content
);
write
.
flush
();
write
.
close
();
}
catch
(
Exception
e
)
{
flag
=
false
;
e
.
printStackTrace
();
/**
* 将JSON数据格式化并保存到文件中
*
* @param jsonData 需要输出的json数
* @param filePath 输出的文件地址
* @return
*/
public
static
boolean
createJsonFile
(
Object
jsonData
,
String
filePath
)
{
String
content
=
JSON
.
toJSONString
(
jsonData
,
SerializerFeature
.
PrettyFormat
,
SerializerFeature
.
WriteMapNullValue
,
SerializerFeature
.
WriteDateUseDateFormat
);
// 标记文件生成是否成功
boolean
flag
=
true
;
// 生成json格式文件
try
{
// 保证创建一个新文件
File
file
=
new
File
(
filePath
);
if
(!
file
.
getParentFile
().
exists
())
{
// 如果父目录不存在,创建父目录
file
.
getParentFile
().
mkdirs
();
}
if
(
file
.
exists
())
{
// 如果已存在,删除旧文件
file
.
delete
();
}
file
.
createNewFile
();
// 将格式化后的字符串写入文件
Writer
write
=
new
OutputStreamWriter
(
new
FileOutputStream
(
file
),
"UTF-8"
);
write
.
write
(
content
);
write
.
flush
();
write
.
close
();
}
catch
(
Exception
e
)
{
flag
=
false
;
e
.
printStackTrace
();
}
return
flag
;
}
return
flag
;
}
}
src/main/java/com/mmc/pms/model/qo/ServiceQO.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
model
.
qo
;
import
com.mmc.pms.common.Page
;
import
com.mmc.pms.model.group.Freeze
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.hibernate.validator.constraints.Length
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author LW
* @date 2023/6/8 10:33
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
ServiceQO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
Integer
id
;
@ApiModelProperty
(
value
=
"服务名称"
,
example
=
"服务名称"
)
@Length
(
message
=
"最大不超过30字"
,
max
=
30
)
private
String
serviceName
;
@ApiModelProperty
(
value
=
"应用"
,
example
=
"1"
)
private
Integer
applicationId
;
@ApiModelProperty
(
value
=
"行业"
,
example
=
"2"
)
private
Integer
industryId
;
@ApiModelProperty
(
value
=
"页码"
,
required
=
true
)
@NotNull
(
message
=
"页码不能为空"
,
groups
=
{
Page
.
class
,
Freeze
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageNo
;
@ApiModelProperty
(
value
=
"每页显示数"
,
required
=
true
)
@NotNull
(
message
=
"每页显示数不能为空"
,
groups
=
{
Page
.
class
,
Freeze
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageSize
;
}
src/main/java/com/mmc/pms/model/work/vo/ServiceVO.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
model
.
work
.
vo
;
import
com.mmc.pms.model.group.Create
;
import
com.mmc.pms.model.group.Update
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.hibernate.validator.constraints.Length
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author LW
* @date 2023/6/8 10:33
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
ServiceVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@NotNull
(
message
=
"修改服务id不能为空"
,
groups
=
{
Update
.
class
})
private
Integer
id
;
@ApiModelProperty
(
value
=
"服务名称"
,
example
=
"服务名称"
)
@NotBlank
(
message
=
"服务名称不能为空"
,
groups
=
{
Create
.
class
,
Update
.
class
})
@Length
(
message
=
"最大不超过30字"
,
max
=
30
)
private
String
serviceName
;
@ApiModelProperty
(
value
=
"应用"
,
example
=
"1"
)
private
Integer
applicationId
;
@ApiModelProperty
(
value
=
"行业"
,
example
=
"2"
)
@NotNull
(
message
=
"行业id不能为空"
,
groups
=
{
Create
.
class
,
Update
.
class
})
private
Integer
industryId
;
@ApiModelProperty
(
value
=
"展示状态,0为上架,1下架"
,
example
=
"0"
)
@NotNull
(
message
=
"展示状态不能为空"
,
groups
=
{
Create
.
class
,
Update
.
class
})
private
Integer
displayState
;
@ApiModelProperty
(
value
=
"封面图"
)
@NotBlank
(
message
=
"封面图不能为空"
,
groups
=
{
Create
.
class
,
Update
.
class
})
private
String
coverPlan
;
@ApiModelProperty
(
value
=
"分享卡片"
)
private
String
shareCard
;
@ApiModelProperty
(
value
=
"视频"
)
private
String
video
;
@ApiModelProperty
(
value
=
"服务介绍"
)
private
String
serviceIntroduction
;
}
src/main/java/com/mmc/pms/service/BackstageTaskService.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
service
;
import
com.mmc.pms.common.ResultBody
;
import
com.mmc.pms.model.qo.ServiceQO
;
import
com.mmc.pms.model.work.vo.ServiceVO
;
/**
* @Author LW
* @date 2023/6/6 10:46
* 概要:
*/
public
interface
BackstageTaskService
{
ResultBody
addWorkService
(
ServiceVO
param
,
Integer
userAccountId
);
ResultBody
updateById
(
ServiceVO
param
);
ResultBody
deleteById
(
Integer
id
);
ResultBody
queryById
(
Integer
id
);
ResultBody
queryWorkServiceList
(
ServiceQO
param
,
Integer
userAccountId
);
}
src/main/java/com/mmc/pms/service/Impl/BackstageTaskServiceImpl.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
service
.
Impl
;
import
com.mmc.pms.common.ResultBody
;
import
com.mmc.pms.dao.BackstageTaskServiceDao
;
import
com.mmc.pms.entity.ServiceDO
;
import
com.mmc.pms.model.qo.ServiceQO
;
import
com.mmc.pms.model.work.vo.ServiceVO
;
import
com.mmc.pms.service.BackstageTaskService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* @Author LW
* @date 2023/6/8 9:59
* 概要:
*/
@Service
public
class
BackstageTaskServiceImpl
implements
BackstageTaskService
{
@Autowired
private
BackstageTaskServiceDao
backstageTaskServiceDao
;
@Override
public
ResultBody
addWorkService
(
ServiceVO
param
,
Integer
userAccountId
)
{
ServiceDO
serviceDO
=
new
ServiceDO
(
param
,
userAccountId
);
backstageTaskServiceDao
.
insert
(
serviceDO
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
updateById
(
ServiceVO
param
)
{
ServiceDO
serviceDO
=
new
ServiceDO
(
param
);
backstageTaskServiceDao
.
update
(
serviceDO
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
deleteById
(
Integer
id
)
{
backstageTaskServiceDao
.
deleteById
(
id
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
queryById
(
Integer
id
)
{
ServiceDO
serviceDO
=
backstageTaskServiceDao
.
queryById
(
id
);
return
ResultBody
.
success
(
serviceDO
);
}
@Override
public
ResultBody
queryWorkServiceList
(
ServiceQO
param
,
Integer
userAccountId
)
{
List
<
ServiceDO
>
services
=
backstageTaskServiceDao
.
queryAllByLimit
(
param
);
return
null
;
}
}
src/main/java/com/mmc/pms/service/Impl/ProductServiceImpl.java
浏览文件 @
54dd9c08
...
...
@@ -11,11 +11,11 @@ import com.mmc.pms.model.sale.dto.*;
import
com.mmc.pms.model.sale.vo.ProductSpecCPQVO
;
import
com.mmc.pms.page.PageResult
;
import
com.mmc.pms.service.ProductSkuService
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -226,7 +226,7 @@ public class ProductServiceImpl implements ProductSkuService {
public
ResultBody
removeProductSpec
(
Integer
id
)
{
// 根据规格id查询绑定的商品或者行业的sku
RemoveSkuDTO
removeSkuDTO
=
new
RemoveSkuDTO
();
List
<
MallProd
InfoDO
>
mallProdSkuInfoSpecList
=
productDao
.
listMallProdInfo
(
id
.
toString
()
);
List
<
MallProd
SkuInfoSpecDO
>
mallProdSkuInfoSpecList
=
productDao
.
listMallProductSpec
(
id
);
// 拿到清单的id
List
<
InventorySpecDO
>
inventorySpecList
=
productDao
.
listInventorySpec
(
id
);
if
(
mallProdSkuInfoSpecList
.
size
()
!=
0
||
inventorySpecList
.
size
()
!=
0
)
{
...
...
@@ -237,7 +237,7 @@ public class ProductServiceImpl implements ProductSkuService {
// 获取行业规格id
Set
<
Integer
>
industrySpecIds
=
industryProductInventoryList
.
stream
().
map
(
IndustryProductInventoryDO:
:
getIndustrySpecId
).
collect
(
Collectors
.
toSet
());
// 分别获取规格对应的sku信息
List
<
IndustrySpecDO
>
industrySpecList
=
product
Dao
.
listIndustrySpec
(
industrySpecIds
);
List
<
IndustrySpecDO
>
industrySpecList
=
industrySpec
Dao
.
listIndustrySpec
(
industrySpecIds
);
List
<
SkuAndSpecDTO
>
industrySkuNameList
=
new
ArrayList
<>();
industrySpecList
.
stream
().
peek
(
d
->
{
SkuAndSpecDTO
skuAndSpecDTO
=
new
SkuAndSpecDTO
();
...
...
src/main/java/com/mmc/pms/util/BizException.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
util
;
import
com.mmc.pms.common.BaseErrorInfoInterface
;
import
com.mmc.pms.common.ResultEnum
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月13日 上午9:25:43
* @explain 类说明
*/
public
class
BizException
extends
RuntimeException
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 错误码
*/
protected
String
errorCode
;
/**
* 错误信息
*/
protected
String
errorMsg
;
public
BizException
()
{
super
();
}
public
BizException
(
BaseErrorInfoInterface
errorInfoInterface
)
{
super
(
errorInfoInterface
.
getResultCode
());
this
.
errorCode
=
errorInfoInterface
.
getResultCode
();
this
.
errorMsg
=
errorInfoInterface
.
getResultMsg
();
}
public
BizException
(
BaseErrorInfoInterface
errorInfoInterface
,
Throwable
cause
)
{
super
(
errorInfoInterface
.
getResultCode
(),
cause
);
this
.
errorCode
=
errorInfoInterface
.
getResultCode
();
this
.
errorMsg
=
errorInfoInterface
.
getResultMsg
();
}
public
BizException
(
ResultEnum
enums
)
{
super
(
enums
.
getResultCode
());
this
.
errorCode
=
enums
.
getResultCode
();
this
.
errorMsg
=
enums
.
getResultMsg
();
}
public
BizException
(
String
errorMsg
)
{
super
(
errorMsg
);
this
.
errorCode
=
"-1"
;
this
.
errorMsg
=
errorMsg
;
}
public
BizException
(
String
errorCode
,
String
errorMsg
)
{
super
(
errorCode
);
this
.
errorCode
=
errorCode
;
this
.
errorMsg
=
errorMsg
;
}
public
BizException
(
String
errorCode
,
String
errorMsg
,
Throwable
cause
)
{
super
(
errorCode
,
cause
);
this
.
errorCode
=
errorCode
;
this
.
errorMsg
=
errorMsg
;
}
public
String
getErrorCode
()
{
return
errorCode
;
}
public
void
setErrorCode
(
String
errorCode
)
{
this
.
errorCode
=
errorCode
;
}
public
String
getErrorMsg
()
{
return
errorMsg
;
}
public
void
setErrorMsg
(
String
errorMsg
)
{
this
.
errorMsg
=
errorMsg
;
}
@Override
public
String
getMessage
()
{
return
errorMsg
;
}
@Override
public
Throwable
fillInStackTrace
()
{
return
this
;
}
}
src/main/java/com/mmc/pms/util/PathUtil.java
0 → 100644
浏览文件 @
54dd9c08
package
com
.
mmc
.
pms
.
util
;
import
org.springframework.util.AntPathMatcher
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月31日 下午3:29:28
* @explain 解析地址类
*/
public
class
PathUtil
{
private
static
AntPathMatcher
matcher
=
new
AntPathMatcher
();
public
static
boolean
isPathMatch
(
String
pattern
,
String
path
)
{
return
matcher
.
match
(
pattern
,
path
);
}
}
src/main/resources/application-local.yml
浏览文件 @
54dd9c08
...
...
@@ -6,17 +6,22 @@ spring:
username
:
tmj
password
:
MMC@2022&MYSQL
redis
:
database
:
3
host
:
r-wz9ke310fs684hacn1.redis.rds.aliyuncs.com
port
:
6379
database
:
1
host
:
r-wz9ke310fs684hacn1pd.redis.rds.aliyuncs.com
password
:
MMC@2022&REDIS
jedis
:
port
:
6379
#连接池
lettuce
:
shutdown-timeout
:
1000
# 关闭超时时间-ms
pool
:
max-active
:
2
servlet
:
multipart
:
max-file-size
:
200MB
max-request-size
:
200MB
#最大连接个数
max-active
:
30
#等待时间-ms
max-wait
:
1000ms
#最大空闲
max-idle
:
8
#初始化最小
min-idle
:
1
#mybatis-plus
mybatis-plus
:
global-config
:
...
...
src/main/resources/mapper/ProductDao.xml
浏览文件 @
54dd9c08
...
...
@@ -40,8 +40,8 @@
set product_name = #{productName},
categories_id = #{categoriesId},
model = #{model},
brand_info_id = #{brandInfoId}
,
where id = #{id}
brand_info_id = #{brandInfoId}
where id = #{id}
</update>
<update
id=
"updateProductSpec"
>
update product_spec
...
...
@@ -279,7 +279,10 @@
and is_deleted = 0
</select>
<select
id=
"countSpecByProdSkuId"
resultType=
"java.lang.Integer"
>
select count(*)
from product_spec
where product_id = #{id}
and is_deleted = 0
</select>
<select
id=
"listMallProdInfo"
resultType=
"com.mmc.pms.entity.MallProdInfoDO"
>
SELECT mp.id,
...
...
@@ -314,7 +317,7 @@
mp.goods_info_id goodsInfoId,
mp.mall_prod_info_id mallProdSkuInfoId,
gi.goods_name goodsName
FROM mall_prod_
sku_
info_spec mp
FROM mall_prod_info_spec mp
INNER JOIN goods_info gi ON gi.id = mp.goods_info_id
WHERE mp.product_spec_id = #{id}
AND mp.is_deleted = 0
...
...
@@ -334,8 +337,8 @@
ps.is_deleted as spec_deleted
FROM
goods_info gi
INNER JOIN mall_prod_
sku_
info mpsi ON gi.id = mpsi.goods_info_id
INNER JOIN mall_prod_
sku_
info_spec mpsip ON mpsi.id = mpsip.mall_prod_sku_info_id
INNER JOIN mall_prod_info mpsi ON gi.id = mpsi.goods_info_id
INNER JOIN mall_prod_info_spec mpsip ON mpsi.id = mpsip.mall_prod_sku_info_id
INNER JOIN product_spec ps ON ps.id = mpsip.product_spec_id
<where>
mpsip.id in (
...
...
@@ -386,7 +389,7 @@
</select>
<select
id=
"getProductSpecByIds"
resultType=
"com.mmc.pms.entity.MallProdSkuInfoSpecDO"
>
select id, goods_info_id goodsInfoId, mall_prod_info_id mallProdSkuInfoId, product_spec_id productSpecId
from mall_prod_
sku_
info_spec
from mall_prod_info_spec
where id in
<foreach
collection=
"list"
separator=
","
item=
"d"
open=
"("
close=
")"
index=
"index"
>
#{d}
...
...
@@ -413,7 +416,7 @@
<collection
property=
"orderGoodsProdDetailDTOS"
ofType=
"com.mmc.pms.model.order.dto.OrderGoodsProdDetailDTO"
>
<result
property=
"mallProdSkuInfoId"
column=
"mall_prod_sku_info_id"
/>
<result
property=
"unitName"
column=
"unit_name"
/>
<result
property=
"mallProdSkuInfoSpecId"
column=
"mall_prod_
sku_
info_spec_id"
/>
<result
property=
"mallProdSkuInfoSpecId"
column=
"mall_prod_info_spec_id"
/>
<result
property=
"productSpecId"
column=
"product_spec_id"
/>
<result
property=
"specName"
column=
"spec_name"
/>
<result
property=
"prodSkuSpecImage"
column=
"prod_sku_spec_image"
/>
...
...
@@ -430,7 +433,8 @@
</collection>
</resultMap>
<select
id=
"listProdGoodsSkuInfo"
resultMap=
"listProdGoodsSkuInfoResultMap"
parameterType=
"com.mmc.pms.model.qo.MallOrderGoodsInfoQO"
>
<select
id=
"listProdGoodsSkuInfo"
resultMap=
"listProdGoodsSkuInfoResultMap"
parameterType=
"com.mmc.pms.model.qo.MallOrderGoodsInfoQO"
>
SELECT
gi.id as goods_info_id,gi.goods_name,gi.goods_no,gi.directory_id,
gimg.img_url as mainImg,
...
...
@@ -464,4 +468,15 @@
)
</where>
</select>
<select
id=
"listMallProductSpec"
resultType=
"com.mmc.pms.entity.MallProdSkuInfoSpecDO"
>
SELECT mp.id,
mp.goods_info_id goodsInfoId,
mp.mall_prod_info_id mallProdSkuInfoId,
gi.goods_name goodsName
FROM mall_prod_info_spec mp
INNER JOIN goods_info gi ON gi.id = mp.goods_info_id
WHERE mp.product_spec_id = #{id}
AND mp.is_deleted = 0
AND gi.is_deleted = 0
</select>
</mapper>
src/main/resources/mapper/work/BackstageTaskServiceDao.xml
0 → 100644
浏览文件 @
54dd9c08
<?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.mmc.pms.dao.BackstageTaskServiceDao"
>
<resultMap
type=
"com.mmc.pms.entity.ServiceDO"
id=
"ServiceMap"
>
<result
property=
"id"
column=
"id"
jdbcType=
"INTEGER"
/>
<result
property=
"serviceName"
column=
"service_name"
jdbcType=
"VARCHAR"
/>
<result
property=
"applicationId"
column=
"application_id"
jdbcType=
"INTEGER"
/>
<result
property=
"industryId"
column=
"industry_id"
jdbcType=
"INTEGER"
/>
<result
property=
"displayState"
column=
"display_state"
jdbcType=
"INTEGER"
/>
<result
property=
"coverPlan"
column=
"cover_plan"
jdbcType=
"VARCHAR"
/>
<result
property=
"shareCard"
column=
"share_card"
jdbcType=
"VARCHAR"
/>
<result
property=
"video"
column=
"video"
jdbcType=
"VARCHAR"
/>
<result
property=
"serviceIntroduction"
column=
"service_introduction"
jdbcType=
"VARCHAR"
/>
<result
property=
"createTime"
column=
"create_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"updateTime"
column=
"update_time"
jdbcType=
"TIMESTAMP"
/>
<result
property=
"isDeleted"
column=
"is_deleted"
jdbcType=
"INTEGER"
/>
<result
property=
"accountId"
column=
"account_id"
jdbcType=
"INTEGER"
/>
</resultMap>
<!--查询所有-->
<select
id=
"queryAll"
resultMap=
"ServiceMap"
>
select id,
service_name,
application_id,
industry_id,
display_state,
cover_plan,
share_card,
video,
service_introduction,
create_time,
update_time,
is_deleted,
account_id
from service
</select>
<!--查询单个-->
<select
id=
"queryById"
resultMap=
"ServiceMap"
>
select id,
service_name,
application_id,
industry_id,
display_state,
cover_plan,
share_card,
video,
service_introduction,
create_time,
update_time,
account_id
from service
where id = #{id}
and is_deleted = 0
</select>
<!--查询指定行数据-->
<select
id=
"queryAllByLimit"
resultMap=
"ServiceMap"
parameterType=
"com.mmc.pms.model.qo.ServiceQO"
>
select
id, service_name, application_id, industry_id, display_state, cover_plan, share_card, video,
service_introduction, create_time, update_time, account_id
from service
<where>
<if
test=
"serviceName != null and serviceName != ''"
>
and service_name = #{serviceName}
</if>
<if
test=
"applicationId != null"
>
and application_id = #{applicationId}
</if>
<if
test=
"industryId != null"
>
and industry_id = #{industryId}
</if>
<if
test=
"accountId != null"
>
and account_id = #{accountId}
</if>
and is_deleted = 0
and display_state = 0
</where>
order by create_time desc
limit #{pageNo}, #{pageSize}
</select>
<!--统计总行数-->
<select
id=
"count"
resultType=
"java.lang.Long"
>
select count(1)
from service
<where>
<if
test=
"id != null"
>
and id = #{id}
</if>
<if
test=
"serviceName != null and serviceName != ''"
>
and service_name = #{serviceName}
</if>
<if
test=
"applicationId != null"
>
and application_id = #{applicationId}
</if>
<if
test=
"industryId != null"
>
and industry_id = #{industryId}
</if>
<if
test=
"displayState != null"
>
and display_state = #{displayState}
</if>
<if
test=
"coverPlan != null and coverPlan != ''"
>
and cover_plan = #{coverPlan}
</if>
<if
test=
"shareCard != null and shareCard != ''"
>
and share_card = #{shareCard}
</if>
<if
test=
"video != null and video != ''"
>
and video = #{video}
</if>
<if
test=
"serviceIntroduction != null and serviceIntroduction != ''"
>
and service_introduction = #{serviceIntroduction}
</if>
<if
test=
"createTime != null"
>
and create_time = #{createTime}
</if>
<if
test=
"updateTime != null"
>
and update_time = #{updateTime}
</if>
<if
test=
"isDeleted != null"
>
and is_deleted = #{isDeleted}
</if>
<if
test=
"accountId != null"
>
and account_id = #{accountId}
</if>
</where>
</select>
<!--新增所有列-->
<insert
id=
"insert"
keyProperty=
"id"
useGeneratedKeys=
"true"
parameterType=
"com.mmc.pms.entity.ServiceDO"
>
insert into service(service_name, application_id, industry_id, display_state, cover_plan, share_card, video,
service_introduction, account_id)
values (#{serviceName}, #{applicationId}, #{industryId}, #{displayState}, #{coverPlan}, #{shareCard},
#{video}, #{serviceIntroduction}, #{accountId})
</insert>
<!--通过主键修改数据-->
<update
id=
"update"
parameterType=
"com.mmc.pms.entity.ServiceDO"
>
update service
<set>
<if
test=
"serviceName != null and serviceName != ''"
>
service_name = #{serviceName},
</if>
<if
test=
"applicationId != null"
>
application_id = #{applicationId},
</if>
<if
test=
"industryId != null"
>
industry_id = #{industryId},
</if>
<if
test=
"displayState != null"
>
display_state = #{displayState},
</if>
<if
test=
"coverPlan != null and coverPlan != ''"
>
cover_plan = #{coverPlan},
</if>
<if
test=
"shareCard != null and shareCard != ''"
>
share_card = #{shareCard},
</if>
<if
test=
"video != null and video != ''"
>
video = #{video},
</if>
<if
test=
"serviceIntroduction != null and serviceIntroduction != ''"
>
service_introduction = #{serviceIntroduction},
</if>
<if
test=
"createTime != null"
>
create_time = #{createTime},
</if>
<if
test=
"updateTime != null"
>
update_time = #{updateTime},
</if>
<if
test=
"accountId != null"
>
account_id = #{accountId},
</if>
</set>
where = #{id}
</update>
<!--通过主键删除-->
<update
id=
"deleteById"
parameterType=
"java.lang.Integer"
>
update service
set is_deleted = 1
where = #{id}
</update>
</mapper>
\ No newline at end of file
src/main/resources/not-check.yml
0 → 100644
浏览文件 @
54dd9c08
data-filter
:
uploadPath
:
#不需要解析的body参数的地址
-
/xxx/x
not-auth-path
:
-
/pms/v2/**
-
/pms/doc.html
-
/pms/swagger-resources/**
-
/pms/webjars/**
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论