Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
R
run-score
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
jackma
run-score
Commits
f3e415a8
提交
f3e415a8
authored
11月 13, 2021
作者:
jacksmith1988
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
//add code
上级
1ac3bc13
显示空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
143 行增加
和
18 行删除
+143
-18
merchant.js
runscore-admin/src/main/resources/static/js/merchant.js
+4
-1
merchant.html
runscore-admin/src/main/resources/templates/merchant.html
+25
-4
platform-order.html
...re-admin/src/main/resources/templates/platform-order.html
+4
-0
BizError.java
...ain/java/me/zohar/runscore/common/exception/BizError.java
+3
-0
GatheringCodeRepo.java
.../zohar/runscore/gatheringcode/repo/GatheringCodeRepo.java
+3
-0
GatheringCodeVO.java
...a/me/zohar/runscore/gatheringcode/vo/GatheringCodeVO.java
+13
-0
MerchantOrder.java
...java/me/zohar/runscore/merchant/domain/MerchantOrder.java
+17
-1
AddOrUpdateMerchantParam.java
...har/runscore/merchant/param/AddOrUpdateMerchantParam.java
+5
-0
MerchantOrderService.java
...zohar/runscore/merchant/service/MerchantOrderService.java
+41
-10
MerchantOrderDetailsVO.java
...me/zohar/runscore/merchant/vo/MerchantOrderDetailsVO.java
+2
-0
MerchantOrderVO.java
...n/java/me/zohar/runscore/merchant/vo/MerchantOrderVO.java
+2
-0
MerchantVO.java
...c/main/java/me/zohar/runscore/merchant/vo/MerchantVO.java
+5
-0
AccountChangeLogQueryCondParam.java
...ore/useraccount/param/AccountChangeLogQueryCondParam.java
+6
-0
UserAccountService.java
...ohar/runscore/useraccount/service/UserAccountService.java
+8
-0
platform-order.html
...merchant/src/main/resources/templates/platform-order.html
+3
-0
footer.html
...re-mobile/src/main/resources/templates/common/footer.html
+1
-1
gathering-code.html
...e-mobile/src/main/resources/templates/gathering-code.html
+1
-1
没有找到文件。
runscore-admin/src/main/resources/static/js/merchant.js
浏览文件 @
f3e415a8
...
...
@@ -84,7 +84,10 @@ var platformVM = new Vue({
merchantNum
:
''
,
name
:
''
,
secretKey
:
''
,
relevanceAccountUserName
:
''
relevanceAccountUserName
:
''
,
alipayRate
:
'0'
,
alipayRate
:
'0'
,
alipayRate
:
'0'
}
},
...
...
runscore-admin/src/main/resources/templates/merchant.html
浏览文件 @
f3e415a8
...
...
@@ -47,23 +47,44 @@
<div
class=
"modal-body"
>
<form>
<div
class=
"form-group row"
>
<div
class=
"col-sm-12"
>
<div
class=
"col-sm-12
form-inline
"
>
<label>
商户号:
</label>
<input
type=
"text"
class=
"form-control"
v-model=
"editPlatform.merchantNum"
>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"col-sm-12"
>
<div
class=
"col-sm-12
form-inline
"
>
<label>
商户名称:
</label>
<input
type=
"text"
class=
"form-control"
v-model=
"editPlatform.name"
>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"col-sm-12"
>
<div
class=
"col-sm-12
form-inline
"
>
<label>
接入密钥:
</label>
<textarea
class=
"form-control"
rows=
""
cols=
""
v-model=
"editPlatform.secretKey"
></textarea>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"col-sm-12 form-inline"
>
<label>
支付宝扫码费率(如果配置0.05 以100为例,收取5元费用):
</label>
<input
class=
"form-control"
rows=
""
cols=
""
v-model=
"editPlatform.alipayRate"
></input>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"col-sm-12 form-inline"
>
<label>
微信扫码费率(如果配置0.05 以100为例,收取5元费用):
</label>
<input
class=
"form-control"
rows=
""
cols=
""
v-model=
"editPlatform.wechatRate"
></input>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"col-sm-12 form-inline"
>
<label>
银行卡费率(如果配置0.05 以100为例,收取5元费用):
</label>
<input
class=
"form-control"
rows=
""
cols=
""
v-model=
"editPlatform.bankcardRate"
></input>
</div>
</div>
<div
class=
"form-group row"
>
<div
class=
"col-sm-12"
>
<div
class=
"col-sm-12
form-inline
"
>
<label>
关联账号:
</label>
<input
type=
"text"
class=
"form-control"
v-model=
"editPlatform.relevanceAccountUserName"
>
</div>
</div>
...
...
runscore-admin/src/main/resources/templates/platform-order.html
浏览文件 @
f3e415a8
...
...
@@ -60,6 +60,10 @@
<
div
class
=
"col-sm-5 table-detail-item-label"
>
通知时间
:
<
/div
>
<
div
class
=
"col-sm-7 table-detail-item-value"
>
{{
platformOrderInfo
.
payInfo
.
noticeTime
}}
<
/div
>
<
/div
>
<
div
class
=
"row"
>
<
div
class
=
"col-sm-5 table-detail-item-label"
>
卡信息
:
<
/div
>
<
div
class
=
"col-sm-7 table-detail-item-value"
>
{{
platformOrderInfo
.
remark
}}
<
/div
>
<
/div
>
<
/div
>
</script>
<style
type=
"text/css"
>
...
...
runscore-api/src/main/java/me/zohar/runscore/common/exception/BizError.java
浏览文件 @
f3e415a8
...
...
@@ -41,6 +41,8 @@ public enum BizError {
银行卡未绑定无法进行提现
(
"1014"
,
"银行卡未绑定无法进行提现"
),
无可用资源进行匹配
(
"1014"
,
"无可用资源进行匹配"
),
只有状态为发起提现的记录才能审核通过
(
"1014"
,
"只有状态为发起提现的记录才能审核通过"
),
只有状态为发起提现或审核通过的记录才能进行审核不通过操作
(
"1014"
,
"只有状态为发起提现或审核通过的记录才能进行审核不通过操作"
),
...
...
@@ -66,6 +68,7 @@ public enum BizError {
系统无可用商户
(
"1015"
,
"系统无可用商户"
),
商户订单不存在
(
"1015"
,
"商户订单不存在"
),
通道费率异常
(
"1015"
,
"通道费率异常"
),
不支持该支付类型
(
"1015"
,
"不支持该支付类型"
),
...
...
runscore-api/src/main/java/me/zohar/runscore/gatheringcode/repo/GatheringCodeRepo.java
浏览文件 @
f3e415a8
...
...
@@ -13,6 +13,9 @@ public interface GatheringCodeRepo
GatheringCode
findTopByUserAccountIdAndGatheringChannelCodeAndGatheringAmount
(
String
userAccountId
,
String
gatheringChannelCode
,
Double
gatheringAmount
);
List
<
GatheringCode
>
findAllByUserAccountIdAndGatheringChannelCodeAndGatheringAmountGreaterThanEqualAndStateEquals
(
String
userAccountId
,
String
gatheringChannelCode
,
Double
gatheringAmount
,
String
normalState
);
List
<
GatheringCode
>
findByUserAccountId
(
String
userAccountId
);
GatheringCode
findTopByUserAccountIdAndGatheringChannelCodeAndFixedGatheringAmountIsFalse
(
String
userAccountId
,
...
...
runscore-api/src/main/java/me/zohar/runscore/gatheringcode/vo/GatheringCodeVO.java
浏览文件 @
f3e415a8
...
...
@@ -44,6 +44,19 @@ public class GatheringCodeVO implements Serializable {
private
Boolean
fixedGatheringAmount
;
/**
* 开户行
*/
private
String
bankAddress
;
/**
* 卡号
*/
private
String
bankCode
;
/**
* 卡户主
*/
private
String
bankUsername
;
/**
* 收款金额
*/
...
...
runscore-api/src/main/java/me/zohar/runscore/merchant/domain/MerchantOrder.java
浏览文件 @
f3e415a8
...
...
@@ -22,6 +22,7 @@ import org.hibernate.annotations.NotFoundAction;
import
lombok.Getter
;
import
lombok.Setter
;
import
me.zohar.runscore.constants.Constant
;
import
me.zohar.runscore.gatheringcode.domain.GatheringCode
;
import
me.zohar.runscore.useraccount.domain.UserAccount
;
@Getter
...
...
@@ -140,6 +141,15 @@ public class MerchantOrder {
private
MerchantOrderPayInfo
payInfo
;
@NotFound
(
action
=
NotFoundAction
.
IGNORE
)
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JoinColumn
(
name
=
"gathering_id"
,
updatable
=
false
,
insertable
=
false
,
foreignKey
=
@ForeignKey
(
value
=
ConstraintMode
.
NO_CONSTRAINT
))
private
GatheringCode
gatheringCode
;
// private String gatheringId;
private
String
remark
;
public
void
updateSettleAmount
(
Double
settleAmount
)
{
this
.
setSettleAmount
(
settleAmount
);
}
...
...
@@ -160,11 +170,17 @@ public class MerchantOrder {
this
.
setNote
(
note
);
}
public
void
updateReceived
(
String
receivedAccountId
,
String
gatheringCodeStorageId
)
{
//记录匹配的收款卡
public
void
updateRemark
(
String
remark
)
{
setRemark
(
remark
);
}
public
void
updateReceived
(
String
receivedAccountId
,
String
gatheringCodeStorageId
,
String
gatheringId
)
{
this
.
setReceivedAccountId
(
receivedAccountId
);
this
.
setGatheringCodeStorageId
(
gatheringCodeStorageId
);
this
.
setOrderState
(
Constant
.
商户订单状态
_
已接单
);
this
.
setReceivedTime
(
new
Date
());
}
public
void
customerCancelOrderRefund
()
{
...
...
runscore-api/src/main/java/me/zohar/runscore/merchant/param/AddOrUpdateMerchantParam.java
浏览文件 @
f3e415a8
package
me
.
zohar
.
runscore
.
merchant
.
param
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
javax.validation.constraints.NotBlank
;
...
...
@@ -27,6 +28,10 @@ public class AddOrUpdateMerchantParam {
@NotBlank
private
String
relevanceAccountUserName
;
private
BigDecimal
alipayRate
;
private
BigDecimal
wechatRate
;
private
BigDecimal
bankcardRate
;
public
Merchant
convertToPo
()
{
Merchant
po
=
new
Merchant
();
BeanUtils
.
copyProperties
(
this
,
po
);
...
...
runscore-api/src/main/java/me/zohar/runscore/merchant/service/MerchantOrderService.java
浏览文件 @
f3e415a8
...
...
@@ -163,10 +163,20 @@ public class MerchantOrderService {
log
.
error
(
"商户订单不存在;orderNo:{}"
,
orderNo
);
throw
new
BizException
(
BizError
.
商户订单不存在
);
}
GatheringCode
gatheringCode
=
getGatheringCode
(
order
.
getReceivedAccountId
(),
order
.
getGatheringChannelCode
(),
order
.
getGatheringAmount
());
GatheringCode
gatheringCode
=
null
;
String
storageId
=
""
;
if
(
order
.
getGatheringChannelCode
().
equals
(
Constant
.
支付渠道
_
银行卡
))
{
gatheringCode
=
order
.
getGatheringCode
();
}
else
{
storageId
=
order
.
getGatheringCodeStorageId
();
}
/*GatheringCode gatheringCode = getGatheringCode(order.getReceivedAccountId(),
order.getGatheringChannelCode(), order.getGatheringAmount());*/
OrderGatheringCodeVO
vo
=
OrderGatheringCodeVO
.
convertFor
(
order
);
vo
.
setGatheringCodeStorageId
(
gatheringCode
.
getStorageId
()
);
vo
.
setGatheringCodeStorageId
(
storageId
);
vo
.
setGatheringCode
(
gatheringCode
);
return
vo
;
...
...
@@ -195,6 +205,24 @@ public class MerchantOrderService {
}
@Transactional
(
readOnly
=
true
)
public
GatheringCode
matchGatheringCode
(
String
receivedAccountId
,
String
gatheringChannelCode
,
Double
gatheringAmount
)
{
ReceiveOrderSetting
merchantOrderSetting
=
platformOrderSettingRepo
.
findTopByOrderByLatelyUpdateTime
();
List
<
GatheringCode
>
gatheringCodes
=
gatheringCodeRepo
.
findAllByUserAccountIdAndGatheringChannelCodeAndGatheringAmountGreaterThanEqualAndStateEquals
(
receivedAccountId
,
gatheringChannelCode
,
gatheringAmount
,
Constant
.
账号状态
_
启用
);
if
(
CollectionUtils
.
isEmpty
(
gatheringCodes
))
{
throw
new
BizException
(
BizError
.
无可用资源进行匹配
);
}
Collections
.
shuffle
(
gatheringCodes
);
return
gatheringCodes
.
get
(
0
);
}
/*@Transactional(readOnly = true)
public GatheringCode getGatheringCode(String receivedAccountId, String gatheringChannelCode,
Double gatheringAmount) {
ReceiveOrderSetting merchantOrderSetting = platformOrderSettingRepo.findTopByOrderByLatelyUpdateTime();
...
...
@@ -214,7 +242,7 @@ public class MerchantOrderService {
}
}
return new GatheringCode();
}
}
*/
@Transactional
public
void
userConfirmToPaid
(
@NotBlank
String
userAccountId
,
@NotBlank
String
orderId
)
{
...
...
@@ -276,7 +304,9 @@ public class MerchantOrderService {
}
if
(
rate
.
intValue
()
<
0
||
rate
.
intValue
()
>
1
)
{
throw
new
BizException
(
BizError
.
通道费率异常
);
}
double
rateFee
=
NumberUtil
.
round
(
merchantOrder
.
getGatheringAmount
()
*
rate
.
doubleValue
(),
4
)
.
doubleValue
();
...
...
@@ -289,7 +319,7 @@ public class MerchantOrderService {
double
cashDeposit
=
merchantAccount
.
getCashDeposit
()
+
merchantSettleAmount
;
merchantAccount
.
setCashDeposit
(
NumberUtil
.
round
(
cashDeposit
,
4
).
doubleValue
());
userAccountRepo
.
save
(
merchantAccount
);
accountChangeLogRepo
.
save
(
AccountChangeLog
.
buildWithMerchantSettle
(
user
Account
,
merchantOrder
));
accountChangeLogRepo
.
save
(
AccountChangeLog
.
buildWithMerchantSettle
(
merchant
Account
,
merchantOrder
));
}
...
...
@@ -483,12 +513,12 @@ public class MerchantOrderService {
if
(!
Constant
.
商户订单状态
_
等待接单
.
equals
(
platformOrder
.
getOrderState
()))
{
throw
new
BizException
(
BizError
.
订单已被接或已取消
);
}
String
gatheringCodeStorageId
=
getGatheringCodeStorageId
(
userAccountId
,
GatheringCode
gatheringCode
=
matchGatheringCode
(
userAccountId
,
platformOrder
.
getGatheringChannelCode
(),
platformOrder
.
getGatheringAmount
());
//支付宝和微信才有收款码
if
(
StrUtil
.
isBlank
(
gatheringCodeStorageId
)
&&
!
platformOrder
.
getGatheringChannelCode
().
equals
(
Constant
.
支付渠道
_
银行卡
))
{
/*
if (StrUtil.isBlank(gatheringCodeStorageId) && !platformOrder.getGatheringChannelCode().equals(Constant.支付渠道_银行卡)) {
throw new BizException(BizError.无法接单找不到对应金额的收款码);
}
}
*/
// 校验用户是否达到接单上限,若达到上限,则不能接单
ReceiveOrderSetting
setting
=
platformOrderSettingRepo
.
findTopByOrderByLatelyUpdateTime
();
if
(
setting
!=
null
&&
setting
.
getReceiveOrderUpperLimit
()
!=
null
)
{
...
...
@@ -516,7 +546,8 @@ public class MerchantOrderService {
if
(
setting
!=
null
&&
setting
.
getOrderPayEffectiveDuration
()
!=
null
)
{
orderEffectiveDuration
=
setting
.
getOrderPayEffectiveDuration
();
}
platformOrder
.
updateReceived
(
userAccount
.
getId
(),
gatheringCodeStorageId
);
platformOrder
.
updateReceived
(
userAccount
.
getId
(),
gatheringCode
.
getStorageId
(),
gatheringCode
.
getId
());
platformOrder
.
updateRemark
(
gatheringCode
.
getBankCode
()
+
"_"
+
gatheringCode
.
getBankUsername
()
+
"_"
+
gatheringCode
.
getBankAddress
());
platformOrder
.
updateUsefulTime
(
DateUtil
.
offset
(
platformOrder
.
getReceivedTime
(),
DateField
.
MINUTE
,
orderEffectiveDuration
));
merchantOrderRepo
.
save
(
platformOrder
);
...
...
runscore-api/src/main/java/me/zohar/runscore/merchant/vo/MerchantOrderDetailsVO.java
浏览文件 @
f3e415a8
...
...
@@ -105,6 +105,8 @@ public class MerchantOrderDetailsVO {
*/
private
Double
bounty
;
private
String
remark
;
public
static
MerchantOrderDetailsVO
convertFor
(
MerchantOrder
merchantOrder
)
{
if
(
merchantOrder
==
null
)
{
return
null
;
...
...
runscore-api/src/main/java/me/zohar/runscore/merchant/vo/MerchantOrderVO.java
浏览文件 @
f3e415a8
...
...
@@ -112,6 +112,8 @@ public class MerchantOrderVO {
private
MerchantOrderPayInfoVO
payInfo
;
private
String
remark
;
public
static
List
<
MerchantOrderVO
>
convertFor
(
List
<
MerchantOrder
>
platformOrders
)
{
if
(
CollectionUtil
.
isEmpty
(
platformOrders
))
{
return
new
ArrayList
<>();
...
...
runscore-api/src/main/java/me/zohar/runscore/merchant/vo/MerchantVO.java
浏览文件 @
f3e415a8
package
me
.
zohar
.
runscore
.
merchant
.
vo
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
...
...
@@ -32,6 +33,10 @@ public class MerchantVO {
*/
private
String
secretKey
;
private
BigDecimal
alipayRate
;
private
BigDecimal
wechatRate
;
private
BigDecimal
bankcardRate
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
createTime
;
...
...
runscore-api/src/main/java/me/zohar/runscore/useraccount/param/AccountChangeLogQueryCondParam.java
浏览文件 @
f3e415a8
...
...
@@ -34,4 +34,10 @@ public class AccountChangeLogQueryCondParam extends PageParam {
*/
private
String
userAccountId
;
/**
* 用户账号
*/
private
String
userName
;
}
runscore-api/src/main/java/me/zohar/runscore/useraccount/service/UserAccountService.java
浏览文件 @
f3e415a8
...
...
@@ -6,6 +6,7 @@ import java.util.List;
import
javax.persistence.criteria.CriteriaBuilder
;
import
javax.persistence.criteria.CriteriaQuery
;
import
javax.persistence.criteria.Join
;
import
javax.persistence.criteria.JoinType
;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
...
...
@@ -290,6 +291,13 @@ public class UserAccountService {
if
(
StrUtil
.
isNotEmpty
(
param
.
getUserAccountId
()))
{
predicates
.
add
(
builder
.
equal
(
root
.
get
(
"userAccountId"
),
param
.
getUserAccountId
()));
}
if
(
StrUtil
.
isNotEmpty
(
param
.
getUserName
()))
{
Join
<
UserAccount
,
AccountChangeLog
>
join
=
root
.
join
(
"userAccount"
,
JoinType
.
LEFT
);
predicates
.
add
(
builder
.
equal
(
join
.
get
(
"userName"
),
param
.
getUserName
()));
//predicates.add(builder.equal(root.get("userName"), param.getUserName()));
}
return
predicates
.
size
()
>
0
?
builder
.
and
(
predicates
.
toArray
(
new
Predicate
[
predicates
.
size
()]))
:
null
;
}
};
...
...
runscore-merchant/src/main/resources/templates/platform-order.html
浏览文件 @
f3e415a8
...
...
@@ -62,6 +62,8 @@
<
div
class
=
"col-sm-5 table-detail-item-label"
>
通知时间
:
<
/div
>
<
div
class
=
"col-sm-7 table-detail-item-value"
>
{{
platformOrderInfo
.
payInfo
.
noticeTime
}}
<
/div
>
<
/div
>
<
/div
>
</script>
<style
type=
"text/css"
>
...
...
@@ -269,6 +271,7 @@
<div
class=
"col-sm-4 details-item"
v-show=
"selectedOrderDetails.note != null"
>
<label>
备注:
</label><span>
{{selectedOrderDetails.note}}
</span>
</div>
</div>
<div
class=
"gathering-code-pic"
>
<div
style=
"color: red; font-weight: bold; font-size: 22px;"
v-if=
"selectedOrderDetails.orderState == '1'"
>
等待接单中...
</div>
...
...
runscore-mobile/src/main/resources/templates/common/footer.html
浏览文件 @
f3e415a8
...
...
@@ -33,7 +33,7 @@
<div
id=
"footer"
v-cloak
>
<nav
class=
"navbar fixed-bottom bg-light footer-navbar"
v-show=
"showFooterFlag"
>
<a
class=
"navbar-brand footer-navbar-brand"
v-on:click=
"goTo('/')"
v-bind:class=
"{'selected-footer-navbar-brand': currentPathName == '/'}"
><i
class=
"fa fa-home"
aria-hidden=
"true"
></i>
<span>
首页
</span>
</a>
<a
class=
"navbar-brand footer-navbar-brand"
v-on:click=
"goTo('/receive-order')"
v-bind:class=
"{'selected-footer-navbar-brand': currentPathName == '/receive-order'}"
><i
class=
"fa fa-shopping-cart"
aria-hidden=
"true"
></i><span>
接单
</span></a>
<!-- <a class="navbar-brand footer-navbar-brand" v-on:click="goTo('/receive-order')" v-bind:class="{'selected-footer-navbar-brand': currentPathName == '/receive-order'}"><i class="fa fa-shopping-cart" aria-hidden="true"></i><span>接单</span></a> -->
<a
class=
"navbar-brand footer-navbar-brand"
v-on:click=
"goTo('/audit-order')"
v-bind:class=
"{'selected-footer-navbar-brand': currentPathName == '/audit-order'}"
><i
class=
"fa fa-hourglass"
aria-hidden=
"true"
></i><span>
审核
</span></a>
<a
class=
"navbar-brand footer-navbar-brand"
v-on:click=
"goTo('/my-home-page')"
v-bind:class=
"{'selected-footer-navbar-brand': currentPathName == '/my-home-page'}"
><i
class=
"fa fa-user"
aria-hidden=
"true"
></i><span>
我的
</span></a>
</nav>
...
...
runscore-mobile/src/main/resources/templates/gathering-code.html
浏览文件 @
f3e415a8
...
...
@@ -156,7 +156,7 @@
v-show=
"editGatheringCode.gatheringChannelCode == 'bankcard'"
style=
""
>
<label>
银行卡号:
</label>
<input
type=
"text"
class=
"form-control"
v-model=
"editGatheringCode.bankCode"
>
<label>
开户行
:
</label>
<label>
银行名称(例如:工商银行)
:
</label>
<input
type=
"text"
class=
"form-control"
v-model=
"editGatheringCode.bankAddress"
>
<label>
卡户主:
</label>
<input
type=
"text"
class=
"form-control"
v-model=
"editGatheringCode.bankUsername"
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论