Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
ty-weekly
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
朱旭欣
ty-weekly
Commits
0098e95e
提交
0098e95e
authored
7月 07, 2022
作者:
朱旭欣
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
第四次提交
上级
edf2d83c
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
115 行增加
和
37 行删除
+115
-37
pom.xml
pom.xml
+8
-0
TimedTask.java
src/main/java/com/example/tyweekly/config/TimedTask.java
+3
-0
WebMvcConfig.java
src/main/java/com/example/tyweekly/config/WebMvcConfig.java
+23
-2
WeeklyController.java
...ava/com/example/tyweekly/controller/WeeklyController.java
+5
-4
WeeklyUser.java
src/main/java/com/example/tyweekly/entity/WeeklyUser.java
+8
-0
WeeklyFileService.java
.../java/com/example/tyweekly/service/WeeklyFileService.java
+3
-1
WeeklyFileServiceImpl.java
.../example/tyweekly/service/impl/WeeklyFileServiceImpl.java
+59
-28
application.properties
src/main/resources/application.properties
+6
-2
没有找到文件。
pom.xml
浏览文件 @
0098e95e
...
@@ -64,6 +64,10 @@
...
@@ -64,6 +64,10 @@
<artifactId>
mysql-connector-java
</artifactId>
<artifactId>
mysql-connector-java
</artifactId>
<scope>
runtime
</scope>
<scope>
runtime
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-thymeleaf
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<artifactId>
lombok
</artifactId>
...
@@ -84,6 +88,10 @@
...
@@ -84,6 +88,10 @@
<artifactId>
springfox-swagger-ui
</artifactId>
<artifactId>
springfox-swagger-ui
</artifactId>
<version>
2.9.1
</version>
<version>
2.9.1
</version>
</dependency>
</dependency>
<dependency>
<groupId>
org.junit.platform
</groupId>
<artifactId>
junit-platform-engine
</artifactId>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
src/main/java/com/example/tyweekly/config/TimedTask.java
浏览文件 @
0098e95e
...
@@ -140,4 +140,7 @@ public class TimedTask {
...
@@ -140,4 +140,7 @@ public class TimedTask {
}
}
src/main/java/com/example/tyweekly/config/WebMvcConfig.java
浏览文件 @
0098e95e
package
com
.
example
.
tyweekly
.
config
;
package
com
.
example
.
tyweekly
.
config
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.cors.CorsConfiguration
;
import
org.springframework.web.cors.reactive.CorsWebFilter
;
import
org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource
;
import
org.springframework.web.servlet.config.annotation.CorsRegistry
;
import
org.springframework.web.servlet.config.annotation.CorsRegistry
;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
...
@@ -16,6 +20,8 @@ import java.io.File;
...
@@ -16,6 +20,8 @@ import java.io.File;
**/
**/
@Configuration
@Configuration
public
class
WebMvcConfig
{
public
class
WebMvcConfig
{
@Value
(
"${file.path1}"
)
private
String
save
;
@Bean
@Bean
public
WebMvcConfigurer
corsConfigurer
()
{
public
WebMvcConfigurer
corsConfigurer
()
{
...
@@ -31,11 +37,11 @@ public class WebMvcConfig {
...
@@ -31,11 +37,11 @@ public class WebMvcConfig {
}
}
@Override
@Override
public
void
addResourceHandlers
(
ResourceHandlerRegistry
registry
)
{
public
void
addResourceHandlers
(
ResourceHandlerRegistry
registry
)
{
registry
.
addResourceHandler
(
"/file/**"
)
registry
.
addResourceHandler
(
"/file/**"
)
.
addResourceLocations
(
"file:"
+
"/root/projects/weekly/save"
+
File
.
separator
);
.
addResourceLocations
(
"file:"
+
save
);
}
}
...
@@ -43,4 +49,19 @@ public class WebMvcConfig {
...
@@ -43,4 +49,19 @@ public class WebMvcConfig {
};
};
}
}
// @Bean
// public CorsWebFilter corsWebFilter(){
// CorsConfiguration configuration = new CorsConfiguration();
// configuration.addAllowedOrigin("*");
// configuration.setAllowCredentials(true);
// configuration.addAllowedMethod("*");
// configuration.addAllowedHeader("*");
//
// UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();
// configurationSource.registerCorsConfiguration("/**", configuration);
//
// return new CorsWebFilter(configurationSource);
// }
}
}
src/main/java/com/example/tyweekly/controller/WeeklyController.java
浏览文件 @
0098e95e
...
@@ -4,6 +4,7 @@ import com.example.tyweekly.entity.ReturnPojo;
...
@@ -4,6 +4,7 @@ import com.example.tyweekly.entity.ReturnPojo;
import
com.example.tyweekly.entity.WeeklyCondition
;
import
com.example.tyweekly.entity.WeeklyCondition
;
import
com.example.tyweekly.service.WeeklyFileService
;
import
com.example.tyweekly.service.WeeklyFileService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
...
@@ -11,6 +12,7 @@ import org.springframework.validation.annotation.Validated;
...
@@ -11,6 +12,7 @@ import org.springframework.validation.annotation.Validated;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.FileNotFoundException
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -51,11 +53,10 @@ public class WeeklyController {
...
@@ -51,11 +53,10 @@ public class WeeklyController {
}
}
@PostMapping
(
"/download"
)
@PostMapping
(
value
=
"/download"
)
@ApiOperation
(
value
=
"一键下载"
)
@ApiOperation
(
value
=
"一键下载"
)
public
ReturnPojo
downloadZip
()
throws
FileNotFoundException
{
public
HttpServletResponse
downloadZip
(
HttpServletResponse
response
)
throws
FileNotFoundException
{
weeklyFileService
.
downloadZip
();
return
weeklyFileService
.
downloadZip
(
response
);
return
ReturnPojo
.
ok
(
"下载成功"
);
}
}
...
...
src/main/java/com/example/tyweekly/entity/WeeklyUser.java
浏览文件 @
0098e95e
package
com
.
example
.
tyweekly
.
entity
;
package
com
.
example
.
tyweekly
.
entity
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
@@ -7,6 +8,7 @@ import lombok.Data;
...
@@ -7,6 +8,7 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
javax.persistence.*
;
import
javax.persistence.*
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -25,12 +27,18 @@ public class WeeklyUser {
...
@@ -25,12 +27,18 @@ public class WeeklyUser {
@ApiModelProperty
(
value
=
"用户主键ID"
,
example
=
"1"
)
@ApiModelProperty
(
value
=
"用户主键ID"
,
example
=
"1"
)
private
Integer
id
;
private
Integer
id
;
@NotNull
(
message
=
"用户名不能为空"
)
@ApiModelProperty
(
value
=
"用户名称"
,
example
=
"小明"
)
@ApiModelProperty
(
value
=
"用户名称"
,
example
=
"小明"
)
private
String
userName
;
private
String
userName
;
@ApiModelProperty
(
value
=
"文件"
,
example
=
"小明"
)
@ApiModelProperty
(
value
=
"文件"
,
example
=
"小明"
)
@Transient
@Transient
@JsonIgnore
private
List
<
WeeklyFile
>
files
;
private
List
<
WeeklyFile
>
files
;
@ApiModelProperty
(
value
=
"单个对象"
,
example
=
"小明"
)
@Transient
private
WeeklyFile
fileOne
;
}
}
src/main/java/com/example/tyweekly/service/WeeklyFileService.java
浏览文件 @
0098e95e
...
@@ -4,6 +4,7 @@ import com.example.tyweekly.entity.*;
...
@@ -4,6 +4,7 @@ import com.example.tyweekly.entity.*;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Page
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.FileNotFoundException
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -38,7 +39,8 @@ public interface WeeklyFileService {
...
@@ -38,7 +39,8 @@ public interface WeeklyFileService {
/**
/**
* 下载
* 下载
* @return
* @throws FileNotFoundException
* @throws FileNotFoundException
*/
*/
void
downloadZip
(
)
throws
FileNotFoundException
;
HttpServletResponse
downloadZip
(
HttpServletResponse
response
)
throws
FileNotFoundException
;
}
}
src/main/java/com/example/tyweekly/service/impl/WeeklyFileServiceImpl.java
浏览文件 @
0098e95e
...
@@ -6,24 +6,17 @@ import com.example.tyweekly.dao.WeeklyFileDao;
...
@@ -6,24 +6,17 @@ import com.example.tyweekly.dao.WeeklyFileDao;
import
com.example.tyweekly.dao.WeeklyUserDao
;
import
com.example.tyweekly.dao.WeeklyUserDao
;
import
com.example.tyweekly.entity.*
;
import
com.example.tyweekly.entity.*
;
import
com.example.tyweekly.service.WeeklyFileService
;
import
com.example.tyweekly.service.WeeklyFileService
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.jpa.domain.Specification
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.persistence.criteria.CriteriaBuilder
;
import
java.io.*
;
import
javax.persistence.criteria.CriteriaQuery
;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.function.Function
;
...
@@ -53,20 +46,20 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
...
@@ -53,20 +46,20 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
//MultipartFile 接收前端传过来的文件
//MultipartFile 接收前端传过来的文件
// 注意 前端传参的name要和MultipartFile的对象名保持一直 比如此处对象名为file 则前端传参的name也要为file
// 注意 前端传参的name要和MultipartFile的对象名保持一直 比如此处对象名为file 则前端传参的name也要为file
//获取上传文件的文件名
//获取上传文件的文件名
String
oldName
=
file
.
getOriginalFilename
();
String
oldName
=
file
.
getOriginalFilename
();
List
<
WeeklyFile
>
all
=
weeklyFileDao
.
findAll
();
List
<
WeeklyFile
>
all
=
weeklyFileDao
.
findAll
();
//删除重名文件
//删除重名文件
for
(
WeeklyFile
weeklyFile
:
all
)
{
for
(
WeeklyFile
weeklyFile
:
all
)
{
if
(
weeklyFile
.
getWeeklyName
().
equals
(
oldName
))
{
if
(
weeklyFile
.
getWeeklyName
().
equals
(
oldName
))
{
weeklyFileDao
.
deleteById
(
weeklyFile
.
getId
());
weeklyFileDao
.
deleteById
(
weeklyFile
.
getId
());
}
}
}
}
//指定上传路径
//指定上传路径
String
path
=
save
;
String
path
=
save
;
//拼接成为新文件的路径
//拼接成为新文件的路径
String
filePath
=
path
+
oldName
;
String
filePath
=
path
+
oldName
;
//创建新文件对象 指定文件路径为拼接好的路径
//创建新文件对象 指定文件路径为拼接好的路径
File
newFile
=
new
File
(
filePath
);
File
newFile
=
new
File
(
filePath
);
//将前端传递过来的文件输送给新文件 这里需要抛出IO异常 throws IOException
//将前端传递过来的文件输送给新文件 这里需要抛出IO异常 throws IOException
file
.
transferTo
(
newFile
);
file
.
transferTo
(
newFile
);
//上传完成后将文件路径返回给前端用作图片回显或增加时的文件路径值等
//上传完成后将文件路径返回给前端用作图片回显或增加时的文件路径值等
...
@@ -74,12 +67,11 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
...
@@ -74,12 +67,11 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
weeklyFile1
.
setUploadAddress
(
filePath
);
weeklyFile1
.
setUploadAddress
(
filePath
);
weeklyFile1
.
setWeeklyName
(
oldName
);
weeklyFile1
.
setWeeklyName
(
oldName
);
weeklyFile1
.
setUploadTime
(
LocalDateTime
.
now
());
weeklyFile1
.
setUploadTime
(
LocalDateTime
.
now
());
return
weeklyFileDao
.
save
(
weeklyFile1
);
return
weeklyFileDao
.
save
(
weeklyFile1
);
}
}
@Override
@Override
public
void
deleteFile
(
Integer
id
){
public
void
deleteFile
(
Integer
id
)
{
String
fileUpload
=
weeklyFileDao
.
findById
(
id
).
get
().
getUploadAddress
();
String
fileUpload
=
weeklyFileDao
.
findById
(
id
).
get
().
getUploadAddress
();
File
file
=
new
File
(
fileUpload
);
File
file
=
new
File
(
fileUpload
);
file
.
delete
();
file
.
delete
();
...
@@ -101,7 +93,7 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
...
@@ -101,7 +93,7 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
WeeklyUser
weeklyUser
=
userMap
.
get
(
s
);
WeeklyUser
weeklyUser
=
userMap
.
get
(
s
);
List
<
WeeklyFile
>
weeklyFiles
=
new
ArrayList
<>();
List
<
WeeklyFile
>
weeklyFiles
=
new
ArrayList
<>();
weeklyFileList
.
forEach
(
weeklyFile
->
{
weeklyFileList
.
forEach
(
weeklyFile
->
{
if
(
weeklyFile
.
getWeeklyName
().
contains
(
s
)){
if
(
weeklyFile
.
getWeeklyName
().
contains
(
s
))
{
//如果存在
//如果存在
weeklyFiles
.
add
(
weeklyFile
);
weeklyFiles
.
add
(
weeklyFile
);
}
}
...
@@ -113,38 +105,77 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
...
@@ -113,38 +105,77 @@ public class WeeklyFileServiceImpl implements WeeklyFileService {
//1 上交的
//1 上交的
Integer
status
=
weeklyCondition
.
getStatus
();
Integer
status
=
weeklyCondition
.
getStatus
();
List
<
WeeklyUser
>
userList1
=
new
ArrayList
<>();
List
<
WeeklyUser
>
userList1
=
new
ArrayList
<>();
switch
(
status
)
{
switch
(
status
)
{
case
0
:
case
0
:
//未上交
//未上交
userList1
=
userList
.
stream
().
filter
(
weeklyUser
->
weeklyUser
.
getFiles
().
size
()
==
0
).
collect
(
Collectors
.
toList
());
userList1
=
userList
.
stream
().
filter
(
weeklyUser
->
weeklyUser
.
getFiles
().
size
()
==
0
).
collect
(
Collectors
.
toList
());
break
;
//可选
break
;
//可选
case
1
:
case
1
:
//提交
//提交
userList1
=
userList
.
stream
().
filter
(
weeklyUser
->
weeklyUser
.
getFiles
().
size
()
!=
0
).
collect
(
Collectors
.
toList
());
userList1
=
userList
.
stream
().
filter
(
weeklyUser
->
weeklyUser
.
getFiles
().
size
()
!=
0
).
collect
(
Collectors
.
toList
());
break
;
//可选
break
;
//可选
//你可以有任意数量的case语句
//你可以有任意数量的case语句
case
2
:
case
2
:
//提交
//提交
userList1
=
userList
;
userList1
=
userList
;
break
;
//可选
break
;
//可选
default
:
//可选
default
:
//可选
userList1
=
userList
;
userList1
=
userList
;
//userList
//userList
}
}
for
(
WeeklyUser
weeklyUser
:
userList1
)
{
if
(
weeklyUser
.
getFiles
().
size
()
==
0
)
{
weeklyUser
.
setFiles
(
null
);
}
else
{
for
(
WeeklyFile
file
:
weeklyUser
.
getFiles
())
{
weeklyUser
.
setFileOne
(
file
);
}
}
}
//做物理分页
//做物理分页
Page
<
WeeklyUser
>
perPage
=
PageUtil
.
getPerPage
(
of1
.
getPageNumber
()
-
1
,
of1
.
getPageSize
(),
userList1
,
of1
);
Page
<
WeeklyUser
>
perPage
=
PageUtil
.
getPerPage
(
of1
.
getPageNumber
()
-
1
,
of1
.
getPageSize
(),
userList1
,
of1
);
return
perPage
;
return
perPage
;
}
}
@Override
@Override
public
void
downloadZip
()
throws
FileNotFoundException
{
public
HttpServletResponse
downloadZip
(
HttpServletResponse
response
)
throws
FileNotFoundException
{
List
<
WeeklyFile
>
all
=
weeklyFileDao
.
findAll
();
List
<
WeeklyFile
>
all
=
weeklyFileDao
.
findAll
();
List
<
File
>
fileList
=
new
ArrayList
<>();
List
<
File
>
fileList
=
new
ArrayList
<>();
for
(
WeeklyFile
weeklyFile
:
all
)
{
for
(
WeeklyFile
weeklyFile
:
all
)
{
fileList
.
add
(
new
File
(
weeklyFile
.
getUploadAddress
()));
fileList
.
add
(
new
File
(
weeklyFile
.
getUploadAddress
()));
}
}
FileOutputStream
fos2
=
new
FileOutputStream
(
new
File
(
download
)
);
FileOutputStream
fos2
=
new
FileOutputStream
(
download
);
TimedTask
.
toZip
(
fileList
,
fos2
);
TimedTask
.
toZip
(
fileList
,
fos2
);
try
{
File
file
=
new
File
(
download
);
// 取得文件名。
String
filename
=
file
.
getName
();
// 取得文件的后缀名。
String
ext
=
filename
.
substring
(
filename
.
lastIndexOf
(
"."
)
+
1
).
toUpperCase
();
// 以流的形式下载文件。
InputStream
fis
=
new
BufferedInputStream
(
new
FileInputStream
(
file
));
byte
[]
buffer
=
new
byte
[
fis
.
available
()];
fis
.
read
(
buffer
);
fis
.
close
();
// 清空response
response
.
reset
();
// 设置response的Header
response
.
addHeader
(
"Content-Disposition"
,
"attachment;filename="
+
new
String
(
filename
.
getBytes
()));
response
.
addHeader
(
"Content-Length"
,
""
+
file
.
length
());
OutputStream
toClient
=
new
BufferedOutputStream
(
response
.
getOutputStream
());
response
.
addHeader
(
"Access-Control-Allow-Origin"
,
"*"
);
response
.
setContentType
(
"application/octet-stream; charset=utf-8"
);
toClient
.
write
(
buffer
);
toClient
.
flush
();
toClient
.
close
();
}
catch
(
IOException
ex
)
{
ex
.
printStackTrace
();
}
return
response
;
}
}
}
}
src/main/resources/application.properties
浏览文件 @
0098e95e
...
@@ -4,10 +4,14 @@ spring.datasource.url=jdbc:mysql://192.168.100.249:3306/weekly?serverTimezone=As
...
@@ -4,10 +4,14 @@ spring.datasource.url=jdbc:mysql://192.168.100.249:3306/weekly?serverTimezone=As
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
spring.datasource.username
=
root
spring.datasource.username
=
root
spring.datasource.password
=
root
spring.datasource.password
=
root
spring.servlet.multipart.max-file-size
=
1024MB
spring.servlet.multipart.max-request-size
=
1024MB
spring.jpa.hibernate.ddl-auto
=
update
spring.jpa.hibernate.ddl-auto
=
update
spring.jpa.show-sql
=
true
spring.jpa.show-sql
=
true
spring.jpa.properties.hibernate.format_sql
=
true
spring.jpa.properties.hibernate.format_sql
=
true
file.path
=
/root/projects/weekly/download/ty-weekly.zip
#file.path=/root/projects/weekly/download/ty-weekly.zip
file.path
=
C:/Intel/ty-weekly.zip
file.path1
=
/root/projects/weekly/save/
file.path1
=
C:/Intel/
#file.path1=/root/projects/weekly/save/
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论