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
12543d0e
提交
12543d0e
authored
3月 25, 2026
作者:
吕本才
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(经销商): 新增经销商查询接口及相关功能
新增经销商查询接口,包括分页查询和全量查询功能 添加经销商查询请求参数类 QinceDealerQueryRequest 和 QinceAllDealerQueryRequest 实现经销商查询服务层逻辑和控制器接口 优化订单同步服务,添加成本字段计算逻辑 调整批量处理大小和分页查询条件
上级
ef56f543
隐藏空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
243 行增加
和
8 行删除
+243
-8
QinceDealerController.java
...a/com/sfa/job/controller/qince/QinceDealerController.java
+63
-0
WdtQimenOrderDao.java
...n/java/com/sfa/job/domain/order/dao/WdtQimenOrderDao.java
+0
-1
WdtQimenStockoutOrderDaoImpl.java
...fa/job/domain/order/dao/WdtQimenStockoutOrderDaoImpl.java
+1
-1
WdtQimenStockoutOrder.java
...om/sfa/job/domain/order/entity/WdtQimenStockoutOrder.java
+2
-2
WdtQimenStockoutOrderDetail.java
.../job/domain/order/entity/WdtQimenStockoutOrderDetail.java
+11
-2
QinceAllDealerQueryRequest.java
...fa/job/pojo/qince/request/QinceAllDealerQueryRequest.java
+8
-0
QinceDealerQueryRequest.java
...m/sfa/job/pojo/qince/request/QinceDealerQueryRequest.java
+10
-0
WdtQimenOrderPayTimeSyncServiceImpl.java
...rvice/order/impl/WdtQimenOrderPayTimeSyncServiceImpl.java
+0
-1
WdtQimenOrderSyncServiceImpl.java
.../job/service/order/impl/WdtQimenOrderSyncServiceImpl.java
+1
-1
WdtQimenStockoutOrderSyncServiceImpl.java
...vice/order/impl/WdtQimenStockoutOrderSyncServiceImpl.java
+23
-0
IQinceDealerQueryService.java
...a/com/sfa/job/service/qince/IQinceDealerQueryService.java
+7
-0
QinceDealerQueryServiceImpl.java
...a/job/service/qince/impl/QinceDealerQueryServiceImpl.java
+33
-0
QinCeUtils.java
src/main/java/com/sfa/job/util/QinCeUtils.java
+51
-0
WdtQimenStockoutOrderDetailMapper.xml
...ources/mapper/order/WdtQimenStockoutOrderDetailMapper.xml
+21
-0
WdtQimenStockoutOrderMapper.xml
...in/resources/mapper/order/WdtQimenStockoutOrderMapper.xml
+12
-0
没有找到文件。
src/main/java/com/sfa/job/controller/qince/QinceDealerController.java
0 → 100644
浏览文件 @
12543d0e
package
com
.
sfa
.
job
.
controller
.
qince
;
import
com.alibaba.fastjson.JSONArray
;
import
com.sfa.common.core.web.domain.AjaxResult
;
import
com.sfa.job.pojo.qince.request.QinceAllDealerQueryRequest
;
import
com.sfa.job.pojo.qince.request.QinceDealerQueryRequest
;
import
com.sfa.job.service.qince.IQinceDealerQueryService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* 勤策经销商查询Controller
*/
@Slf4j
@RestController
@RequestMapping
(
"/qince/dealer"
)
public
class
QinceDealerController
{
@Autowired
private
IQinceDealerQueryService
qinceDealerQueryService
;
/**
* 查询经销商(分页)
*
* @param request 查询参数
* @return 经销商数据列表
*/
@GetMapping
(
"/list"
)
public
AjaxResult
queryDealer
(
QinceDealerQueryRequest
request
)
{
try
{
JSONArray
dealers
=
qinceDealerQueryService
.
queryDealer
(
request
);
return
AjaxResult
.
success
(
"查询成功"
,
dealers
)
.
put
(
"page"
,
request
.
getPage
())
.
put
(
"rows"
,
request
.
getRows
())
.
put
(
"count"
,
dealers
!=
null
?
dealers
.
size
()
:
0
);
}
catch
(
Exception
e
)
{
log
.
error
(
"查询经销商异常:{}"
,
e
.
getMessage
(),
e
);
return
AjaxResult
.
error
(
"查询经销商异常:"
+
e
.
getMessage
());
}
}
/**
* 查询所有经销商(循环分页直到无数据)
*
* @param request 查询参数
* @return 所有经销商数据
*/
@GetMapping
(
"/list/all"
)
public
AjaxResult
queryAllDealer
(
QinceAllDealerQueryRequest
request
)
{
try
{
JSONArray
allDealers
=
qinceDealerQueryService
.
queryAllDealer
(
request
);
return
AjaxResult
.
success
(
"查询成功"
,
allDealers
)
.
put
(
"pageSize"
,
request
.
getPageSize
())
.
put
(
"totalCount"
,
allDealers
!=
null
?
allDealers
.
size
()
:
0
);
}
catch
(
Exception
e
)
{
log
.
error
(
"查询所有经销商异常:{}"
,
e
.
getMessage
(),
e
);
return
AjaxResult
.
error
(
"查询所有经销商异常:"
+
e
.
getMessage
());
}
}
}
src/main/java/com/sfa/job/domain/order/dao/WdtQimenOrderDao.java
浏览文件 @
12543d0e
package
com
.
sfa
.
job
.
domain
.
order
.
dao
;
import
com.sfa.job.domain.order.entity.FinanceOrder
;
import
com.sfa.job.domain.order.entity.WdtQimenOrder
;
import
java.util.List
;
...
...
src/main/java/com/sfa/job/domain/order/dao/WdtQimenStockoutOrderDaoImpl.java
浏览文件 @
12543d0e
...
...
@@ -15,7 +15,7 @@ import java.util.List;
@Repository
public
class
WdtQimenStockoutOrderDaoImpl
implements
WdtQimenStockoutOrderDao
{
private
static
final
int
BATCH_SIZE
=
10
0
;
// 分批大小,可根据实际情况调整
private
static
final
int
BATCH_SIZE
=
2
0
;
// 分批大小,可根据实际情况调整
@Resource
private
WdtQimenStockoutOrderMapper
stockoutOrderMapper
;
...
...
src/main/java/com/sfa/job/domain/order/entity/WdtQimenStockoutOrder.java
浏览文件 @
12543d0e
...
...
@@ -347,7 +347,7 @@ public class WdtQimenStockoutOrder implements Serializable {
if
(
matcher
.
find
())
{
return
matcher
.
group
(
1
);
}
return
""
;
return
input
;
}
/**
...
...
@@ -362,6 +362,6 @@ public class WdtQimenStockoutOrder implements Serializable {
if
(
matcher
.
find
())
{
return
matcher
.
group
(
1
);
}
return
""
;
return
input
;
}
}
src/main/java/com/sfa/job/domain/order/entity/WdtQimenStockoutOrderDetail.java
浏览文件 @
12543d0e
package
com
.
sfa
.
job
.
domain
.
order
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
...
...
@@ -201,6 +199,17 @@ public class WdtQimenStockoutOrderDetail implements Serializable {
/** 更新时间 */
private
Date
updateTime
;
// 实际成本
private
BigDecimal
actualCost
;
// 标准成本
private
BigDecimal
standardCost
;
// 实际成本*num 实际总成本
private
BigDecimal
sumActualCost
;
// 标准成本*num 标准总成本
private
BigDecimal
sumStandardCost
;
/**
* 设置分销商ID和名称
* 从fenxiaoNick中解析出fenxiaoId和fenxiaoName
...
...
src/main/java/com/sfa/job/pojo/qince/request/QinceAllDealerQueryRequest.java
0 → 100644
浏览文件 @
12543d0e
package
com
.
sfa
.
job
.
pojo
.
qince
.
request
;
import
lombok.Data
;
@Data
public
class
QinceAllDealerQueryRequest
{
private
Integer
pageSize
=
1000
;
}
src/main/java/com/sfa/job/pojo/qince/request/QinceDealerQueryRequest.java
0 → 100644
浏览文件 @
12543d0e
package
com
.
sfa
.
job
.
pojo
.
qince
.
request
;
import
lombok.Data
;
@Data
public
class
QinceDealerQueryRequest
{
private
Integer
page
=
1
;
private
Integer
rows
=
1000
;
private
String
dealer_code
;
}
src/main/java/com/sfa/job/service/order/impl/WdtQimenOrderPayTimeSyncServiceImpl.java
浏览文件 @
12543d0e
...
...
@@ -5,7 +5,6 @@ import cn.hutool.core.date.LocalDateTimeUtil;
import
cn.hutool.core.util.URLUtil
;
import
cn.hutool.http.HttpStatus
;
import
cn.hutool.json.JSONUtil
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.qimencloud.api.DefaultQimenCloudClient
;
import
com.qimencloud.api.QimenCloudClient
;
import
com.sfa.common.core.exception.ServiceException
;
...
...
src/main/java/com/sfa/job/service/order/impl/WdtQimenOrderSyncServiceImpl.java
浏览文件 @
12543d0e
...
...
@@ -232,7 +232,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
orderResult
.
addAll
(
typedOrderSubResult
);
}
pageNo
++;
}
while
(
pageNo
<=
totalPage
);
}
while
(
pageNo
<=
(
totalPage
-
1
)
);
// 基础数据 直播间分类数据+成本、规格、口味
...
...
src/main/java/com/sfa/job/service/order/impl/WdtQimenStockoutOrderSyncServiceImpl.java
浏览文件 @
12543d0e
...
...
@@ -22,6 +22,7 @@ import com.sfa.job.domain.order.entity.WdtQimenStockoutPositionDetail;
import
com.sfa.job.domain.order.entity.WdtQimenStockoutLogisticsDetail
;
import
com.sfa.job.domain.order.entity.WdtQimenStockOutPickPositionDetail
;
import
com.sfa.job.domain.order.entity.WdtQimenStockoutGovSubsidy
;
import
com.sfa.job.domain.order.entity.FinanceBaseProduct
;
import
com.sfa.job.pojo.order.request.SyncStockoutRequest
;
import
com.sfa.job.pojo.order.request.WdtStockoutSalesQueryWithDetailRequest
;
import
com.sfa.job.pojo.order.response.WdtQimenStockoutBodyDto
;
...
...
@@ -33,6 +34,7 @@ import com.sfa.job.pojo.response.SyncOrderDetailDto;
import
com.sfa.job.service.order.IWdtQimenStockoutOrderSyncService
;
import
com.sfa.job.enums.WdtPlatformMappingEnum
;
import
com.sfa.job.util.WdtQimenUtil
;
import
com.sfa.job.domain.order.dao.FinianceBaseProductDao
;
import
com.taobao.api.ApiException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ObjectUtils
;
...
...
@@ -40,9 +42,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
/**
* 销售出库单同步服务实现
...
...
@@ -76,6 +80,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
@Autowired
CollectOrderLogDao
orderLogInfoDao
;
@Autowired
FinianceBaseProductDao
baseProductDao
;
// @Transactional(rollbackFor = Exception.class)
@Override
public
SyncOrderDetailDto
syncStockoutOrder
(
SyncStockoutRequest
syncStockoutRequest
,
Integer
pageSize
)
{
...
...
@@ -195,6 +202,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
totalCount
=
wdtQimenDataDto
.
getTotalCount
();
wdtTotalPage
=
totalCount
/
wdtPageSize
+
1
;
// 基础数据 成本数据
Map
<
String
,
FinanceBaseProduct
>
baseProductMap
=
baseProductDao
.
selectBaseProduct
();
List
<
WdtQimenStockoutOrder
>
stockoutOrderSubList
=
wdtQimenDataDto
.
getOrder
();
List
<
WdtQimenStockoutOrder
>
pageOrderList
=
new
ArrayList
<>();
List
<
WdtQimenStockoutOrderDetail
>
pageDetailList
=
new
ArrayList
<>();
...
...
@@ -236,6 +246,19 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
detail
.
setFenxiaoIdAndName
();
// 设置平台名称
detail
.
setPlatformName
(
stockoutOrder
.
getPlatformName
());
// 设置成本字段
detail
.
setActualCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
detail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
detail
.
getGoodsNo
()).
getActualCost
()
:
new
BigDecimal
(
0
)
);
detail
.
setStandardCost
(
ObjectUtils
.
isNotEmpty
(
baseProductMap
.
get
(
detail
.
getGoodsNo
()))
?
baseProductMap
.
get
(
detail
.
getGoodsNo
()).
getStandardCost
()
:
new
BigDecimal
(
0
)
);
detail
.
setSumActualCost
(
detail
.
getActualCost
().
multiply
(
detail
.
getNum
()));
detail
.
setSumStandardCost
(
detail
.
getStandardCost
().
multiply
(
detail
.
getNum
()));
pageDetailList
.
add
(
detail
);
totalDetailCount
++;
...
...
src/main/java/com/sfa/job/service/qince/IQinceDealerQueryService.java
浏览文件 @
12543d0e
package
com
.
sfa
.
job
.
service
.
qince
;
import
com.alibaba.fastjson.JSONArray
;
import
com.sfa.job.pojo.qince.request.QinceAllDealerQueryRequest
;
import
com.sfa.job.pojo.qince.request.QinceDealerQueryRequest
;
/**
* @author : liqiulin
* @date : 2025-04-24 16
...
...
@@ -10,4 +14,7 @@ public interface IQinceDealerQueryService {
void
queryCusVisitRecord
();
void
updateQinceStore
();
JSONArray
queryDealer
(
QinceDealerQueryRequest
request
);
JSONArray
queryAllDealer
(
QinceAllDealerQueryRequest
request
);
}
src/main/java/com/sfa/job/service/qince/impl/QinceDealerQueryServiceImpl.java
浏览文件 @
12543d0e
...
...
@@ -2,10 +2,13 @@ package com.sfa.job.service.qince.impl;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao
;
import
com.sfa.job.domain.qince.dao.IQinceClienteleStoreDao
;
import
com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto
;
import
com.sfa.job.pojo.qince.request.QinceAllDealerQueryRequest
;
import
com.sfa.job.pojo.qince.request.QinceDealerQueryRequest
;
import
com.sfa.job.pojo.qince.response.QinceClienteleStoreDto
;
import
com.sfa.job.service.qince.IQinceDealerQueryService
;
import
com.sfa.job.util.QinCeUtils
;
...
...
@@ -146,4 +149,34 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
}
}
}
@Override
public
JSONArray
queryDealer
(
QinceDealerQueryRequest
request
)
{
log
.
info
(
"查询经销商列表,request:{}"
,
request
);
try
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"page"
,
request
.
getPage
()
!=
null
?
request
.
getPage
()
:
1
);
params
.
put
(
"rows"
,
request
.
getRows
()
!=
null
?
request
.
getRows
()
:
1000
);
params
.
put
(
"dealer_code"
,
request
.
getDealer_code
());
if
(
request
.
getDealer_code
()
!=
null
&&
!
request
.
getDealer_code
().
isEmpty
())
{
params
.
put
(
"dealer_code"
,
request
.
getDealer_code
());
}
return
qinCeUtils
.
queryDealer
(
params
);
}
catch
(
Exception
e
)
{
log
.
error
(
"查询经销商列表异常:{}"
,
e
.
getMessage
(),
e
);
throw
new
RuntimeException
(
"查询经销商列表异常:"
+
e
.
getMessage
(),
e
);
}
}
@Override
public
JSONArray
queryAllDealer
(
QinceAllDealerQueryRequest
request
)
{
log
.
info
(
"查询所有经销商,request:{}"
,
request
);
try
{
return
qinCeUtils
.
queryAllDealer
(
request
.
getPageSize
());
}
catch
(
Exception
e
)
{
log
.
error
(
"查询所有经销商异常:{}"
,
e
.
getMessage
(),
e
);
throw
new
RuntimeException
(
"查询所有经销商异常:"
+
e
.
getMessage
(),
e
);
}
}
}
src/main/java/com/sfa/job/util/QinCeUtils.java
浏览文件 @
12543d0e
...
...
@@ -62,7 +62,58 @@ public class QinCeUtils {
// 直营订单查询接口
public
static
final
String
QUERY_ORDER_DETAIL
=
"/api/dmsdatasearch/v1/getDmsPurchaseOrderInfos/"
;
// 查询经销商
public
static
final
String
QUERY_DEALER
=
"/api/dealer/v1/queryDealer/"
;
/**
* 调用勤策查询经销商接口
* @param params 查询参数Map
* @return 经销商数据JSON数组
* @throws Exception 接口调用异常
*/
public
JSONArray
queryDealer
(
Map
<
String
,
Object
>
params
)
throws
Exception
{
String
url
=
builderUrl
(
QUERY_DEALER
,
params
);
log
.
info
(
"调用勤策查询经销商接口,URL:{},参数:{}"
,
url
,
params
);
return
postArray
(
url
,
params
);
}
/**
* 分页查询所有经销商(循环拉取直到无数据)
* @param pageSize 每页记录数(默认1000)
* @return 所有经销商数据
* @throws Exception 接口调用异常
*/
public
JSONArray
queryAllDealer
(
Integer
pageSize
)
throws
Exception
{
JSONArray
allDealers
=
new
JSONArray
();
int
currentPage
=
1
;
int
pageSizeValue
=
pageSize
!=
null
?
pageSize
:
1000
;
while
(
true
)
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"page"
,
currentPage
);
params
.
put
(
"rows"
,
pageSizeValue
);
String
url
=
builderUrl
(
QUERY_DEALER
,
params
);
log
.
info
(
"查询经销商 - 第{}页,请求URL:{}"
,
currentPage
,
url
);
try
{
JSONObject
resp
=
postQC
(
url
,
params
);
JSONArray
pageData
=
resp
.
getJSONArray
(
"response_data"
);
if
(
pageData
==
null
||
pageData
.
isEmpty
())
{
log
.
info
(
"经销商查询完成,共拉取{}页,总记录数:{}"
,
currentPage
-
1
,
allDealers
.
size
());
break
;
}
allDealers
.
addAll
(
pageData
);
currentPage
++;
}
catch
(
Exception
e
)
{
log
.
error
(
"查询经销商第{}页失败"
,
currentPage
,
e
);
throw
new
RuntimeException
(
"分页拉取经销商数据失败,页码:"
+
currentPage
,
e
);
}
}
return
allDealers
;
}
public
String
builderUrl
(
String
sidepath
,
Map
<
String
,
Object
>
params
)
{
String
msgId
=
UUID
.
randomUUID
().
toString
();
...
...
src/main/resources/mapper/order/WdtQimenStockoutOrderDetailMapper.xml
浏览文件 @
12543d0e
...
...
@@ -78,6 +78,13 @@
scan_score,
api_goods_name,
batch_remark,
fenxiao_nick,
fenxiao_id,
fenxiao_name,
actual_cost,
standard_cost,
sum_actual_cost,
sum_standard_cost,
create_by,
create_user_id,
update_by,
...
...
@@ -161,6 +168,13 @@
#{item.scanScore},
#{item.apiGoodsName},
#{item.batchRemark},
#{item.fenxiaoNick},
#{item.fenxiaoId},
#{item.fenxiaoName},
#{item.actualCost},
#{item.standardCost},
#{item.sumActualCost},
#{item.sumStandardCost},
#{item.createBy},
#{item.createUserId},
#{item.updateBy},
...
...
@@ -242,6 +256,13 @@
scan_score = VALUES(scan_score),
api_goods_name = VALUES(api_goods_name),
batch_remark = VALUES(batch_remark),
fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
actual_cost = VALUES(actual_cost),
standard_cost = VALUES(standard_cost),
sum_actual_cost = VALUES(sum_actual_cost),
sum_standard_cost = VALUES(sum_standard_cost),
update_by = VALUES(update_by),
update_user_id = VALUES(update_user_id),
update_time = VALUES(update_time)
...
...
src/main/resources/mapper/order/WdtQimenStockoutOrderMapper.xml
浏览文件 @
12543d0e
...
...
@@ -88,6 +88,8 @@
goods_total_amount,
modified,
fenxiao_nick,
fenxiao_id,
fenxiao_name,
trade_label,
trade_from,
picklist_no,
...
...
@@ -230,6 +232,8 @@
#{goodsTotalAmount},
#{modified},
#{fenxiaoNick},
#{fenxiaoId},
#{fenxiaoName},
#{tradeLabel},
#{tradeFrom},
#{picklistNo},
...
...
@@ -371,6 +375,8 @@
goods_total_amount = VALUES(goods_total_amount),
modified = VALUES(modified),
fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
trade_label = VALUES(trade_label),
trade_from = VALUES(trade_from),
picklist_no = VALUES(picklist_no),
...
...
@@ -513,6 +519,8 @@
goods_total_amount,
modified,
fenxiao_nick,
fenxiao_id,
fenxiao_name,
trade_label,
trade_from,
picklist_no,
...
...
@@ -657,6 +665,8 @@
#{item.goodsTotalAmount},
#{item.modified},
#{item.fenxiaoNick},
#{item.fenxiaoId},
#{item.fenxiaoName},
#{item.tradeLabel},
#{item.tradeFrom},
#{item.picklistNo},
...
...
@@ -799,6 +809,8 @@
goods_total_amount = VALUES(goods_total_amount),
modified = VALUES(modified),
fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
trade_label = VALUES(trade_label),
trade_from = VALUES(trade_from),
picklist_no = VALUES(picklist_no),
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论