记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
ffa8849e
Commit
ffa8849e
authored
Sep 09, 2021
by
张国柄
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+会员退款;
parent
8214bcc6
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
406 additions
and
146 deletions
+406
-146
detail.html
...urces/templates/zhengzai/adam/order/orderList/detail.html
+208
-129
order.html
...ources/templates/zhengzai/adam/order/orderList/order.html
+15
-10
AdamMemberOrderAdminServiceImpl.java
...ai/adam/service/impl/AdamMemberOrderAdminServiceImpl.java
+7
-4
AdamMemberRefund.java
...a/com/liquidnet/service/adam/entity/AdamMemberRefund.java
+2
-2
db_ln_adam_initialdata.sql
...quidnet-service-adam-impl/docu/db_ln_adam_initialdata.sql
+1
-1
PlatformAdamMemberOrderCallbackController.java
...oller/adam/PlatformAdamMemberOrderCallbackController.java
+51
-0
PlatformMemberRefundService.java
...atform/service/impl/adam/PlatformMemberRefundService.java
+122
-0
No files found.
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/adam/order/orderList/detail.html
View file @
ffa8849e
...
...
@@ -2,150 +2,229 @@
<html
lang=
"zh"
xmlns:th=
"http://www.thymeleaf.org"
>
<head>
<th:block
th:include=
"include :: header('会员订单详情')"
/>
<
th:block
th:include=
"include :: datetimepicker-css"
/
>
<
style
type=
"text/css"
>
.user-info-head
{
position
:
relative
;
display
:
inline-block
;}
.user-info-head
:hover:after
{
content
:
'\f030'
;
position
:
absolute
;
left
:
0
;
right
:
0
;
top
:
0
;
bottom
:
0
;
color
:
#eee
;
background
:
rgba
(
0
,
0
,
0
,
0.5
);
font-family
:
FontAwesome
;
font-size
:
24px
;
font-style
:
normal
;
-webkit-font-smoothing
:
antialiased
;
-moz-osx-font-smoothing
:
grayscale
;
cursor
:
pointer
;
line-height
:
110px
;
border-radius
:
50%
;}
</style
>
</head>
<body
class=
"white-bg"
>
<div
class=
"wrapper wrapper-content animated fadeInRight ibox-content"
>
<form
class=
"form-horizontal m"
id=
"form-order-edit"
th:object=
"${orderDetailsVo}"
>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
订单状态:
</label>
<div
class=
"col-sm-8"
th:text=
"*{@dict.getLabel('zhengzai_member_order_status',adamMemberOrderVo.state)}"
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
价格:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"pricePaid"
th:field=
"*{adamMemberOrderVo.price}"
class=
"form-control"
type=
"text"
readonly
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
可用时间(天):
</label>
<div
class=
"col-sm-8"
>
<input
name=
"days"
th:field=
"*{adamMemberOrderVo.days}"
class=
"form-control"
type=
"text"
readonly
>
<body
class=
"gray-bg"
style=
"font: 14px Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif !important;"
>
<section
class=
"section-content"
>
<div
class=
"row"
>
<div
class=
"col-sm-4 pr5"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title ibox-title-gray dashboard-header gray-bg"
>
<h5>
会员信息([[${orderDetailsVo.adamMemberOrderVo.memberName}]])
</h5>
</div>
<div
class=
"ibox-content"
>
<div
class=
"text-center"
>
<p
class=
"user-info-head"
><img
class=
"img-circle img-sm"
th:src=
"${orderDetailsVo.adamUserInfoVo.avatar}"
></p>
</div>
<ul
class=
"list-group list-group-striped"
>
<li
class=
"list-group-item"
><i
class=
"fa fa-user"
></i>
<b
class=
"font-noraml"
>
昵称:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamUserInfoVo.nickname}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-id-card"
></i>
<b
class=
"font-noraml"
>
用户ID:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamUser.uid}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-diamond"
></i>
<b
class=
"font-noraml"
>
会员ID:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamUserMemberVo.memberNo}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-birthday-cake"
></i>
<b
class=
"font-noraml"
>
会员生日:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamUserInfoVo.birthday}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-paw"
></i>
<b
class=
"font-noraml"
>
地区:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamUserInfoVo.area}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-phone"
></i>
<b
class=
"font-noraml"
>
手机号码:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamUser.mobile}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-plane"
></i>
<b
class=
"font-noraml"
>
会员地址:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamMemberOrderExtVo.expressReceiver}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-crosshairs"
></i>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamMemberOrderExtVo.expressAddress}]]
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-heart"
></i>
<b
class=
"font-noraml"
>
会员状态:
</b>
<p
class=
"pull-right"
>
<span
class=
'badge badge-primary'
th:if=
"${orderDetailsVo.adamUserMemberVo.state == 1}"
>
正常 / [[${#temporals.format(orderDetailsVo.adamUserMemberVo.expiryAt, 'dd-MM-yyyy')}]]
</span>
<span
class=
'badge badge-danger'
th:if=
"${orderDetailsVo.adamUserMemberVo.state != 1}"
>
到期 / [[${#temporals.format(orderDetailsVo.adamUserMemberVo.expiryAt, 'dd-MM-yyyy')}]]
</span>
</p>
</li>
<li
class=
"list-group-item"
><i
class=
"fa fa-calendar-check-o"
></i>
<b
class=
"font-noraml"
>
创建时间:
</b>
<p
class=
"pull-right"
>
[[${#temporals.format(orderDetailsVo.adamUserMemberVo.createdAt, 'yyyy-MM-dd HH:mm')}]]
</p>
</li>
</ul>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
订单号:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"orderNo"
th:field=
"*{adamMemberOrderVo.orderNo}"
class=
"form-control"
type=
"text"
readonly
>
</div>
<div
class=
"col-sm-8 about"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title ibox-title-gray dashboard-header"
>
<h5>
订单信息
</h5>
</div>
<div
class=
"ibox-content"
>
<ul
class=
"list-group list-group-striped"
>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
订单编号:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamMemberOrderVo.orderNo}]]
</p>
</li>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
支付编号:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamMemberOrderVo.payNo}]]
</p>
</li>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
创建时间:
</b>
<p
class=
"pull-right"
>
[[${#temporals.format(orderDetailsVo.adamMemberOrderVo.createdAt, 'yyyy-MM-dd HH:mm:ss')}]]
</p>
</li>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
支付时间:
</b>
<p
class=
"pull-right"
>
[[${#temporals.format(orderDetailsVo.adamMemberOrderVo.paymentAt, 'yyyy-MM-dd HH:mm:ss')}]]
</p>
</li>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
支付方式:
</b>
<p
class=
"pull-right"
>
[[${#strings.toUpperCase(orderDetailsVo.adamMemberOrderVo.deviceFrom)}]][[${#strings.toUpperCase(orderDetailsVo.adamMemberOrderVo.payType)}]]
</p>
</li>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
支付价格:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamMemberOrderVo.pricePaid}]]
</p>
</li>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
订单状态:
</b>
<p
class=
"pull-right"
>
<span
class=
'badge badge-white'
th:if=
"${orderDetailsVo.adamMemberOrderVo.state == 0}"
>
未支付
</span>
<span
class=
'badge badge-success'
th:if=
"${orderDetailsVo.adamMemberOrderVo.state == 1}"
>
已支付
</span>
<span
class=
'badge badge-disable'
th:if=
"${orderDetailsVo.adamMemberOrderVo.state == 2}"
>
已关闭
</span>
<span
class=
'badge badge-danger'
th:if=
"${orderDetailsVo.adamMemberOrderVo.state == 4}"
>
退款中
</span>
<span
class=
'badge badge-inverse'
th:if=
"${orderDetailsVo.adamMemberOrderVo.state == 5}"
>
已退款
</span>
</p>
</li>
<li
class=
"list-group-item"
>
<b
class=
"font-noraml"
>
来源信息:
</b>
<p
class=
"pull-right"
>
[[${orderDetailsVo.adamMemberOrderVo.source}]] / [[${orderDetailsVo.adamMemberOrderVo.clientIp}]] / [[${orderDetailsVo.adamMemberOrderVo.version}]]
</p>
</li>
</ul>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
生成时间:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"createdAt"
th:field=
"*{adamMemberOrderVo.createdAt}"
class=
"form-control"
type=
"text"
readonly
>
</div>
<div
class=
"text-center"
style=
"margin-top: -15px;margin-bottom: 10px;"
>
<a
data-toggle=
"modal"
class=
"btn btn-danger"
href=
"#"
onclick=
"closeItem()"
>
关
闭
</a>
<a
data-toggle=
"modal"
class=
"btn btn-primary"
href=
"#member-refund-form"
>
申请退款
</a>
</div>
<div
id=
"member-refund-form"
class=
"modal fade"
aria-hidden=
"true"
>
<div
class=
"modal-dialog"
style=
"width:33%;"
>
<div
class=
"modal-content"
>
<div
class=
"modal-body"
>
<div
class=
"row"
>
<div>
<h3
class=
"m-t-none m-b text-center"
>
会员退款
</h3>
<form
role=
"form"
id=
"form-member-order-refund"
>
<input
name=
"orderNo"
id=
"id"
type=
"hidden"
th:value=
"${orderDetailsVo.adamMemberOrderVo.orderNo}"
readonly
>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
购买人手机号:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"memberName"
th:field=
"*{adamUser.mobile}"
class=
"form-control"
type=
"text"
readonly
>
</div>
<label
class=
"pull-left"
><i
class=
"fa fa-cny"
></i>
支付金额:
</label>
<!-- <span>[[${orderDetailsVo.adamMemberOrderVo.pricePaid}]]元</span>-->
<input
type=
"number"
name=
"pricePaid"
th:value=
"${orderDetailsVo.adamMemberOrderVo.pricePaid}"
class=
"form-control"
style=
"width: 30%;height: 20px;"
readonly
>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
版本:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"version"
th:field=
"*{adamMemberOrderVo.version}"
class=
"form-control"
type=
"text"
readonly
>
</div>
<label
class=
"pull-left"
><i
class=
"fa fa-cny"
></i>
退款金额:
</label>
<input
type=
"number"
name=
"refundAmt"
th:value=
"${orderDetailsVo.adamMemberOrderVo.pricePaid}"
class=
"form-control"
style=
"width: 30%;height: 20px;"
>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
客户端:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"source"
th:field=
"*{adamMemberOrderVo.source}"
class=
"form-control"
type=
"text"
readonly
>
<!-- <label>退款原因:</label>-->
<textarea
rows=
"3"
name=
"reason"
placeholder=
"请输入退款原因"
class=
"form-control"
></textarea>
</div>
<div>
<label>
是否能继续购买会员:
</label>
<div
class=
"radio check-box"
>
是
<input
type=
"radio"
value=
"1"
name=
"renewable"
>
</div>
<!-- <!– 会员卡信息–>-->
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
会员卡ID:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"memberNo"
th:field=
"*{adamUserMemberVo.memberNo}"
class=
"form-control"
type=
"text"
readonly
>
<div
class=
"radio check-box"
>
否
<input
type=
"radio"
checked=
""
value=
"2"
name=
"renewable"
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
会员卡名称:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"memberName"
th:field=
"*{adamMemberOrderVo.memberName}"
class=
"form-control"
type=
"text"
readonly
>
</div>
</div>
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">会员勋章:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="memberNo" th:field="*{adamMemberOrderVo.memberNo}" class="form-control" type="text">-->
<!-- </div>-->
<!-- </div>-->
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
会员头像:
</label>
<div
class=
"col-sm-8"
>
<img
class=
"img-circle img-lg"
th:src=
"(*{#strings.isEmpty(adamUserInfoVo.avatar)}) ? @{/img/profile.jpg} : @{*{adamUserInfoVo.avatar}}"
th:onerror=
"'this.src=\'' + @{'/img/profile.jpg'} + '\''"
>
<div
class=
"text-center"
style=
"margin-bottom: -15px;margin-top: 10px;"
>
<button
class=
"btn btn-sm btn-primary m-t-n-xs"
type=
"button"
onclick=
"memberOrderRefund()"
>
<strong>
确认退款
</strong>
</button>
</div>
</form>
</div>
<!-- <!– 套餐信息–>-->
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
用户生日:
</label>
<div
class=
"col-sm-8"
>
<div
class=
"input-group"
>
<input
th:value=
"*{adamMemberOrderVo.birthday}"
class=
"form-control"
type=
"text"
readonly
>
</div>
</div>
</div>
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">喜欢的音乐人:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="version" th:field="*{version}" class="form-control" type="text">-->
<!-- </div>-->
<!-- </div>-->
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
收件人:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"expressReceiver"
th:value=
"|*{adamMemberOrderExtVo.expressReceiver} / *{adamMemberOrderExtVo.expressPhone}|"
class=
"form-control"
type=
"text"
readonly
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
收件地址:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"expressAddress"
th:value=
"*{adamMemberOrderExtVo.expressAddress}"
class=
"form-control"
type=
"text"
readonly
>
</div>
</div>
</form>
</div>
<th:block
th:include=
"include :: footer"
/>
<th:block
th:include=
"include :: datetimepicker-js"
/>
<script
th:inline=
"javascript"
>
var
prefix
=
ctx
+
"kylin/order"
;
$
(
"#form-order-edit"
).
validate
({
focusCleanup
:
true
});
</section>
function
submitHandler
()
{
if
(
$
.
validate
.
form
())
{
$
.
operate
.
save
(
prefix
+
"/edit"
,
$
(
'#form-order-edit'
).
serialize
());
}
}
<th:block
th:include=
"include :: footer"
/>
<script>
var
pricePaid
=
[[
$
{
orderDetailsVo
.
adamMemberOrderVo
.
pricePaid
}]];
$
(
"input[name='birthday']"
).
datetimepicker
({
format
:
"yyyy-mm-dd"
,
minView
:
"month"
,
autoclose
:
true
$
(
function
(){
//键盘按下ESC时关闭窗口!
$
(
document
).
keypress
(
function
(
e
){
if
(
e
.
keyCode
==
27
){
//关闭窗口的方法
window
.
opener
=
null
;
window
.
close
();
}
});
$
(
"input[name='paymentAt']"
).
datetimepicker
({
format
:
"yyyy-mm-dd"
,
minView
:
"month"
,
autoclose
:
true
});
$
(
"input[name='createdAt']"
).
datetimepicker
({
format
:
"yyyy-mm-dd"
,
minView
:
"month"
,
autoclose
:
true
});
$
(
"#form-member-order-refund"
).
validate
({
onkeyup
:
false
,
rules
:{
refundAmt
:
{
required
:
true
,
number
:
true
,
min
:
0.01
,
max
:
pricePaid
},
reason
:
{
required
:
true
,
minlength
:
2
,
maxlength
:
100
}
},
messages
:
{
refundAmt
:
{
required
:
"请输入退款金额"
,
number
:
"退款金额必须为数字"
,
min
:
"退款金额必须不得小于0.01"
,
max
:
"退款金额不能大于支付金额"
},
reason
:
{
required
:
"请输入退款原因"
,
minlength
:
"退款原因不能大于100个字符"
,
maxlength
:
"退款原因不能小于2个字符"
}
$
(
"input[name='updatedAt']"
).
datetimepicker
({
format
:
"yyyy-mm-dd"
,
minView
:
"month"
,
autoclose
:
true
},
focusCleanup
:
true
});
</script>
function
memberOrderRefund
()
{
if
(
$
.
validate
.
form
(
"form-member-order-refund"
))
{
$
.
operate
.
saveModal
(
ctx
+
"adam/order/orderList/refund"
,
$
(
'#form-member-order-refund'
).
serialize
());
}
}
</script>
</body>
</html>
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/adam/order/orderList/order.html
View file @
ffa8849e
<!DOCTYPE html>
<html
lang=
"zh"
xmlns:th=
"http://www.thymeleaf.org"
xmlns:shiro=
"http://www.pollix.at/thymeleaf/shiro"
>
<head>
<th:block
th:include=
"include :: header('
【请填写功能名称】
列表')"
/>
<th:block
th:include=
"include :: header('
会员订单
列表')"
/>
</head>
<body
class=
"gray-bg"
>
<div
class=
"container-div"
>
...
...
@@ -90,17 +90,19 @@
var
options
=
{
url
:
prefix
+
"/list"
,
createUrl
:
prefix
+
"/add"
,
updateUrl
:
prefix
+
"/edit/{id}"
,
removeUrl
:
prefix
+
"/remove"
,
exportUrl
:
prefix
+
"/export"
,
detailUrl
:
prefix
+
"/detail/{id}"
,
modalName
:
"
【请填写功能名称】
"
,
modalName
:
"
会员订单
"
,
columns
:
[{
checkbox
:
true
checkbox
:
true
,
},
{
field
:
'orderNo'
,
title
:
'订单号'
title
:
'订单号'
,
formatter
:
function
(
value
,
row
,
index
)
{
var
actions
=
[];
actions
.
push
(
'<a class="btn btn-xs" href="javascript:void(0)" onclick="$.operate.detailTab(
\'
'
+
row
.
orderNo
+
'
\'
)">'
+
value
+
'</a>'
);
return
actions
.
join
(
''
);
}
},
{
field
:
'state'
,
...
...
@@ -111,10 +113,13 @@
},
{
field
:
'payType'
,
title
:
'支付方式'
title
:
'支付方式'
,
formatter
:
function
(
value
)
{
return
'<span class="nav-label">'
+
value
.
toLocaleUpperCase
()
+
'</span>'
;
}
},
{
field
:
'price'
,
field
:
'price
Paid
'
,
title
:
'价格(元)'
},
{
...
...
@@ -149,7 +154,7 @@
align
:
'center'
,
formatter
:
function
(
value
,
row
,
index
)
{
var
actions
=
[];
actions
.
push
(
'<a class="btn btn-warning btn-xs '
+
detailFlag
+
'" href="javascript:void(0)" onclick="$.operate.detail
(
\'
'
+
row
.
orderNo
+
'
\'
)"><i class="fa fa-search"></i>详细
</a>'
);
actions
.
push
(
'<a class="btn btn-warning btn-xs '
+
detailFlag
+
'" href="javascript:void(0)" onclick="$.operate.detail
Tab(
\'
'
+
row
.
orderNo
+
'
\'
)"><i class="fa fa-search"></i>查看详情
</a>'
);
return
actions
.
join
(
''
);
}
}]
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/adam/service/impl/AdamMemberOrderAdminServiceImpl.java
View file @
ffa8849e
...
...
@@ -69,7 +69,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
@Value
(
"${liquidnet.url-refund.apply}"
)
private
String
applyUrl
;
@Value
(
"${liquidnet.url-refund.notify}"
)
@Value
(
"${liquidnet.url-refund.notify
-member
}"
)
private
String
notifyUrl
;
@Override
...
...
@@ -118,6 +118,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
// 查取快递信息
AdamMemberOrderExt
adamMemberOrderExt
=
adamMemberOrderExtMapper
.
selectOne
(
Wrappers
.
lambdaQuery
(
AdamMemberOrderExt
.
class
).
eq
(
AdamMemberOrderExt:
:
getOrderNo
,
orderNo
));
adamUserMemberVo
.
setState
(
adamUserMemberVo
.
isActive
()
?
1
:
2
);
detailAdminVo
.
setAdamMemberOrderVo
(
adamMemberOrderVo
);
detailAdminVo
.
setAdamUserMemberVo
(
adamUserMemberVo
);
detailAdminVo
.
setAdamUserInfoVo
(
adamUserInfoVo
);
...
...
@@ -131,10 +132,12 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
public
AjaxResult
refundProcessing
(
AdamMemberOrderRefundParam
param
,
AdamMemberOrder
memberOrder
)
{
LinkedMultiValueMap
<
String
,
String
>
linkedMultiValueMap
=
new
LinkedMultiValueMap
<>();
String
refundNo
=
IDGenerator
.
nextTimeId2
().
concat
(
"VR"
);
linkedMultiValueMap
.
add
(
"code"
,
memberOrder
.
getPayNo
());
linkedMultiValueMap
.
add
(
"notifyUrl"
,
notifyUrl
);
linkedMultiValueMap
.
add
(
"orderCode"
,
memberOrder
.
getOrderNo
());
linkedMultiValueMap
.
add
(
"orderRefundCode"
,
IDGenerator
.
nextTimeId2
()
);
linkedMultiValueMap
.
add
(
"orderRefundCode"
,
refundNo
);
linkedMultiValueMap
.
add
(
"paymentId"
,
null
);
linkedMultiValueMap
.
add
(
"paymentType"
,
(
memberOrder
.
getDeviceFrom
()
+
memberOrder
.
getPayType
()).
toUpperCase
());
linkedMultiValueMap
.
add
(
"price"
,
String
.
valueOf
(
param
.
getRefundAmt
()));
...
...
@@ -153,12 +156,12 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
LocalDateTime
now
=
LocalDateTime
.
now
();
AdamMemberRefund
memberRefund
=
new
AdamMemberRefund
();
memberRefund
.
setRefundNo
(
IDGenerator
.
nextTimeId2
().
concat
(
"VR"
)
);
memberRefund
.
setRefundNo
(
refundNo
);
memberRefund
.
setOrderNo
(
memberOrder
.
getOrderNo
());
memberRefund
.
setRefundPrice
(
param
.
getRefundAmt
());
memberRefund
.
setRefundReason
(
param
.
getReason
());
memberRefund
.
setRenewable
(
param
.
getRenewable
());
memberRefund
.
setRefundState
(
0
);
memberRefund
.
setRefundState
(
9
);
memberRefund
.
setRefundNo
(
postResultJNode
.
get
(
"refundCode"
).
asText
());
memberRefund
.
setOperator
(
ShiroUtils
.
getLoginName
());
memberRefund
.
setCreatedAt
(
now
);
...
...
liquidnet-bus-do/liquidnet-service-adam-do/src/main/java/com/liquidnet/service/adam/entity/AdamMemberRefund.java
View file @
ffa8849e
...
...
@@ -75,9 +75,9 @@ public class AdamMemberRefund implements Serializable {
private
LocalDateTime
updatedAt
;
/**
*
完成
时间
*
退款
时间
*/
private
LocalDateTime
complete
At
;
private
LocalDateTime
refund
At
;
private
String
comment
;
...
...
liquidnet-bus-service/liquidnet-service-adam/liquidnet-service-adam-impl/docu/db_ln_adam_initialdata.sql
View file @
ffa8849e
...
...
@@ -383,11 +383,11 @@ create table adam_member_refund
repay_no
varchar
(
64
)
comment
'支付中心退款编号'
,
repay_reason
varchar
(
200
)
comment
'支付中心退款描述'
,
refund_at
datetime
(
3
)
comment
'退款时间'
,
operator
varchar
(
64
)
comment
'操作人'
,
created_at
datetime
(
3
)
not
null
,
updated_at
datetime
(
3
),
complete_at
datetime
(
3
)
comment
'完成时间'
,
comment
varchar
(
255
)
)
engine
=
InnoDB
comment
'会员退款'
;
...
...
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/adam/PlatformAdamMemberOrderCallbackController.java
0 → 100644
View file @
ffa8849e
package
com
.
liquidnet
.
service
.
platform
.
controller
.
adam
;
import
com.github.xiaoymin.knife4j.annotations.ApiOperationSupport
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.platform.service.impl.adam.PlatformMemberRefundService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
@Api
(
tags
=
"会员退款回调处理"
)
@Slf4j
@RestController
@RequestMapping
(
"amorder/callack"
)
public
class
PlatformAdamMemberOrderCallbackController
{
@Autowired
private
PlatformMemberRefundService
platformMemberRefundService
;
@ApiOperationSupport
(
order
=
1
)
@ApiOperation
(
value
=
"退款回调"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"status"
,
value
=
"1-成功|0-失败"
,
example
=
"1"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"orderCode"
,
value
=
"会员订单号"
,
example
=
"77062761607274496V"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"code"
,
value
=
"支付订单号"
,
example
=
"20210616153954199964032352974P"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"type"
,
value
=
"购买类型"
,
example
=
"VIP"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"price"
,
value
=
"支付金额"
,
example
=
"0.01"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"paymentType"
,
value
=
"支付类型"
,
example
=
"APPALIPAY"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"paymentAt"
,
value
=
"支付时间"
,
example
=
"2021-06-16 15:40:02"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"paymentId"
,
value
=
"支付ID"
,
example
=
"2021061622001468121421203878"
),
})
@PostMapping
(
"refund"
)
public
String
refund
(
HttpServletRequest
request
)
{
log
.
debug
(
"/amorder/callack/refund:[mapParameter:{},token:{}]"
,
JsonUtils
.
toJson
(
request
.
getParameterMap
()),
request
.
getHeader
(
"token"
));
// TODO: 2021/6/13 验签
if
(!
platformMemberRefundService
.
refundProcessing
(
request
))
{
log
.
warn
(
"###会员退款回调处理失败:param:{}"
,
JsonUtils
.
toJson
(
request
.
getParameterMap
()));
return
"fail"
;
}
return
"success"
;
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/impl/adam/PlatformMemberRefundService.java
0 → 100644
View file @
ffa8849e
package
com
.
liquidnet
.
service
.
platform
.
service
.
impl
.
adam
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.service.adam.constant.AdamRedisConst
;
import
com.liquidnet.service.adam.dto.vo.AdamMemberOrderVo
;
import
com.liquidnet.service.adam.dto.vo.AdamUserMemberVo
;
import
com.liquidnet.service.adam.entity.AdamMemberOrder
;
import
com.liquidnet.service.adam.entity.AdamMemberRefund
;
import
com.liquidnet.service.adam.entity.AdamUserMember
;
import
com.liquidnet.service.adam.mapper.AdamMemberOrderMapper
;
import
com.liquidnet.service.adam.mapper.AdamMemberRefundMapper
;
import
com.liquidnet.service.adam.mapper.AdamUserMemberMapper
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.stream.IntStream
;
@Slf4j
@Service
public
class
PlatformMemberRefundService
extends
ServiceImpl
<
AdamMemberRefundMapper
,
AdamMemberRefund
>
{
@Autowired
private
AdamMemberOrderMapper
adamMemberOrderMapper
;
@Autowired
private
AdamUserMemberMapper
adamUserMemberMapper
;
@Autowired
private
RedisUtil
redisUtil
;
public
boolean
refundProcessing
(
HttpServletRequest
request
)
{
String
refundNo
=
request
.
getParameter
(
"orderRefundCode"
);
String
refundAt
=
request
.
getParameter
(
"refundAt"
);
String
orderNo
=
request
.
getParameter
(
"refundCode"
);
String
refundError
=
request
.
getParameter
(
"refundError"
);
String
refundAmt
=
request
.
getParameter
(
"refundPrice"
);
int
status
=
Integer
.
parseInt
(
request
.
getParameter
(
"status"
));
AdamMemberRefund
memberRefund
=
this
.
getOne
(
Wrappers
.
lambdaQuery
(
AdamMemberRefund
.
class
)
.
eq
(
AdamMemberRefund:
:
getRefundNo
,
refundNo
).
eq
(
AdamMemberRefund:
:
getOrderNo
,
orderNo
));
if
(
null
==
memberRefund
)
{
log
.
warn
(
"会员退款回调处理失败:订单不存在[orderNo:{},refundNo:{}]"
,
orderNo
,
refundNo
);
return
false
;
}
if
(
memberRefund
.
getRefundState
()
!=
9
)
{
log
.
warn
(
"会员退款回调处理失败:订单已处理[orderNo:{},refundNo:{}]"
,
orderNo
,
refundNo
);
return
true
;
}
LocalDateTime
now
=
LocalDateTime
.
now
();
LambdaUpdateWrapper
<
AdamMemberRefund
>
memberRefundLambdaUpdateWrapper
=
Wrappers
.
lambdaUpdate
(
AdamMemberRefund
.
class
)
.
eq
(
AdamMemberRefund:
:
getRefundNo
,
refundNo
).
eq
(
AdamMemberRefund:
:
getOrderNo
,
orderNo
);
memberRefundLambdaUpdateWrapper
.
set
(
AdamMemberRefund:
:
getRefundAt
,
refundAt
);
memberRefundLambdaUpdateWrapper
.
set
(
AdamMemberRefund:
:
getRefundReason
,
refundError
);
memberRefundLambdaUpdateWrapper
.
set
(
AdamMemberRefund:
:
getUpdatedAt
,
now
);
switch
(
status
)
{
case
0
:
// 失败
memberRefundLambdaUpdateWrapper
.
set
(
AdamMemberRefund:
:
getRefundState
,
3
);
return
this
.
update
(
memberRefundLambdaUpdateWrapper
);
case
1
:
// 成功
memberRefundLambdaUpdateWrapper
.
set
(
AdamMemberRefund:
:
getRefundState
,
1
);
if
(
this
.
update
(
memberRefundLambdaUpdateWrapper
))
{
this
.
refundSuccProcessing
(
orderNo
,
now
);
return
true
;
}
else
{
return
false
;
}
default
:
log
.
warn
(
"会员退款回调处理失败:未知的状态[orderNo:{},refundNo:{},status:{}]"
,
orderNo
,
refundNo
,
status
);
return
false
;
}
}
/* -------------------------------------------------------------------------- */
private
void
refundSuccProcessing
(
String
orderNo
,
LocalDateTime
now
)
{
AdamMemberOrder
memberOrder
=
adamMemberOrderMapper
.
selectOne
(
Wrappers
.
lambdaUpdate
(
AdamMemberOrder
.
class
).
eq
(
AdamMemberOrder:
:
getOrderNo
,
orderNo
));
{
// 同步用户端信息
String
moKey
=
AdamRedisConst
.
INFO_MEMBER_ORDER
+
memberOrder
.
getUid
();
ArrayList
<
AdamMemberOrderVo
>
vos
=
(
ArrayList
<
AdamMemberOrderVo
>)
redisUtil
.
get
(
moKey
);
int
idx
=
IntStream
.
range
(
0
,
vos
.
size
()).
filter
(
i
->
vos
.
get
(
i
).
getOrderNo
().
equals
(
memberOrder
.
getOrderNo
())).
findFirst
().
orElse
(-
1
);
AdamMemberOrderVo
vo
=
vos
.
get
(
idx
);
vo
.
setState
(
5
);
vo
.
setUpdatedAt
(
now
);
vos
.
set
(
idx
,
vo
);
boolean
syncVo
=
redisUtil
.
set
(
moKey
,
vos
);
log
.
warn
(
"###会员退款回调处理成功:更新REDIS会员订单状态{}[orderNo:{},uid:{}]"
,
syncVo
?
"成功"
:
"失败"
,
orderNo
,
memberOrder
.
getUid
());
String
umKey
=
AdamRedisConst
.
INFO_USER_MEMBER
.
concat
(
memberOrder
.
getUid
());
AdamUserMemberVo
userMemberVo
=
(
AdamUserMemberVo
)
redisUtil
.
get
(
umKey
);
userMemberVo
.
setState
(
2
);
userMemberVo
.
setUpdatedAt
(
now
);
syncVo
=
redisUtil
.
set
(
umKey
,
userMemberVo
);
log
.
warn
(
"###会员退款回调处理成功:更新REDIS会员状态{}[orderNo:{},uid:{}]"
,
syncVo
?
"成功"
:
"失败"
,
orderNo
,
memberOrder
.
getUid
());
}
AdamUserMember
updateInfoUserMember
=
new
AdamUserMember
();
updateInfoUserMember
.
setState
(
2
);
updateInfoUserMember
.
setUpdatedAt
(
now
);
updateInfoUserMember
.
setComment
(
"R"
);
int
updateRst
=
adamUserMemberMapper
.
update
(
updateInfoUserMember
,
Wrappers
.
lambdaUpdate
(
AdamUserMember
.
class
).
eq
(
AdamUserMember:
:
getUid
,
memberOrder
.
getUid
()));
log
.
warn
(
"###会员退款回调处理成功:更新用户会员状态{}[orderNo:{},uid:{}]"
,
updateRst
<=
0
?
"失败"
:
"成功"
,
orderNo
,
memberOrder
.
getUid
());
AdamMemberOrder
updateInfoMemberOrder
=
new
AdamMemberOrder
();
updateInfoMemberOrder
.
setMid
(
memberOrder
.
getMid
());
updateInfoMemberOrder
.
setState
(
5
);
updateInfoMemberOrder
.
setUpdatedAt
(
now
);
updateRst
=
adamMemberOrderMapper
.
updateById
(
updateInfoMemberOrder
);
log
.
warn
(
"###会员退款回调处理成功:更新会员订单状态{}[orderNo:{}]"
,
updateRst
<=
0
?
"失败"
:
"成功"
,
orderNo
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment