Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-module-job
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-module-job
Commits
f99a75cc
提交
f99a75cc
authored
2月 07, 2025
作者:
吕本才
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、优化定时任务日志打印2、分页错误问题解决3、设置字段方法修改
上级
a33b2781
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
62 行增加
和
43 行删除
+62
-43
FinanceOrderDetail.java
...a/com/sfa/job/domain/order/entity/FinanceOrderDetail.java
+33
-22
FinanceSyncOrderDetailDto.java
.../com/sfa/job/pojo/response/FinanceSyncOrderDetailDto.java
+9
-2
FinanceOrderSyncServiceImpl.java
...a/job/service/order/impl/FinanceOrderSyncServiceImpl.java
+11
-16
WangdiantongUtil.java
src/main/java/com/sfa/job/util/WangdiantongUtil.java
+1
-1
FinanceOrderTask.java
src/main/java/com/sfa/job/xxljob/order/FinanceOrderTask.java
+8
-2
没有找到文件。
src/main/java/com/sfa/job/domain/order/entity/FinanceOrderDetail.java
浏览文件 @
f99a75cc
...
@@ -345,69 +345,80 @@ public class FinanceOrderDetail extends BaseDo {
...
@@ -345,69 +345,80 @@ public class FinanceOrderDetail extends BaseDo {
return
""
;
return
""
;
}
}
public
String
getZbjName
(
String
remark
,
FinanceOrderDetail
sameDetail
)
{
public
void
setZbjName
(
String
fenxiaoName
,
String
remark
,
FinanceOrderDetail
sameDetail
)
{
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjName
()))
{
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjName
()))
{
return
sameDetail
.
getZbjName
();
this
.
zbjName
=
sameDetail
.
getZbjName
();
return
;
}
if
(
ObjectUtils
.
isNotEmpty
(
fenxiaoName
))
{
this
.
zbjName
=
fenxiaoName
;
return
;
}
}
// 如果不为空,解析出
// 如果不为空,解析出
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"直播"
))
{
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"直播"
))
{
return
extractByRegex
(
remark
,
"“【直播】”([^;;]*)"
);
this
.
zbjName
=
extractByRegex
(
remark
,
"“【直播】”([^;;]*)"
);
this
.
fenxiaoName
=
this
.
zbjName
;
}
}
return
null
;
}
}
public
String
g
etZbjId
(
String
remark
,
FinanceOrderDetail
sameDetail
)
{
public
void
s
etZbjId
(
String
remark
,
FinanceOrderDetail
sameDetail
)
{
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjId
()))
{
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjId
()))
{
return
sameDetail
.
getZbjId
();
this
.
zbjId
=
sameDetail
.
getZbjId
();
return
;
}
}
// 如果不为空,解析出
// 如果不为空,解析出
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"直播间id"
))
{
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"直播间id"
))
{
return
extractByRegex
(
remark
,
"直播间id:([^;;]\\d+)"
);
this
.
zbjId
=
extractByRegex
(
remark
,
"直播间id:([^;;]\\d+)"
);
}
}
return
null
;
}
}
/**
/**
* 根据分销商和remark备注信息获取主播Id
* 根据分销商和remark备注信息获取主播Id
*
* @param fenxiaoId
* @param fenxiaoId
* @param remark
* @param remark
* @param sameDetail
* @param sameDetail
* @return
* @return
*/
*/
public
String
g
etZbjZbId
(
String
fenxiaoId
,
String
remark
,
FinanceOrderDetail
sameDetail
)
{
public
void
s
etZbjZbId
(
String
fenxiaoId
,
String
remark
,
FinanceOrderDetail
sameDetail
)
{
if
(
ObjectUtils
.
isNotEmpty
(
fenxiaoId
))
{
if
(
ObjectUtils
.
isNotEmpty
(
fenxiaoId
))
{
return
fenxiaoId
;
this
.
zbjZbId
=
fenxiaoId
;
return
;
}
}
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjZbId
()))
{
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjZbId
()))
{
return
sameDetail
.
getZbjZbId
();
this
.
zbjZbId
=
sameDetail
.
getZbjZbId
();
return
;
}
}
// 如果不为空,解析出
// 如果不为空,解析出
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"主播id"
))
{
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"主播id"
))
{
return
extractByRegex
(
remark
,
"主播id:([^;;]\\d+)"
);
this
.
zbjZbId
=
extractByRegex
(
remark
,
"主播id:([^;;]\\d+)"
);
this
.
fenxiaoId
=
this
.
zbjZbId
;
return
;
}
}
return
null
;
}
}
public
String
g
etZbjSaleType
(
String
remark
,
FinanceOrderDetail
sameDetail
)
{
public
void
s
etZbjSaleType
(
String
remark
,
FinanceOrderDetail
sameDetail
)
{
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjSaleType
()))
{
if
(
ObjectUtils
.
isNotEmpty
(
sameDetail
)
&&
ObjectUtils
.
isNotEmpty
(
sameDetail
.
getZbjSaleType
()))
{
return
sameDetail
.
getZbjSaleType
();
this
.
zbjSaleType
=
sameDetail
.
getZbjSaleType
();
return
;
}
}
// 如果不为空,解析出
// 如果不为空,解析出
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"销售类型:"
))
{
if
(
ObjectUtils
.
isNotEmpty
(
remark
)
&&
remark
.
contains
(
"销售类型:"
))
{
return
extractByRegex
(
remark
,
"销售类型:([^;;]*);"
);
this
.
zbjSaleType
=
extractByRegex
(
remark
,
"销售类型:([^;;]*);"
);
}
}
return
null
;
}
}
public
String
g
etZbjQdType
(
String
fenxiaoId
,
String
zbjZbId
,
Map
<
String
,
String
>
baseZbjType
)
{
public
void
s
etZbjQdType
(
String
fenxiaoId
,
String
zbjZbId
,
Map
<
String
,
String
>
baseZbjType
)
{
if
(
ObjectUtils
.
isNotEmpty
(
fenxiaoId
))
{
if
(
ObjectUtils
.
isNotEmpty
(
fenxiaoId
))
{
zbjZbId
=
fenxiaoId
;
zbjZbId
=
fenxiaoId
;
}
}
String
zbj
Type
=
baseZbjType
.
get
(
zbjZbId
);
this
.
zbjQd
Type
=
baseZbjType
.
get
(
zbjZbId
);
if
(
ObjectUtils
.
isNotEmpty
(
zbjZbId
)
&&
ObjectUtils
.
isEmpty
(
zbj
Type
))
{
if
(
ObjectUtils
.
isNotEmpty
(
zbjZbId
)
&&
ObjectUtils
.
isEmpty
(
this
.
zbjQd
Type
))
{
return
baseZbjType
.
get
(
"其他分销名称"
);
this
.
zbjQdType
=
baseZbjType
.
get
(
"其他分销名称"
);
}
}
return
zbjType
;
}
}
}
}
src/main/java/com/sfa/job/pojo/response/FinanceSyncOrderDetailDto.java
浏览文件 @
f99a75cc
package
com
.
sfa
.
job
.
pojo
.
response
;
package
com
.
sfa
.
job
.
pojo
.
response
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.Date
;
...
@@ -9,16 +10,22 @@ import java.util.Date;
...
@@ -9,16 +10,22 @@ import java.util.Date;
*/
*/
@Data
@Data
public
class
FinanceSyncOrderDetailDto
{
public
class
FinanceSyncOrderDetailDto
{
/**
* 订单数量
*/
private
Integer
orderCount
;
private
Integer
orderCount
;
private
Integer
orderDetailCount
;
private
Integer
orderDetailCount
;
// private List<FinanceOrder> orders;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
// private List<FinanceOrderDetail> orderDetails;
private
Date
startTime
;
private
Date
startTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
endTime
;
private
Date
endTime
;
private
Integer
syncType
;
private
Integer
syncType
;
private
String
batchNo
;
private
String
batchNo
;
private
Integer
pageNo
;
private
Integer
pageNo
;
private
Integer
totalCount
;
private
Integer
totalCount
;
/**
* 错误信息
*/
private
String
message
;
private
String
message
;
}
}
src/main/java/com/sfa/job/service/order/impl/FinanceOrderSyncServiceImpl.java
浏览文件 @
f99a75cc
...
@@ -94,7 +94,7 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
...
@@ -94,7 +94,7 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
// 调用查询旺店通接口api 获取最新日期前的2小时
// 调用查询旺店通接口api 获取最新日期前的2小时
Date
currentLatest
=
DateUtils
.
addHours
(
new
Date
(),
-
2
);
Date
currentLatest
=
DateUtils
.
addHours
(
new
Date
(),
-
2
);
if
(
currentLatest
.
compareTo
(
startTime
)
<
0
)
{
if
(
currentLatest
.
compareTo
(
startTime
)
<
0
)
{
detailDto
.
setMessage
(
String
.
format
(
"开始时间%s不能大于当前时间%s"
,
startTime
,
currentLatest
));
detailDto
.
setMessage
(
String
.
format
(
"开始时间%s不能大于当前时间%s"
,
startTime
,
currentLatest
));
log
.
warn
(
detailDto
.
getMessage
());
log
.
warn
(
detailDto
.
getMessage
());
return
detailDto
;
return
detailDto
;
}
}
...
@@ -112,7 +112,6 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
...
@@ -112,7 +112,6 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
WangdiantongQueryDto
wangdiantongQueryDto
=
wangdiantongUtil
.
queryWithDetail
(
wangdiantongQueryVO
,
beginPageNo
);
WangdiantongQueryDto
wangdiantongQueryDto
=
wangdiantongUtil
.
queryWithDetail
(
wangdiantongQueryVO
,
beginPageNo
);
JSONArray
orderAllArray
=
wangdiantongQueryDto
.
getResult
();
JSONArray
orderAllArray
=
wangdiantongQueryDto
.
getResult
();
if
(
ObjectUtils
.
isEmpty
(
orderAllArray
))
{
if
(
ObjectUtils
.
isEmpty
(
orderAllArray
))
{
detailDto
.
setMessage
(
String
.
format
(
"旺店通没有查询到订单数据"
));
throw
new
ServiceException
(
"旺店通没有查询到订单数据"
);
throw
new
ServiceException
(
"旺店通没有查询到订单数据"
);
}
}
...
@@ -151,7 +150,6 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
...
@@ -151,7 +150,6 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
List
<
FinanceOrderDetail
>
orderDetails
=
order
.
getDetailList
();
List
<
FinanceOrderDetail
>
orderDetails
=
order
.
getDetailList
();
for
(
FinanceOrderDetail
orderDetail
:
orderDetails
)
{
for
(
FinanceOrderDetail
orderDetail
:
orderDetails
)
{
orderDetail
.
setSeries
(
prodSeriesMap
.
get
(
orderDetail
.
getGoodsNo
()));
orderDetail
.
setSeries
(
prodSeriesMap
.
get
(
orderDetail
.
getGoodsNo
()));
orderDetail
.
setTradeStatus
(
order
.
getTradeStatus
());
orderDetail
.
setTradeStatus
(
order
.
getTradeStatus
());
orderDetail
.
setShopNo
(
order
.
getShopNo
());
orderDetail
.
setShopNo
(
order
.
getShopNo
());
orderDetail
.
setShopName
(
order
.
getShopName
());
orderDetail
.
setShopName
(
order
.
getShopName
());
...
@@ -172,27 +170,24 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
...
@@ -172,27 +170,24 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
// 如果存在相同的
// 如果存在相同的
FinanceOrderDetail
sameDetail
=
orderZbj
.
get
(
orderDetail
.
getSrcTid
());
FinanceOrderDetail
sameDetail
=
orderZbj
.
get
(
orderDetail
.
getSrcTid
());
orderDetail
.
setZbjName
(
orderDetail
.
getZbjName
(
orderDetail
.
getRemark
(),
sameDetail
));
orderDetail
.
setZbjName
(
orderDetail
.
getFenxiaoName
(),
orderDetail
.
getRemark
(),
sameDetail
);
orderDetail
.
setZbjId
(
orderDetail
.
getZbjId
(
orderDetail
.
getRemark
(),
sameDetail
));
orderDetail
.
setZbjId
(
orderDetail
.
getRemark
(),
sameDetail
);
orderDetail
.
setZbjZbId
(
orderDetail
.
getZbjZbId
(
orderDetail
.
getFenxiaoId
(),
orderDetail
.
getRemark
(),
sameDetail
));
orderDetail
.
setZbjZbId
(
orderDetail
.
getFenxiaoId
(),
orderDetail
.
getRemark
(),
sameDetail
);
orderDetail
.
setZbjSaleType
(
orderDetail
.
getZbjSaleType
(
orderDetail
.
getRemark
(),
sameDetail
));
orderDetail
.
setZbjSaleType
(
orderDetail
.
getRemark
(),
sameDetail
);
orderDetail
.
setFenxiaoId
(
orderDetail
.
getZbjZbId
());
orderDetail
.
setFenxiaoName
(
orderDetail
.
getZbjName
());
// 确定分销商类型
// 确定分销商类型
orderDetail
.
setZbjQdType
(
orderDetail
.
get
ZbjQdType
(
orderDetail
.
getFenxiaoId
(),
orderDetail
.
getZbjZbId
(),
baseZbjType
)
);
orderDetail
.
setZbjQdType
(
orderDetail
.
get
FenxiaoId
(),
orderDetail
.
getZbjZbId
(),
baseZbjType
);
if
(
ObjectUtils
.
isNotEmpty
(
orderDetail
.
getZbjName
()))
{
if
(
ObjectUtils
.
isNotEmpty
(
orderDetail
.
getZbjName
()))
{
orderZbj
.
put
(
orderDetail
.
getSrcTid
(),
orderDetail
);
orderZbj
.
put
(
orderDetail
.
getSrcTid
(),
orderDetail
);
}
}
orderDetail
.
setFlavorErp
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getFlavor
()
:
""
);
orderDetail
.
setFlavorErp
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getFlavor
()
:
""
);
orderDetail
.
setSpecNameErp
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getSpec
()
:
""
);
orderDetail
.
setSpecNameErp
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getSpec
()
:
""
);
orderDetail
.
setActualCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
orderDetail
.
setActualCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getActualCost
()
:
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getActualCost
()
:
new
BigDecimal
(
0
)
new
BigDecimal
(
0
)
);
);
orderDetail
.
setStandardCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
orderDetail
.
setStandardCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getStandardCost
()
:
baseProductMap
.
get
(
orderDetail
.
getGoodsNo
()).
getStandardCost
()
:
new
BigDecimal
(
0
)
new
BigDecimal
(
0
)
);
);
orderDetail
.
setSumActualCost
(
orderDetail
.
getActualCost
().
multiply
(
orderDetail
.
getNum
()));
orderDetail
.
setSumActualCost
(
orderDetail
.
getActualCost
().
multiply
(
orderDetail
.
getNum
()));
orderDetail
.
setSumStandardCost
(
orderDetail
.
getStandardCost
().
multiply
(
orderDetail
.
getNum
()));
orderDetail
.
setSumStandardCost
(
orderDetail
.
getStandardCost
().
multiply
(
orderDetail
.
getNum
()));
...
@@ -240,7 +235,7 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
...
@@ -240,7 +235,7 @@ public class FinanceOrderSyncServiceImpl extends ServiceImpl<FinanceOrderMapper,
errorInfo
.
setStartTime
(
startTime
);
errorInfo
.
setStartTime
(
startTime
);
errorInfo
.
setCollectTime
(
new
Date
());
errorInfo
.
setCollectTime
(
new
Date
());
errorInfoDao
.
insert
(
errorInfo
);
errorInfoDao
.
insert
(
errorInfo
);
throw
e
;
detailDto
.
setMessage
(
e
.
toString
())
;
}
}
return
detailDto
;
return
detailDto
;
}
}
...
...
src/main/java/com/sfa/job/util/WangdiantongUtil.java
浏览文件 @
f99a75cc
...
@@ -99,7 +99,7 @@ public class WangdiantongUtil {
...
@@ -99,7 +99,7 @@ public class WangdiantongUtil {
// 计算下一次分页的页码
// 计算下一次分页的页码
pageNo
++;
pageNo
++;
}
while
(
size
<
maxDealCount
&&
pageNo
<=
maxPage
);
}
while
(
size
<
maxDealCount
&&
pageNo
<=
maxPage
);
if
(
pageNo
>
=
maxPage
)
{
if
(
pageNo
>
maxPage
)
{
// 已经到最后一页了,设置成-1,表示已经处理完了,不再查询
// 已经到最后一页了,设置成-1,表示已经处理完了,不再查询
beginPageNo
.
set
(-
1
);
beginPageNo
.
set
(-
1
);
}
else
{
}
else
{
...
...
src/main/java/com/sfa/job/xxljob/order/FinanceOrderTask.java
浏览文件 @
f99a75cc
package
com
.
sfa
.
job
.
xxljob
.
order
;
package
com
.
sfa
.
job
.
xxljob
.
order
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.job.pojo.response.FinanceSyncOrderDetailDto
;
import
com.sfa.job.pojo.response.FinanceSyncOrderDetailDto
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
com.sfa.job.service.order.FinanceOrderSyncService
;
import
com.xxl.job.core.context.XxlJobContext
;
import
com.xxl.job.core.context.XxlJobContext
;
...
@@ -40,11 +42,15 @@ public class FinanceOrderTask {
...
@@ -40,11 +42,15 @@ public class FinanceOrderTask {
// 定时任务不设定开始时间和结束时间
// 定时任务不设定开始时间和结束时间
FinanceSyncOrderDetailDto
detailDto
=
financeOrderSyncService
.
syncWangdiantongOrder
(
null
,
null
,
0
);
FinanceSyncOrderDetailDto
detailDto
=
financeOrderSyncService
.
syncWangdiantongOrder
(
null
,
null
,
0
);
XxlJobHelper
.
log
(
"xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}"
,
XxlJobHelper
.
log
(
"xxl-job结束同步-旺店通订单明细api接口数据, 共同步订单{}条数据,订单明细{}条,订单批次号:{},订单的开始时间{}和结束时间{}"
,
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
detailDto
.
getOrderCount
(),
detailDto
.
getOrderDetailCount
(),
detailDto
.
getBatchNo
(),
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
())
);
DateUtil
.
formatDateTime
(
detailDto
.
getStartTime
()),
DateUtil
.
formatDateTime
(
detailDto
.
getEndTime
())
);
return
detailDto
;
if
(
ObjectUtil
.
isNotEmpty
(
detailDto
.
getMessage
())){
XxlJobHelper
.
handleFail
(
detailDto
.
getMessage
());
}
else
{
XxlJobHelper
.
handleSuccess
(
JSONObject
.
toJSONString
(
detailDto
));
}
return
detailDto
;
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论