记得上下班打卡 | 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
b9fe5d3a
Commit
b9fe5d3a
authored
Jun 29, 2021
by
胡佳晨
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
cf38951d
978ed28d
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1583 additions
and
91 deletions
+1583
-91
KylinTableStatusConst.java
...quidnet/service/kylin/constant/KylinTableStatusConst.java
+3
-2
PerformancesExpressController.java
...troller/zhengzai/kylin/PerformancesExpressController.java
+85
-8
performanceOrderList.html
...ngzai/kylin/performancesExpress/performanceOrderList.html
+10
-1
PerformancesExpressServiceImpl.java
...ai/kylin/service/impl/PerformancesExpressServiceImpl.java
+202
-63
ShunfengSignUtils.java
.../client/admin/zhengzai/kylin/utils/ShunfengSignUtils.java
+9
-3
liquidnet-client-admin-web.yml
...us-config/liquidnet-config/liquidnet-client-admin-web.yml
+4
-5
liquidnet-service-platform-dev.yml
...onfig/liquidnet-config/liquidnet-service-platform-dev.yml
+13
-0
liquidnet-service-platform-test.yml
...nfig/liquidnet-config/liquidnet-service-platform-test.yml
+36
-0
KylinOrderExpressFeeInfo.java
...uidnet/service/kylin/entity/KylinOrderExpressFeeInfo.java
+45
-0
KylinOrderExpressRoute.java
...iquidnet/service/kylin/entity/KylinOrderExpressRoute.java
+47
-0
KylinOrderExpressFeeInfoMapper.java
.../service/kylin/mapper/KylinOrderExpressFeeInfoMapper.java
+16
-0
KylinOrderExpressMapper.java
...quidnet/service/kylin/mapper/KylinOrderExpressMapper.java
+1
-1
KylinOrderExpressRouteMapper.java
...et/service/kylin/mapper/KylinOrderExpressRouteMapper.java
+16
-0
db_kylin_structure.sql
.../liquidnet-service-kylin-impl/docu/db_kylin_structure.sql
+34
-1
PlatformWebMvcConfig.java
...quidnet/service/platform/config/PlatformWebMvcConfig.java
+7
-7
PerformancesExpressCallbackController.java
...press/shunfeng/PerformancesExpressCallbackController.java
+37
-0
OrderRefundCallbackController.java
...form/controller/refund/OrderRefundCallbackController.java
+55
-0
PerformancesExpressCallbackServiceImpl.java
...ress/shunfeng/PerformancesExpressCallbackServiceImpl.java
+126
-0
KylinRefundsStatusServiceImpl.java
...latform/service/refund/KylinRefundsStatusServiceImpl.java
+482
-0
OrderRefundsCallbackServiceImpl.java
...tform/service/refund/OrderRefundsCallbackServiceImpl.java
+178
-0
ShunfengSignUtils.java
...m/liquidnet/service/platform/utils/ShunfengSignUtils.java
+177
-0
No files found.
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/constant/KylinTableStatusConst.java
View file @
b9fe5d3a
...
...
@@ -79,6 +79,7 @@ public class KylinTableStatusConst {
/**
* 快递
*/
public
static
final
Integer
ORDER_EXPRESS_STATUS1
=
1
;
// 申请
public
static
final
Integer
ORDER_EXPRESS_STATUS2
=
2
;
// 取消
public
static
final
Integer
ORDER_EXPRESS_STATUS1
=
1
;
// 申请 顺丰返回失败
public
static
final
Integer
ORDER_EXPRESS_STATUS2
=
2
;
// 申请 顺丰返回成功 或 通过主动再查询更新
public
static
final
Integer
ORDER_EXPRESS_STATUS3
=
3
;
// 取消
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/PerformancesExpressController.java
View file @
b9fe5d3a
...
...
@@ -31,13 +31,6 @@ public class PerformancesExpressController extends BaseController {
private
String
prefix
=
"zhengzai/kylin/performancesExpress"
;
/*@Value("${liquidnet.shunfeng.url}")
public String url;
@Value("${liquidnet.shunfeng.sk}")
private String sk;
@Value("${liquidnet.shunfeng.appid}")
private String appid;*/
@Autowired
private
PerformancesExpressServiceImpl
performancesExpressServiceImpl
;
...
...
@@ -115,7 +108,26 @@ public class PerformancesExpressController extends BaseController {
}
/**
* 结果主动查询
* 订单运费估算
*/
@RequiresPermissions
(
"kylin:performancesExpress:getFreight"
)
@PostMapping
(
"/getFreight"
)
@ResponseBody
public
AjaxResult
getFreight
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
ResponseDto
res
=
performancesExpressServiceImpl
.
getFreight
(
performanceExpressSearchAdminParam
);
try
{
if
(
res
.
isSuccess
())
{
return
success
();
}
else
{
return
error
(
res
.
getMessage
());
}
}
catch
(
Exception
e
)
{
return
error
(
e
.
getMessage
());
}
}
/**
* 下单结果主动查询
*/
@RequiresPermissions
(
"kylin:performancesExpress:getResult"
)
@PostMapping
(
"/getResult"
)
...
...
@@ -133,4 +145,69 @@ public class PerformancesExpressController extends BaseController {
}
}
/**
* 运费主动查询
*/
@RequiresPermissions
(
"kylin:performancesExpress:getListFreight"
)
@PostMapping
(
"/getListFreight"
)
@ResponseBody
public
AjaxResult
getListFreight
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
ResponseDto
res
=
performancesExpressServiceImpl
.
getListFreight
(
performanceExpressSearchAdminParam
);
try
{
if
(
res
.
isSuccess
())
{
return
success
();
}
else
{
return
error
(
res
.
getMessage
());
}
}
catch
(
Exception
e
)
{
return
error
(
e
.
getMessage
());
}
}
/**
* 路由主动查询
*/
@RequiresPermissions
(
"kylin:performancesExpress:listOrderRoute"
)
@PostMapping
(
"/listOrderRoute"
)
@ResponseBody
public
AjaxResult
listOrderRoute
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
ResponseDto
res
=
performancesExpressServiceImpl
.
listOrderRoute
(
performanceExpressSearchAdminParam
);
try
{
if
(
res
.
isSuccess
())
{
return
success
();
}
else
{
return
error
(
res
.
getMessage
());
}
}
catch
(
Exception
e
)
{
return
error
(
e
.
getMessage
());
}
}
/**
* 订单状态推送
*/
/**
* 路由推送
*/
/**
* 清单运费推送
*/
/**
* 预计派件时间
*/
/**
* 通缉拦截
* 该接口只能在揽收后,派送成功前生效
* 同一订单在成功通缉拦截一次后,不可再次进行通缉拦截
* 1-转寄;2-退回;3-优派;4-再派;5-改自取(改派-其他自取点取件);6-改派送(上门派送);7-更改派送时间;8-修改收件人信息;9-更改付款方式;10-修改代收货款;12-作废;
*/
/**
* 订单确认 快递员上门揽收前,如需修改部分下单内容(如收件人信息等
*/
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/performancesExpress/performanceOrderList.html
View file @
b9fe5d3a
...
...
@@ -71,6 +71,9 @@
var
placeOrderFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performancesExpress:placeOrder'
)}]];
var
cancelOrderFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performancesExpress:cancelOrder'
)}]];
var
getResultFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performancesExpress:getResult'
)}]];
var
getFreightFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performancesExpress:getFreight'
)}]];
var
getListFreightFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performancesExpress:getListFreight'
)}]];
var
listOrderRouteFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performancesExpress:listOrderRoute'
)}]];
var
prefix
=
ctx
+
"kylin/performancesExpress"
;
...
...
@@ -82,7 +85,10 @@
modalName
:
"演出订单"
,
placeOrderUrl
:
prefix
+
"/placeOrder"
,
cancelOrderUrl
:
prefix
+
"/cancelOrder"
,
getFreightUrl
:
prefix
+
"/getFreight"
,
getListFreightUrl
:
prefix
+
"/getListFreight"
,
getResultUrl
:
prefix
+
"/getResult"
,
listOrderRouteUrl
:
prefix
+
"/listOrderRoute"
,
columns
:
[{
checkbox
:
true
},
...
...
@@ -126,7 +132,7 @@
},
{
field
:
''
,
title
:
'收
获
用户'
,
title
:
'收
货
用户'
,
formatter
:
function
(
value
,
row
,
index
)
{
var
expressContacts
=
row
.
expressContacts
;
var
expressAddress
=
row
.
expressAddress
;
...
...
@@ -142,6 +148,9 @@
actions
.
push
(
'<a class="btn btn-success btn-xs '
+
placeOrderFlag
+
'" href="javascript:void(0)" onclick="$.operate.remove(
\'
'
+
row
.
orderTicketsId
+
'
\'
,
\'
确定下单吗?
\'
, table.options.placeOrderUrl)"></i>下单</a> '
);
actions
.
push
(
'<a class="btn btn-danger btn-xs '
+
cancelOrderFlag
+
'" href="javascript:void(0)" onclick="$.operate.remove(
\'
'
+
row
.
orderTicketsId
+
'
\'
,
\'
确定取消快递单吗?
\'
, table.options.cancelOrderUrl)"></i>取消</a> '
);
actions
.
push
(
'<a class="btn btn-default btn-xs '
+
getResultFlag
+
'" href="javascript:void(0)" onclick="$.operate.remove(
\'
'
+
row
.
orderTicketsId
+
'
\'
,
\'
确定获取快递信息吗?
\'
, table.options.getResultUrl)"></i>主动获取下单信息</a> '
);
actions
.
push
(
'<a class="btn btn-default btn-xs '
+
getFreightFlag
+
'" href="javascript:void(0)" onclick="$.operate.remove(
\'
'
+
row
.
orderTicketsId
+
'
\'
,
\'
确定获取估算运费吗?
\'
, table.options.getFreightUrl)"></i>运费估算</a> '
);
actions
.
push
(
'<a class="btn btn-default btn-xs '
+
getListFreightFlag
+
'" href="javascript:void(0)" onclick="$.operate.remove(
\'
'
+
row
.
orderTicketsId
+
'
\'
,
\'
确定获取运费信息吗?
\'
, table.options.getListFreightUrl)"></i>主动获取运费</a> '
);
actions
.
push
(
'<a class="btn btn-default btn-xs '
+
listOrderRouteFlag
+
'" href="javascript:void(0)" onclick="$.operate.remove(
\'
'
+
row
.
orderTicketsId
+
'
\'
,
\'
确定获取路由信息吗?
\'
, table.options.listOrderRouteUrl)"></i>路由主动查询</a> '
);
return
actions
.
join
(
''
);
}
}]
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/service/impl/PerformancesExpressServiceImpl.java
View file @
b9fe5d3a
...
...
@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.client.admin.common.utils.StringUtils
;
import
com.liquidnet.client.admin.zhengzai.kylin.utils.ShunfengSignUtils
;
import
com.liquidnet.commons.lang.util.BeanUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.kylin.constant.KylinTableStatusConst
;
import
com.liquidnet.service.kylin.dao.*
;
...
...
@@ -22,7 +19,7 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.stereotype.Service
;
import
java.
time.LocalDateTime
;
import
java.
math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -46,16 +43,14 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
private
String
jCompany
;
@Value
(
"${liquidnet.shunfeng.jContact}"
)
private
String
jContact
;
@Value
(
"${liquidnet.shunfeng.j
Mobile
}"
)
private
String
j
Mobile
;
@Value
(
"${liquidnet.shunfeng.j
Tel
}"
)
private
String
j
Tel
;
@Value
(
"${liquidnet.shunfeng.jProvince}"
)
private
String
jProvince
;
@Value
(
"${liquidnet.shunfeng.jCity}"
)
private
String
jCity
;
@Value
(
"${liquidnet.shunfeng.jAddress}"
)
private
String
jAddress
;
@Value
(
"${liquidnet.shunfeng.payMethod}"
)
private
Integer
payMethod
;
@Value
(
"${liquidnet.shunfeng.expressType}"
)
private
Integer
expressType
;
@Value
(
"${liquidnet.shunfeng.depositumInfo}"
)
...
...
@@ -76,6 +71,12 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
@Autowired
private
KylinOrderExpressMapper
kylinOrderExpressMapper
;
@Autowired
private
KylinOrderExpressFeeInfoMapper
kylinOrderExpressFeeInfoMapper
;
@Autowired
private
KylinOrderExpressRouteMapper
kylinOrderExpressRouteMapper
;
public
List
<
PerformanceExpressPerformanceListAdminDao
>
getPerformancesList
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
PerformanceExpressPerformanceListAdminDao
>
voList
=
new
ArrayList
();
try
{
...
...
@@ -99,45 +100,61 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
public
ResponseDto
placeOrder
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
for
(
String
orderTicketsId
:
ids
)
{
// 已经存在未取消的下单数据过滤掉
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
notIn
(
"express_status"
,
expressStatus
)
);
if
(
null
!=
orderExpressInfo
)
{
continue
;
}
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
// 生成预快递单 防止因失败没办法再次发起也不能主动获取数据
KylinOrderExpress
kylinOrderExpressPre
=
new
KylinOrderExpress
();
String
orderExpressId
=
IDGenerator
.
nextSnowId
();
kylinOrderExpressPre
.
setExpressStatus
(
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
);
kylinOrderExpressPre
.
setOrderExpressId
(
orderExpressId
);
kylinOrderExpressPre
.
setOrderTicketsId
(
orderTicketsId
);
// 防止重复前面加上 "NEW" 因取消后再发起订单号也不能一致所有后面做补位操作
Integer
placeCount
=
kylinOrderExpressMapper
.
selectCount
(
new
QueryWrapper
<
KylinOrderExpress
>()
.
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
String
codeNum
=
StringUtils
.
leftPad
(
String
.
valueOf
(
placeCount
),
3
,
"0"
);
String
OrderExpressCode
=
"NEW"
+
orderInfo
.
getOrderCode
().
concat
(
codeNum
);
kylinOrderExpressPre
.
setOrderExpressCode
(
OrderExpressCode
);
kylinOrderExpressPre
.
setExpressType
(
expressType
);
kylinOrderExpressPre
.
setCreatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressMapper
.
insert
(
kylinOrderExpressPre
);
// 请求下单数据
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"custid"
,
custid
);
hBody
.
put
(
"jCompany"
,
jCompany
);
hBody
.
put
(
"jContact"
,
jContact
);
// hBody.put("jTel", "010");
hBody
.
put
(
"jMobile"
,
jMobile
);
hBody
.
put
(
"jTel"
,
jTel
);
hBody
.
put
(
"jProvince"
,
jProvince
);
hBody
.
put
(
"jCity"
,
jCity
);
hBody
.
put
(
"jAddress"
,
jAddress
);
hBody
.
put
(
"payMethod"
,
payMethod
);
// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
hBody
.
put
(
"payMethod"
,
0
);
// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
hBody
.
put
(
"expressType"
,
expressType
);
// 顺丰特快
hBody
.
put
(
"depositumInfo"
,
depositumInfo
);
Integer
placeCount
=
kylinOrderExpressMapper
.
selectCount
(
new
QueryWrapper
<
KylinOrderExpress
>()
.
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
String
codeNum
=
StringUtils
.
leftPad
(
String
.
valueOf
(
placeCount
),
3
,
"0"
);
String
OrderExpressCode
=
"NEW"
+
orderInfo
.
getOrderCode
().
concat
(
codeNum
);
hBody
.
put
(
"orderId"
,
OrderExpressCode
);
hBody
.
put
(
"depositumNo"
,
orderInfo
.
getNumber
());
hBody
.
put
(
"dContact"
,
orderInfo
.
getExpressContacts
());
hBody
.
put
(
"dMobile"
,
orderInfo
.
getExpressPhone
());
// hBody.put("dProvince", "北京");
// hBody.put("dCity", "北京市");
hBody
.
put
(
"dAddress"
,
orderInfo
.
getExpressAddress
());
// 时间戳
long
currentTimeMillis
=
System
.
currentTimeMillis
();
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
currentTimeMillis
+
""
,
hBody
,
"/public/order/v1/placeOrder"
);
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/placeOrder"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
...
...
@@ -146,13 +163,8 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
}
else
{
HashMap
hashMapResult
=
(
HashMap
)
hashMap
.
get
(
"result"
);
KylinOrderExpress
kylinOrderExpress
=
new
KylinOrderExpress
();
String
orderExpressId
=
IDGenerator
.
nextSnowId
();
kylinOrderExpress
.
setExpressStatus
(
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
);
kylinOrderExpress
.
setOrderExpressId
(
orderExpressId
);
kylinOrderExpress
.
setOrderTicketsId
(
orderTicketsId
);
kylinOrderExpress
.
setOrderExpressCode
(
OrderExpressCode
);
kylinOrderExpress
.
setExpressStatus
(
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS2
);
kylinOrderExpress
.
setMailno
((
String
)
hashMapResult
.
get
(
"mailno"
));
kylinOrderExpress
.
setExpressType
(
expressType
);
kylinOrderExpress
.
setFilterResult
(
hashMapResult
.
get
(
"filter_result"
).
toString
());
kylinOrderExpress
.
setRemark
((
String
)
hashMapResult
.
get
(
"remark"
));
kylinOrderExpress
.
setOrigincode
((
String
)
hashMapResult
.
get
(
"origincode"
));
...
...
@@ -160,8 +172,11 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
kylinOrderExpress
.
setPrintIcon
((
String
)
hashMapResult
.
get
(
"printIcon"
));
kylinOrderExpress
.
setPrintFlag
((
String
)
hashMapResult
.
get
(
"printFlag"
));
kylinOrderExpress
.
setTwoDimensionCode
((
String
)
hashMapResult
.
get
(
"twoDimensionCode"
));
kylinOrderExpress
.
setCreatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressMapper
.
insert
(
kylinOrderExpress
);
kylinOrderExpress
.
setUpdatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressMapper
.
update
(
kylinOrderExpress
,
new
UpdateWrapper
<
KylinOrderExpress
>().
in
(
"order_express_id"
,
orderExpressId
)
);
}
}
return
ResponseDto
.
success
();
...
...
@@ -169,20 +184,18 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
public
ResponseDto
cancelOrder
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
for
(
String
orderTicketsId
:
ids
)
{
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
n
e
(
"express_status"
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS2
)
.
n
otIn
(
"express_status"
,
expressStatus
)
);
if
(
null
!=
orderExpressInfo
)
{
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"orderId"
,
orderExpressInfo
.
getOrderExpressCode
());
// 时间戳
long
currentTimeMillis
=
System
.
currentTimeMillis
();
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
currentTimeMillis
+
""
,
hBody
,
"/public/order/v1/cancelOrder"
);
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/cancelOrder"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
...
...
@@ -190,7 +203,7 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
return
ResponseDto
.
failure
(
msg
);
}
else
{
KylinOrderExpress
kylinOrderExpress
=
new
KylinOrderExpress
();
kylinOrderExpress
.
setExpressStatus
(
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS
2
);
kylinOrderExpress
.
setExpressStatus
(
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS
3
);
kylinOrderExpress
.
setUpdatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressMapper
.
update
(
kylinOrderExpress
...
...
@@ -204,31 +217,19 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
public
ResponseDto
getResult
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
for
(
String
orderTicketsId
:
ids
)
{
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
n
e
(
"express_status"
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS2
)
.
n
otIn
(
"express_status"
,
expressStatus
)
);
if
(
null
!=
orderExpressInfo
)
{
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
Integer
placeCount
=
kylinOrderExpressMapper
.
selectCount
(
new
QueryWrapper
<
KylinOrderExpress
>()
.
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
String
codeNum
=
StringUtils
.
leftPad
(
String
.
valueOf
(
placeCount
),
3
,
"0"
);
String
OrderExpressCode
=
"NEW"
+
orderInfo
.
getOrderCode
().
concat
(
codeNum
);
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"orderId"
,
OrderExpressCode
);
hBody
.
put
(
"orderId"
,
orderExpressInfo
.
getOrderExpressCode
()
);
hBody
.
put
(
"searchType"
,
1
);
//查询类型:1,正向单查询,传入的orderid为正向定单号,2,退货单查询,传入的orderid为退货原始订单号
// 时间戳
long
currentTimeMillis
=
System
.
currentTimeMillis
();
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
currentTimeMillis
+
""
,
hBody
,
"/public/order/v1/getResult"
);
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/getResult"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
...
...
@@ -237,13 +238,8 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
}
else
{
HashMap
hashMapResult
=
(
HashMap
)
hashMap
.
get
(
"result"
);
KylinOrderExpress
kylinOrderExpress
=
new
KylinOrderExpress
();
String
orderExpressId
=
IDGenerator
.
nextSnowId
();
kylinOrderExpress
.
setExpressStatus
(
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
);
kylinOrderExpress
.
setOrderExpressId
(
orderExpressId
);
kylinOrderExpress
.
setOrderTicketsId
(
orderTicketsId
);
kylinOrderExpress
.
setOrderExpressCode
(
OrderExpressCode
);
kylinOrderExpress
.
setExpressStatus
(
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS2
);
kylinOrderExpress
.
setMailno
((
String
)
hashMapResult
.
get
(
"mailno"
));
kylinOrderExpress
.
setExpressType
(
expressType
);
kylinOrderExpress
.
setFilterResult
(
hashMapResult
.
get
(
"filter_result"
).
toString
());
kylinOrderExpress
.
setRemark
((
String
)
hashMapResult
.
get
(
"remark"
));
kylinOrderExpress
.
setOrigincode
((
String
)
hashMapResult
.
get
(
"origincode"
));
...
...
@@ -251,11 +247,154 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
kylinOrderExpress
.
setPrintIcon
((
String
)
hashMapResult
.
get
(
"printIcon"
));
kylinOrderExpress
.
setPrintFlag
((
String
)
hashMapResult
.
get
(
"printFlag"
));
kylinOrderExpress
.
setTwoDimensionCode
((
String
)
hashMapResult
.
get
(
"twoDimensionCode"
));
kylinOrderExpress
.
setCreatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressMapper
.
insert
(
kylinOrderExpress
);
kylinOrderExpress
.
setUpdatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressMapper
.
update
(
kylinOrderExpress
,
new
UpdateWrapper
<
KylinOrderExpress
>().
in
(
"order_express_id"
,
orderExpressInfo
.
getOrderExpressId
())
);
}
}
}
return
ResponseDto
.
success
();
}
public
ResponseDto
getListFreight
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
for
(
String
orderTicketsId
:
ids
)
{
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
notIn
(
"express_status"
,
expressStatus
)
);
if
(
null
!=
orderExpressInfo
)
{
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"orderId"
,
orderExpressInfo
.
getOrderExpressCode
());
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/getListFreight"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
String
msg
=
(
String
)
hashMap
.
get
(
"msg"
);
return
ResponseDto
.
failure
(
msg
);
}
else
{
HashMap
resultResult
=
(
HashMap
)
hashMap
.
get
(
"result"
);
List
<
HashMap
>
feeList
=
(
List
)
resultResult
.
get
(
"feeList"
);
if
(!
CollectionUtil
.
isEmpty
(
feeList
))
{
kylinOrderExpressFeeInfoMapper
.
delete
(
new
QueryWrapper
<
KylinOrderExpressFeeInfo
>().
eq
(
"order_express_id"
,
orderExpressInfo
.
getOrderExpressId
()));
for
(
HashMap
feeInfo
:
feeList
)
{
KylinOrderExpressFeeInfo
kylinOrderExpressFeeInfo
=
new
KylinOrderExpressFeeInfo
();
String
orderExpressFeeInfoId
=
IDGenerator
.
nextSnowId
();
kylinOrderExpressFeeInfo
.
setOrderExpressFeeInfoId
(
orderExpressFeeInfoId
);
kylinOrderExpressFeeInfo
.
setOrderExpressId
(
orderExpressInfo
.
getOrderExpressId
());
kylinOrderExpressFeeInfo
.
setType
((
String
)
feeInfo
.
get
(
"type"
));
kylinOrderExpressFeeInfo
.
setName
((
String
)
feeInfo
.
get
(
"name"
));
kylinOrderExpressFeeInfo
.
setValue
(
new
BigDecimal
(
feeInfo
.
get
(
"value"
).
toString
()));
kylinOrderExpressFeeInfo
.
setCreatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressFeeInfoMapper
.
insert
(
kylinOrderExpressFeeInfo
);
}
}
}
}
}
return
ResponseDto
.
success
();
}
public
ResponseDto
listOrderRoute
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
for
(
String
orderTicketsId
:
ids
)
{
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
notIn
(
"express_status"
,
expressStatus
)
);
if
(
null
!=
orderExpressInfo
)
{
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"orderId"
,
orderExpressInfo
.
getOrderExpressCode
());
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/listOrderRoute"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
String
msg
=
(
String
)
hashMap
.
get
(
"msg"
);
return
ResponseDto
.
failure
(
msg
);
}
else
{
List
<
HashMap
>
resultResult
=
(
List
)
hashMap
.
get
(
"result"
);
if
(!
CollectionUtil
.
isEmpty
(
resultResult
))
{
kylinOrderExpressRouteMapper
.
delete
(
new
QueryWrapper
<
KylinOrderExpressRoute
>().
eq
(
"order_express_id"
,
orderExpressInfo
.
getOrderExpressId
()));
for
(
HashMap
routeInfo
:
resultResult
)
{
KylinOrderExpressRoute
kylinOrderExpressRoute
=
new
KylinOrderExpressRoute
();
String
orderExpressRouteId
=
IDGenerator
.
nextSnowId
();
kylinOrderExpressRoute
.
setOrderExpressRouteId
(
orderExpressRouteId
);
kylinOrderExpressRoute
.
setOrderExpressId
(
orderExpressInfo
.
getOrderExpressId
());
kylinOrderExpressRoute
.
setAcceptAddress
((
String
)
routeInfo
.
get
(
"accept_address"
));
kylinOrderExpressRoute
.
setAcceptDate
((
String
)
routeInfo
.
get
(
"accept_date"
));
kylinOrderExpressRoute
.
setAcceptTime
((
String
)
routeInfo
.
get
(
"accept_time"
));
kylinOrderExpressRoute
.
setAcceptTotaltime
((
String
)
routeInfo
.
get
(
"accept_totaltime"
));
kylinOrderExpressRoute
.
setRemark
((
String
)
routeInfo
.
get
(
"remark"
));
kylinOrderExpressRoute
.
setOpcode
((
String
)
routeInfo
.
get
(
"opcode"
));
kylinOrderExpressRoute
.
setCreatedAt
(
DateUtil
.
getNowTime
());
kylinOrderExpressRouteMapper
.
insert
(
kylinOrderExpressRoute
);
}
}
}
}
}
return
ResponseDto
.
success
();
}
public
ResponseDto
getFreight
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
for
(
String
orderTicketsId
:
ids
)
{
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
notIn
(
"express_status"
,
expressStatus
)
);
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
if
(
null
!=
orderExpressInfo
)
{
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"jProvince"
,
jProvince
);
hBody
.
put
(
"jCity"
,
jCity
);
hBody
.
put
(
"jAddress"
,
jAddress
);
hBody
.
put
(
"dProvince"
,
"北京市"
);
hBody
.
put
(
"dCity"
,
"北京城区"
);
hBody
.
put
(
"dAddress"
,
orderInfo
.
getExpressAddress
());
hBody
.
put
(
"expressType"
,
expressType
);
// hBody.put("parcelWeighs", 2.00);
// hBody.put("volume", "10,10,20");
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/getFreight"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
String
msg
=
(
String
)
hashMap
.
get
(
"msg"
);
return
ResponseDto
.
failure
(
msg
);
}
else
{
/*HashMap resultResult = (HashMap) hashMap.get("result");
List<HashMap> feeList = (List) resultResult.get("feeList");
if (!CollectionUtil.isEmpty(feeList)) {
for (HashMap feeInfo : feeList) {
KylinOrderExpressFeeInfo kylinOrderExpressFeeInfo = new KylinOrderExpressFeeInfo();
String orderExpressFeeInfoId = IDGenerator.nextSnowId();
kylinOrderExpressFeeInfo.setOrderExpressFeeInfoId(orderExpressFeeInfoId);
kylinOrderExpressFeeInfo.setOrderExpressId(orderExpressInfo.getOrderExpressId());
kylinOrderExpressFeeInfo.setType((String) feeInfo.get("type"));
kylinOrderExpressFeeInfo.setName((String) feeInfo.get("name"));
kylinOrderExpressFeeInfo.setValue(new BigDecimal(feeInfo.get("value").toString()));
kylinOrderExpressFeeInfo.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressFeeInfoMapper.insert(kylinOrderExpressFeeInfo);
}
}*/
}
}
}
return
ResponseDto
.
success
();
}
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/utils/ShunfengSignUtils.java
View file @
b9fe5d3a
package
com
.
liquidnet
.
client
.
admin
.
zhengzai
.
kylin
.
utils
;
import
com.liquidnet.client.admin.common.json.JSONObject
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.UserPathDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -28,6 +29,7 @@ import java.util.HashMap;
* @since 2021-06-24 8:00 下午
*/
@Component
@Slf4j
public
class
ShunfengSignUtils
{
/**
* appId
...
...
@@ -51,11 +53,12 @@ public class ShunfengSignUtils {
/**
* 生成签名并请求
* @param timestamp 时间戳
* @param hbody 请求body
* @return
*/
public
String
generateSignatureAndRequest
(
String
timestamp
,
HashMap
<
String
,
Object
>
hbody
,
String
url
)
{
public
String
generateSignatureAndRequest
(
HashMap
<
String
,
Object
>
hbody
,
String
url
)
{
long
currentTimeMillis
=
System
.
currentTimeMillis
();
// 时间戳
String
timestamp
=
currentTimeMillis
+
""
;
hbody
.
put
(
"companyId"
,
APP_ID
);
String
body
=
JsonUtils
.
toJson
(
hbody
);
// 生成签名
...
...
@@ -75,6 +78,9 @@ public class ShunfengSignUtils {
// 请求body体需和获取验签时一致且编码UTF8!!!
httpPost
.
setEntity
(
new
StringEntity
(
body
,
"utf-8"
));
CloseableHttpResponse
response
=
null
;
log
.
info
(
UserPathDto
.
setData
(
"header"
,
""
,
httpPost
.
getAllHeaders
()));
log
.
info
(
UserPathDto
.
setData
(
"body"
,
""
,
body
));
try
{
response
=
client
.
execute
(
httpPost
);
if
(
response
.
getStatusLine
().
getStatusCode
()
==
200
)
{
...
...
liquidnet-bus-config/liquidnet-config/liquidnet-client-admin-web.yml
View file @
b9fe5d3a
...
...
@@ -45,14 +45,13 @@ liquidnet:
appid
:
${liquidnet.client.admin.shunfeng.appid}
custid
:
${liquidnet.client.admin.shunfeng.custid}
jCompany
:
北京正在映画互联网有限公司
jContact
:
姜秀龙
j
Mobile
:
15811009011
jContact
:
摩登天空票务部
j
Tel
:
4001680650
jProvince
:
北京
jCity
:
北京市
jAddress
:
朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
payMethod
:
0
expressType
:
1
depositumInfo
:
演出票
expressType
:
1
# 默认顺丰特快
depositumInfo
:
演出纸质票
# 开发环境配置
server
:
...
...
liquidnet-bus-config/liquidnet-config/liquidnet-service-platform-dev.yml
View file @
b9fe5d3a
...
...
@@ -19,5 +19,18 @@ liquidnet:
mongodb
:
sslEnabled
:
false
database
:
dev_ln_scene
shunfeng
:
url
:
${liquidnet.client.admin.shunfeng.url}
sk
:
${liquidnet.client.admin.shunfeng.sk}
appid
:
${liquidnet.client.admin.shunfeng.appid}
custid
:
${liquidnet.client.admin.shunfeng.custid}
jCompany
:
北京正在映画互联网有限公司
jContact
:
摩登天空票务部
jTel
:
4001680650
jProvince
:
北京
jCity
:
北京市
jAddress
:
朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType
:
1
# 默认顺丰特快
depositumInfo
:
演出纸质票
#以下为spring各环境个性配置
liquidnet-bus-config/liquidnet-config/liquidnet-service-platform-test.yml
0 → 100644
View file @
b9fe5d3a
liquidnet
:
system
:
updating
:
switch
:
false
info
:
port
:
9001
context
:
/platform
name
:
liquidnet-service-platform
logfile
:
path
:
/data/logs
name
:
service-platform
config
:
classpath:logback-spring.xml
file-max-size
:
200MB
level
:
info
rabbitmq
:
connection-timeout
:
5000
mysql
:
database-name
:
test_ln_scene
mongodb
:
sslEnabled
:
false
database
:
test_ln_scene
shunfeng
:
url
:
${liquidnet.client.admin.shunfeng.url}
sk
:
${liquidnet.client.admin.shunfeng.sk}
appid
:
${liquidnet.client.admin.shunfeng.appid}
custid
:
${liquidnet.client.admin.shunfeng.custid}
jCompany
:
北京正在映画互联网有限公司
jContact
:
摩登天空票务部
jTel
:
4001680650
jProvince
:
北京
jCity
:
北京市
jAddress
:
朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType
:
1
# 默认顺丰特快
depositumInfo
:
演出纸质票
#以下为spring各环境个性配置
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinOrderExpressFeeInfo.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
kylin
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
* <p>
* 订单快递运费
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinOrderExpressFeeInfo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Integer
mid
;
private
String
orderExpressFeeInfoId
;
private
String
orderExpressId
;
private
String
type
;
private
String
name
;
private
BigDecimal
value
;
/**
* 创建时间
*/
private
String
createdAt
;
/**
* 修改时间
*/
private
String
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinOrderExpressRoute.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
kylin
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
/**
* <p>
* 订单快递路由
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinOrderExpressRoute
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Integer
mid
;
private
String
orderExpressRouteId
;
private
String
orderExpressId
;
private
String
acceptAddress
;
private
String
acceptDate
;
private
String
acceptTime
;
private
String
acceptTotaltime
;
private
String
remark
;
private
String
opcode
;
/**
* 创建时间
*/
private
String
createdAt
;
/**
* 修改时间
*/
private
String
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinOrderExpressFeeInfoMapper.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinOrderExpressFeeInfo
;
/**
* <p>
* 订单快递运费信息 Mapper 接口 处理数据库
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
public
interface
KylinOrderExpressFeeInfoMapper
extends
BaseMapper
<
KylinOrderExpressFeeInfo
>
{
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinOrderExpressMapper.java
View file @
b9fe5d3a
...
...
@@ -9,7 +9,7 @@ import com.liquidnet.service.kylin.entity.KylinOrderExpress;
* </p>
*
* @author jiangxiulong
* @since 2021-0
5-01
* @since 2021-0
6-27
*/
public
interface
KylinOrderExpressMapper
extends
BaseMapper
<
KylinOrderExpress
>
{
...
...
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinOrderExpressRouteMapper.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinOrderExpressRoute
;
/**
* <p>
* 订单快递路由 Mapper 接口 处理数据库
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
public
interface
KylinOrderExpressRouteMapper
extends
BaseMapper
<
KylinOrderExpressRoute
>
{
}
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/docu/db_kylin_structure.sql
View file @
b9fe5d3a
...
...
@@ -756,10 +756,43 @@ CREATE TABLE `kylin_order_express`
`two_dimension_code`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'二维码'
,
`created_at`
timestamp
NULL
DEFAULT
NULL
,
`updated_at`
timestamp
NULL
DEFAULT
NULL
,
KEY
`
kylin_order_express_
order_express_id_index`
(
`order_express_id`
),
KEY
`order_express_id_index`
(
`order_express_id`
),
PRIMARY
KEY
(
`mid`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
utf8mb4
COLLATE
utf8mb4_unicode_ci
COMMENT
'订单快递表'
;
drop
TABLE
if
exists
`kylin_order_express_fee_info`
;
CREATE
TABLE
`kylin_order_express_fee_info`
(
`mid`
int
unsigned
NOT
NULL
AUTO_INCREMENT
,
`order_express_fee_info_id`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'order_express_fee_info_id'
,
`order_express_id`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'order_express_id'
,
`type`
varchar
(
2
)
NOT
NULL
DEFAULT
'0'
COMMENT
'费用类型'
,
`name`
varchar
(
200
)
NOT
NULL
DEFAULT
''
COMMENT
'费用名称'
,
`value`
decimal
(
11
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'金额'
,
`created_at`
timestamp
NULL
DEFAULT
NULL
,
`updated_at`
timestamp
NULL
DEFAULT
NULL
,
KEY
`order_express_fee_info_id_index`
(
`order_express_fee_info_id`
),
PRIMARY
KEY
(
`mid`
)
)
ENGINE
=
InnoDB
COMMENT
'订单快递费用信息表'
;
drop
TABLE
if
exists
`kylin_order_express_route`
;
CREATE
TABLE
`kylin_order_express_route`
(
`mid`
int
unsigned
NOT
NULL
AUTO_INCREMENT
,
`order_express_route_id`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'order_express_route_id'
,
`order_express_id`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'order_express_id'
,
`accept_address`
varchar
(
200
)
NOT
NULL
DEFAULT
'0'
COMMENT
'路由节点发生的城市'
,
`accept_date`
varchar
(
200
)
NOT
NULL
DEFAULT
''
COMMENT
'YYYY-MM-DD'
,
`accept_time`
varchar
(
200
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'HH24:MM:SS'
,
`accept_totaltime`
varchar
(
200
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'YYYY-MM-DD HH24:MM:SS'
,
`remark`
varchar
(
255
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'路由节点具体描述'
,
`opcode`
varchar
(
200
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'路由节点操作码'
,
`created_at`
timestamp
NULL
DEFAULT
NULL
,
`updated_at`
timestamp
NULL
DEFAULT
NULL
,
KEY
`order_express_route_id_index`
(
`order_express_route_id`
),
PRIMARY
KEY
(
`mid`
)
)
ENGINE
=
InnoDB
COMMENT
'订单快递路由表'
;
drop
TABLE
if
exists
`kylin_order_refund_pic`
;
CREATE
TABLE
`kylin_order_refund_pic`
(
...
...
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/config/
Kylin
WebMvcConfig.java
→
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/config/
Platform
WebMvcConfig.java
View file @
b9fe5d3a
...
...
@@ -7,13 +7,13 @@ import org.springframework.context.annotation.Configuration;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
@Configuration
public
class
Kylin
WebMvcConfig
extends
WebMvcConfig
{
@Autowired
GlobalAuthorityInterceptor
globalAuthorityInterceptor
;
@Override
protected
void
addInterceptors
(
InterceptorRegistry
registry
)
{
public
class
Platform
WebMvcConfig
extends
WebMvcConfig
{
//
@Autowired
//
GlobalAuthorityInterceptor globalAuthorityInterceptor;
//
//
@Override
//
protected void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(globalAuthorityInterceptor).addPathPatterns("/**");
// super.addInterceptors(registry);
}
//
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/express/shunfeng/PerformancesExpressCallbackController.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
platform
.
controller
.
express
.
shunfeng
;
import
com.liquidnet.service.platform.service.express.shunfeng.PerformancesExpressCallbackServiceImpl
;
import
io.swagger.annotations.Api
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
/**
* <p>
* 演出快递 顺丰推送
* </p>
*
* @author jiangxiulong
* @since 2021-06-29
*/
@Api
(
tags
=
"前端-shunfengBack"
)
@RestController
@RequestMapping
(
"performancesExpress"
)
public
class
PerformancesExpressCallbackController
{
@Autowired
private
PerformancesExpressCallbackServiceImpl
performancesExpressServiceImpl
;
/**
* 订单状态推送
*/
/**
* 路由推送
*/
/**
* 清单运费推送
*/
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/refund/OrderRefundCallbackController.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
platform
.
controller
.
refund
;
import
com.liquidnet.service.kylin.dto.param.RefundCallbackParam
;
import
com.liquidnet.service.platform.service.refund.OrderRefundsCallbackServiceImpl
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
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.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 退款回掉
* </p>
*
* @author jiangxiulong
* @since 2021-06-11 6:10 下午
*/
@Api
(
tags
=
"前端-退款回调"
)
@RestController
@RequestMapping
(
"refund"
)
public
class
OrderRefundCallbackController
{
@Autowired
private
OrderRefundsCallbackServiceImpl
orderRefundsCallbackServiceImpl
;
@PostMapping
(
"apply"
)
@ApiOperation
(
"超时退款"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"body"
,
dataType
=
"String"
,
name
=
"orderTicketsId"
,
value
=
"订单ID"
,
required
=
true
),
})
public
Boolean
refundApply
(
@RequestParam
()
String
orderTicketsId
)
{
try
{
Boolean
res
=
orderRefundsCallbackServiceImpl
.
refundApply
(
orderTicketsId
);
if
(
res
)
{
return
true
;
}
else
{
return
false
;
}
}
catch
(
Exception
e
)
{
return
false
;
}
}
@PostMapping
(
"callback"
)
@ApiOperation
(
"退款回调"
)
public
String
refundCallback
(
RefundCallbackParam
refundCallbackParam
)
{
String
result
=
orderRefundsCallbackServiceImpl
.
refundCallback
(
refundCallbackParam
);
return
result
;
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/express/shunfeng/PerformancesExpressCallbackServiceImpl.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
platform
.
service
.
express
.
shunfeng
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.kylin.constant.KylinTableStatusConst
;
import
com.liquidnet.service.kylin.dto.param.PerformanceExpressSearchAdminParam
;
import
com.liquidnet.service.kylin.entity.KylinOrderExpress
;
import
com.liquidnet.service.kylin.entity.KylinOrderTickets
;
import
com.liquidnet.service.kylin.mapper.*
;
import
com.liquidnet.service.kylin.service.IKylinOrderExpress
;
import
com.liquidnet.service.platform.utils.ShunfengSignUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.List
;
/**
* <p>
* 演出 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-05-05
*/
@Service
@Slf4j
public
class
PerformancesExpressCallbackServiceImpl
extends
ServiceImpl
<
KylinOrderExpressMapper
,
KylinOrderExpress
>
implements
IKylinOrderExpress
{
@Value
(
"${liquidnet.shunfeng.custid}"
)
private
String
custid
;
@Value
(
"${liquidnet.shunfeng.jCompany}"
)
private
String
jCompany
;
@Value
(
"${liquidnet.shunfeng.jContact}"
)
private
String
jContact
;
@Value
(
"${liquidnet.shunfeng.jTel}"
)
private
String
jTel
;
@Value
(
"${liquidnet.shunfeng.jProvince}"
)
private
String
jProvince
;
@Value
(
"${liquidnet.shunfeng.jCity}"
)
private
String
jCity
;
@Value
(
"${liquidnet.shunfeng.jAddress}"
)
private
String
jAddress
;
@Value
(
"${liquidnet.shunfeng.expressType}"
)
private
Integer
expressType
;
@Value
(
"${liquidnet.shunfeng.depositumInfo}"
)
private
String
depositumInfo
;
@Autowired
MongoTemplate
mongoTemplate
;
@Autowired
private
ShunfengSignUtils
shunfengSignUtils
;
@Autowired
private
KylinPerformancesMapper
performancesMapper
;
@Autowired
private
KylinOrderTicketsMapper
kylinOrderTicketsMapper
;
@Autowired
private
KylinOrderExpressMapper
kylinOrderExpressMapper
;
@Autowired
private
KylinOrderExpressFeeInfoMapper
kylinOrderExpressFeeInfoMapper
;
public
ResponseDto
getFreight
(
PerformanceExpressSearchAdminParam
performanceExpressSearchAdminParam
)
{
List
<
String
>
ids
=
performanceExpressSearchAdminParam
.
getIds
();
Integer
[]
expressStatus
=
{
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS1
,
KylinTableStatusConst
.
ORDER_EXPRESS_STATUS3
};
for
(
String
orderTicketsId
:
ids
)
{
KylinOrderExpress
orderExpressInfo
=
kylinOrderExpressMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderExpress
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
.
notIn
(
"express_status"
,
expressStatus
)
);
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
if
(
null
!=
orderExpressInfo
)
{
HashMap
<
String
,
Object
>
hBody
=
new
HashMap
<>();
hBody
.
put
(
"jProvince"
,
jProvince
);
hBody
.
put
(
"jCity"
,
jCity
);
hBody
.
put
(
"jAddress"
,
jAddress
);
hBody
.
put
(
"dProvince"
,
"北京市"
);
hBody
.
put
(
"dCity"
,
"北京城区"
);
hBody
.
put
(
"dAddress"
,
orderInfo
.
getExpressAddress
());
hBody
.
put
(
"expressType"
,
expressType
);
// hBody.put("parcelWeighs", 2.00);
// hBody.put("volume", "10,10,20");
// 生成签名并请求
String
result
=
shunfengSignUtils
.
generateSignatureAndRequest
(
hBody
,
"/public/order/v1/getFreight"
);
HashMap
hashMap
=
JsonUtils
.
fromJson
(
result
,
HashMap
.
class
);
System
.
out
.
println
(
result
);
if
(
hashMap
.
get
(
"succ"
).
equals
(
"fail"
))
{
String
msg
=
(
String
)
hashMap
.
get
(
"msg"
);
return
ResponseDto
.
failure
(
msg
);
}
else
{
/*HashMap resultResult = (HashMap) hashMap.get("result");
List<HashMap> feeList = (List) resultResult.get("feeList");
if (!CollectionUtil.isEmpty(feeList)) {
for (HashMap feeInfo : feeList) {
KylinOrderExpressFeeInfo kylinOrderExpressFeeInfo = new KylinOrderExpressFeeInfo();
String orderExpressFeeInfoId = IDGenerator.nextSnowId();
kylinOrderExpressFeeInfo.setOrderExpressFeeInfoId(orderExpressFeeInfoId);
kylinOrderExpressFeeInfo.setOrderExpressId(orderExpressInfo.getOrderExpressId());
kylinOrderExpressFeeInfo.setType((String) feeInfo.get("type"));
kylinOrderExpressFeeInfo.setName((String) feeInfo.get("name"));
kylinOrderExpressFeeInfo.setValue(new BigDecimal(feeInfo.get("value").toString()));
kylinOrderExpressFeeInfo.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressFeeInfoMapper.insert(kylinOrderExpressFeeInfo);
}
}*/
}
}
}
return
ResponseDto
.
success
();
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/refund/KylinRefundsStatusServiceImpl.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
platform
.
service
.
refund
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.liquidnet.common.mq.constant.MQConst
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.UserPathDto
;
import
com.liquidnet.service.kylin.constant.KylinTableStatusConst
;
import
com.liquidnet.service.kylin.dto.param.RefundCallbackParam
;
import
com.liquidnet.service.kylin.dto.vo.mongo.*
;
import
com.liquidnet.service.kylin.entity.*
;
import
com.liquidnet.service.kylin.mapper.*
;
import
com.liquidnet.service.platform.utils.DataUtils
;
import
com.liquidnet.service.platform.utils.MongoVoUtils
;
import
com.mongodb.BasicDBObject
;
import
com.mongodb.client.model.FindOneAndUpdateOptions
;
import
com.mongodb.client.model.ReturnDocument
;
import
com.mongodb.client.result.UpdateResult
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.bson.Document
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.data.mongodb.core.convert.MongoConverter
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* <p>
* 订单退款表 服务实现类 处理数据 退款后状态的变化
* </p>
*
* @author jiaangxiulong
* @since 2021-05-26
*/
@Slf4j
@Service
public
class
KylinRefundsStatusServiceImpl
{
@Autowired
private
KylinOrderTicketsMapper
kylinOrderTicketsMapper
;
@Autowired
private
KylinOrderTicketStatusMapper
kylinOrderTicketStatusMapper
;
@Autowired
private
KylinOrderRefundsMapper
kylinOrderRefundsMapper
;
@Autowired
private
KylinOrderTicketEntitiesMapper
kylinOrderTicketEntitiesMapper
;
@Autowired
private
KylinOrderRefundsEntitiesMapper
kylinOrderRefundsEntitiesMapper
;
@Autowired
private
KylinOrderTicketRelationsMapper
kylinOrderTicketRelationsMapper
;
@Autowired
MongoTemplate
mongoTemplate
;
@Autowired
private
MongoConverter
mongoConverter
;
@Autowired
private
DataUtils
dataUtils
;
@Autowired
private
MongoVoUtils
mongoVoUtils
;
@Autowired
private
RabbitTemplate
rabbitTemplate
;
public
boolean
orderTicketRefunded
(
RefundCallbackParam
refundCallbackParam
,
KylinOrderRefunds
refundInfo
)
{
List
<
KylinOrderRefundEntities
>
refundEntities
=
kylinOrderRefundsEntitiesMapper
.
selectList
(
new
QueryWrapper
<
KylinOrderRefundEntities
>().
eq
(
"order_refunds_id"
,
refundInfo
.
getOrderRefundsId
())
);
List
<
String
>
orderTicketEntitiesIdsArr
=
refundEntities
.
stream
().
map
(
KylinOrderTicketEntities
->
KylinOrderTicketEntities
.
getOrderTicketEntitiesId
()).
collect
(
Collectors
.
toList
());
String
orderTicketsId
=
refundInfo
.
getOrderTicketsId
();
KylinOrderTicketRelations
orderRelations
=
kylinOrderTicketRelationsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTicketRelations
>().
eq
(
"order_id"
,
orderTicketsId
)
);
// 更新数据
// 订单状态表
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
KylinOrderTicketStatus
orderStatusTable
=
new
KylinOrderTicketStatus
();
int
newStatus
=
0
;
if
(
refundCallbackParam
.
getRefund_price
()
+
orderInfo
.
getPriceRefund
().
doubleValue
()
==
orderInfo
.
getPriceActual
().
doubleValue
())
{
newStatus
=
KylinTableStatusConst
.
ORDER_STATUS4
;
}
else
{
newStatus
=
KylinTableStatusConst
.
ORDER_STATUS6
;
}
orderStatusTable
.
setStatus
(
newStatus
);
orderStatusTable
.
setUpdatedAt
(
LocalDateTime
.
now
());
kylinOrderTicketStatusMapper
.
update
(
orderStatusTable
,
new
UpdateWrapper
<
KylinOrderTicketStatus
>()
.
eq
(
"order_id"
,
orderTicketsId
)
);
// 入场人
double
priceActual
=
orderInfo
.
getPriceActual
().
doubleValue
();
double
priceExpress
=
orderInfo
.
getPriceExpress
().
doubleValue
();
int
allEntitiesCount
=
kylinOrderTicketEntitiesMapper
.
selectCount
(
// 总入场人数量 排出未付款的 用来计算单入场人的价格
new
QueryWrapper
<
KylinOrderTicketEntities
>()
.
eq
(
"order_id"
,
orderTicketsId
)
.
ne
(
"is_payment"
,
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT0
)
);
double
onePrice
=
(
priceActual
-
priceExpress
)
/
allEntitiesCount
;
//单价
int
refundNumber
=
0
;
for
(
String
entitiesId
:
orderTicketEntitiesIdsArr
)
{
KylinOrderTicketEntities
EntitiesInfo
=
kylinOrderTicketEntitiesMapper
.
selectOne
(
//已退完成的
new
QueryWrapper
<
KylinOrderTicketEntities
>()
.
eq
(
"order_ticket_entities_id"
,
entitiesId
)
);
BigDecimal
refundedPrice
=
EntitiesInfo
.
getRefundPrice
();
KylinOrderRefundEntities
refundEntitiesInfo
=
kylinOrderRefundsEntitiesMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderRefundEntities
>()
.
eq
(
"order_refunds_id"
,
refundInfo
.
getOrderRefundsId
())
.
eq
(
"order_ticket_entities_id"
,
entitiesId
)
);
KylinOrderTicketEntities
entitiesTable
=
new
KylinOrderTicketEntities
();
double
priceNew
=
refundEntitiesInfo
.
getRefundPrice
().
doubleValue
()
+
refundedPrice
.
doubleValue
();
int
isPayment
=
0
;
if
(
priceNew
==
onePrice
)
{
isPayment
=
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT3
;
refundNumber
++;
}
else
{
isPayment
=
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT4
;
}
entitiesTable
.
setIsPayment
(
isPayment
);
entitiesTable
.
setUpdatedAt
(
LocalDateTime
.
now
());
entitiesTable
.
setRefundPrice
(
BigDecimal
.
valueOf
(
priceNew
));
Integer
[]
entitiesTableIsPayment
=
{
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT2
,
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT4
};
kylinOrderTicketEntitiesMapper
.
update
(
entitiesTable
,
new
UpdateWrapper
<
KylinOrderTicketEntities
>()
.
eq
(
"order_ticket_entities_id"
,
entitiesId
)
.
in
(
"is_payment"
,
entitiesTableIsPayment
)
);
HashMap
<
String
,
Object
>
EntitiesVo
=
new
HashMap
<>();
EntitiesVo
.
put
(
"updatedAt"
,
DateUtil
.
getNowTime
());
EntitiesVo
.
put
(
"refundPrice"
,
BigDecimal
.
valueOf
(
priceNew
));
EntitiesVo
.
put
(
"isPayment"
,
isPayment
);
BasicDBObject
EntitiesVov
=
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
EntitiesVo
));
UpdateResult
updateResult
=
mongoTemplate
.
getCollection
(
KylinOrderTicketEntitiesVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketEntitiesId"
).
is
(
entitiesId
)).
getQueryObject
(),
EntitiesVov
);
dataUtils
.
delOrderTicketEntitiesRedis
(
entitiesId
);
}
// 订单表
double
price
=
orderInfo
.
getPriceRefund
().
doubleValue
()
+
refundCallbackParam
.
getRefund_price
();
Integer
num
=
orderInfo
.
getRefundNumber
()
+
refundNumber
;
KylinOrderTickets
update
=
new
KylinOrderTickets
();
update
.
setRefundNumber
(
num
);
update
.
setPriceRefund
(
BigDecimal
.
valueOf
(
price
));
update
.
setUpdatedAt
(
LocalDateTime
.
now
());
kylinOrderTicketsMapper
.
update
(
update
,
new
UpdateWrapper
<
KylinOrderTickets
>()
.
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
HashMap
<
String
,
Object
>
orderVo
=
new
HashMap
<>();
orderVo
.
put
(
"updatedAt"
,
DateUtil
.
getNowTime
());
orderVo
.
put
(
"priceRefund"
,
BigDecimal
.
valueOf
(
price
));
orderVo
.
put
(
"status"
,
newStatus
);
orderVo
.
put
(
"refundNumber"
,
num
);
BasicDBObject
orderVov
=
new
BasicDBObject
(
"$set"
,
mongoConverter
.
convertToMongoType
(
orderVo
));
UpdateResult
orderUpdateResult
=
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTicketsId
)).
getQueryObject
(),
orderVov
);
dataUtils
.
delOrderTicketRedis
(
orderTicketsId
);
mongoVoUtils
.
resetOrderListVo
(
orderInfo
.
getUserId
(),
2
,
orderTicketsId
,
null
);
// 退款单完成
KylinOrderRefunds
kylinOrderRefunds
=
new
KylinOrderRefunds
();
kylinOrderRefunds
.
setStatus
(
KylinTableStatusConst
.
ORDER_REFUND_STATUS_REFUNDED
);
kylinOrderRefunds
.
setRefundCode
(
refundCallbackParam
.
getRefund_code
());
kylinOrderRefunds
.
setRefundType
(
refundCallbackParam
.
getRefund_type
());
kylinOrderRefunds
.
setRefundId
(
refundCallbackParam
.
getRefund_id
());
kylinOrderRefunds
.
setRefundAt
(
refundCallbackParam
.
getRefund_at
());
kylinOrderRefunds
.
setUpdatedAt
(
LocalDateTime
.
now
());
kylinOrderRefundsMapper
.
update
(
kylinOrderRefunds
,
new
UpdateWrapper
<
KylinOrderRefunds
>().
in
(
"order_refunds_id"
,
refundInfo
.
getOrderRefundsId
())
);
if
(
refundInfo
.
getType
()
==
KylinTableStatusConst
.
ORDER_REFUND_TYPE_APPLY
)
{
// 退还库存
for
(
String
entitiesId
:
orderTicketEntitiesIdsArr
)
{
KylinOrderTicketEntities
entitiesInfo
=
kylinOrderTicketEntitiesMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTicketEntities
>().
eq
(
"order_ticket_entities_id"
,
entitiesId
)
);
if
(
entitiesInfo
.
getIsPayment
()
==
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT3
)
{
dataUtils
.
changeSurplusGeneral
(
entitiesInfo
.
getTicketId
(),
1
);
log
.
info
(
UserPathDto
.
setData
(
"changeBuyInfo"
,
"UserId="
+
orderInfo
.
getUserId
()
+
"idCard="
+
entitiesInfo
.
getEnterIdCode
()
+
" PerformanceId="
+
orderRelations
.
getPerformanceId
()
+
" TicketId="
+
entitiesInfo
.
getTicketId
(),
"info"
));
dataUtils
.
changeBuyInfo
(
orderInfo
.
getUserId
(),
entitiesInfo
.
getEnterIdCode
(),
orderRelations
.
getPerformanceId
(),
entitiesInfo
.
getTicketId
(),
-
1
);
}
}
}
return
true
;
}
public
Boolean
orderTicketRefunding
(
KylinOrderTickets
orderInfo
,
String
orderTicketsId
,
double
RefundPriceExpress
,
List
<
String
>
ticketEntityIds
,
List
<
Double
>
entitiesPrice
)
{
if
(
CollectionUtil
.
isEmpty
(
ticketEntityIds
))
{
return
false
;
}
// 基础数据
String
authId
=
""
;
String
authName
=
"system_overtime_order_refund"
;
String
reason
=
"订单支付超时自动退款"
;
// 本次退款票总金额
double
entitiesPriceSum
=
entitiesPrice
.
stream
().
mapToDouble
(
Double:
:
doubleValue
).
sum
();
// TODO: 2021/5/27 事物 and 部分退款
// 更新数据
// 订单状态表 和 缓存
KylinOrderTicketStatus
orderStatusTable
=
new
KylinOrderTicketStatus
();
orderStatusTable
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS3
);
kylinOrderTicketStatusMapper
.
update
(
orderStatusTable
,
new
UpdateWrapper
<
KylinOrderTicketStatus
>()
.
eq
(
"order_id"
,
orderTicketsId
));
KylinOrderTicketVo
kylinOrderTicketVo
=
new
KylinOrderTicketVo
();
kylinOrderTicketVo
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS3
);
BasicDBObject
orderObject
=
new
BasicDBObject
(
"$set"
,
JSON
.
parse
(
JsonUtils
.
toJson
(
kylinOrderTicketVo
)));
Document
orderDoc
=
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
findOneAndUpdate
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTicketsId
)).
getQueryObject
(),
orderObject
,
new
FindOneAndUpdateOptions
().
returnDocument
(
ReturnDocument
.
AFTER
)
);
dataUtils
.
delOrderTicketRedis
(
orderTicketsId
);
mongoVoUtils
.
resetOrderListVo
(
orderInfo
.
getUserId
(),
2
,
orderTicketsId
,
null
);
// 订单入场人表 和 缓存
for
(
String
v
:
ticketEntityIds
)
{
KylinOrderTicketEntities
entitiesTable
=
new
KylinOrderTicketEntities
();
entitiesTable
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT2
);
kylinOrderTicketEntitiesMapper
.
update
(
entitiesTable
,
new
UpdateWrapper
<
KylinOrderTicketEntities
>()
.
eq
(
"order_ticket_entities_id"
,
v
));
KylinOrderTicketEntitiesVo
kylinOrderTicketEntitiesVo
=
new
KylinOrderTicketEntitiesVo
();
kylinOrderTicketEntitiesVo
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT2
);
BasicDBObject
entitiesObject
=
new
BasicDBObject
(
"$set"
,
JSON
.
parse
(
JsonUtils
.
toJson
(
kylinOrderTicketEntitiesVo
)));
Document
entitiesDoc
=
mongoTemplate
.
getCollection
(
KylinOrderTicketEntitiesVo
.
class
.
getSimpleName
()).
findOneAndUpdate
(
Query
.
query
(
Criteria
.
where
(
"orderTicketEntitiesId"
).
is
(
v
)).
getQueryObject
(),
entitiesObject
,
new
FindOneAndUpdateOptions
().
returnDocument
(
ReturnDocument
.
AFTER
)
);
dataUtils
.
delOrderTicketEntitiesRedis
(
v
);
}
// 退款明细
KylinOrderRefunds
kylinOrderRefunds
=
new
KylinOrderRefunds
();
String
orderRefundsId
=
IDGenerator
.
nextSnowId
();
kylinOrderRefunds
.
setOrderRefundsId
(
orderRefundsId
);
kylinOrderRefunds
.
setOrderTicketsId
(
orderTicketsId
);
Integer
refundCount
=
kylinOrderRefundsMapper
.
selectCount
(
new
QueryWrapper
<
KylinOrderRefunds
>()
.
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
String
orderRefundCode
=
orderInfo
.
getOrderCode
();
String
codeNum
=
StringUtils
.
leftPad
(
String
.
valueOf
(
refundCount
),
3
,
"0"
);
kylinOrderRefunds
.
setOrderRefundCode
(
orderRefundCode
.
concat
(
codeNum
));
kylinOrderRefunds
.
setPrice
(
BigDecimal
.
valueOf
(
entitiesPriceSum
));
kylinOrderRefunds
.
setPriceExpress
(
BigDecimal
.
valueOf
(
RefundPriceExpress
));
kylinOrderRefunds
.
setStatus
(
KylinTableStatusConst
.
ORDER_REFUND_STATUS_APPLY
);
kylinOrderRefunds
.
setType
(
KylinTableStatusConst
.
ORDER_REFUND_TYPE_APPLY
);
kylinOrderRefunds
.
setApplicantId
(
authId
);
kylinOrderRefunds
.
setApplicantName
(
authName
);
kylinOrderRefunds
.
setApplicantAt
(
LocalDateTime
.
now
());
kylinOrderRefunds
.
setType
(
1
);
kylinOrderRefunds
.
setReason
(
reason
);
if
(
RefundPriceExpress
>
0
&&
entitiesPriceSum
>
0
)
{
kylinOrderRefunds
.
setRefundCate
(
KylinTableStatusConst
.
ORDER_REFUND_CATE3
);
}
else
if
(
RefundPriceExpress
>
0
)
{
kylinOrderRefunds
.
setRefundCate
(
KylinTableStatusConst
.
ORDER_REFUND_CATE2
);
}
else
if
(
entitiesPriceSum
>
0
)
{
kylinOrderRefunds
.
setRefundCate
(
KylinTableStatusConst
.
ORDER_REFUND_CATE1
);
}
kylinOrderRefunds
.
setCreatedAt
(
LocalDateTime
.
now
());
int
rows
=
kylinOrderRefundsMapper
.
insert
(
kylinOrderRefunds
);
// 退款入场人表
KylinOrderRefundEntities
kylinOrderRefundEntities
=
new
KylinOrderRefundEntities
();
for
(
int
i
=
0
;
i
<=
ticketEntityIds
.
size
()
-
1
;
i
++)
{
String
orderRefundsEntitiesId
=
IDGenerator
.
nextSnowId
();
kylinOrderRefundEntities
.
setOrderRefundsEntitiesId
(
orderRefundsEntitiesId
);
kylinOrderRefundEntities
.
setOrderRefundsId
(
orderRefundsId
);
kylinOrderRefundEntities
.
setRefundPrice
(
BigDecimal
.
valueOf
(
entitiesPrice
.
get
(
i
)));
kylinOrderRefundEntities
.
setOrderTicketEntitiesId
(
ticketEntityIds
.
get
(
i
));
kylinOrderRefundEntities
.
setCreatedAt
(
LocalDateTime
.
now
());
int
rowsR
=
kylinOrderRefundsEntitiesMapper
.
insert
(
kylinOrderRefundEntities
);
}
return
true
;
}
public
Boolean
userOrderTicketRefunding
(
KylinOrderTicketVo
orderInfo
,
double
refundPrice
,
String
orderEntitiesId
,
String
reason
,
String
picList
,
String
uid
,
String
username
,
int
refundCount
)
{
try
{
LocalDateTime
time
=
LocalDateTime
.
now
();
String
strTime
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
time
);
// 订单状态表 和 缓存
KylinOrderTicketStatus
orderStatusTable
=
new
KylinOrderTicketStatus
();
orderStatusTable
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS3
);
orderStatusTable
.
setUpdatedAt
(
time
);
KylinOrderTicketVo
kylinOrderTicketVo
=
new
KylinOrderTicketVo
();
kylinOrderTicketVo
.
setStatus
(
KylinTableStatusConst
.
ORDER_STATUS3
);
kylinOrderTicketVo
.
setUpdatedAt
(
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
format
(
time
));
BasicDBObject
orderObject
=
new
BasicDBObject
(
"$set"
,
JSON
.
parse
(
JsonUtils
.
toJson
(
kylinOrderTicketVo
)));
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderInfo
.
getOrderTicketsId
())).
getQueryObject
(),
orderObject
);
dataUtils
.
delOrderTicketRedis
(
orderInfo
.
getOrderTicketsId
());
mongoVoUtils
.
resetOrderListVo
(
orderInfo
.
getUserId
(),
2
,
orderInfo
.
getOrderTicketsId
(),
null
);
// 订单入场人表 和 缓存
KylinOrderTicketEntities
entitiesTable
=
new
KylinOrderTicketEntities
();
entitiesTable
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT2
);
entitiesTable
.
setUpdatedAt
(
time
);
KylinOrderTicketEntitiesVo
kylinOrderTicketEntitiesVo
=
new
KylinOrderTicketEntitiesVo
();
kylinOrderTicketEntitiesVo
.
setIsPayment
(
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT2
);
kylinOrderTicketEntitiesVo
.
setUpdatedAt
(
strTime
);
BasicDBObject
entitiesObject
=
new
BasicDBObject
(
"$set"
,
JSON
.
parse
(
JsonUtils
.
toJson
(
kylinOrderTicketEntitiesVo
)));
mongoTemplate
.
getCollection
(
KylinOrderTicketEntitiesVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketEntitiesId"
).
is
(
orderEntitiesId
)).
getQueryObject
(),
entitiesObject
);
dataUtils
.
delOrderTicketEntitiesRedis
(
orderEntitiesId
);
// 退款明细
KylinOrderRefunds
kylinOrderRefunds
=
new
KylinOrderRefunds
();
String
orderRefundsId
=
IDGenerator
.
nextSnowId
();
kylinOrderRefunds
.
setOrderRefundsId
(
orderRefundsId
);
kylinOrderRefunds
.
setOrderTicketsId
(
orderInfo
.
getOrderTicketsId
());
String
orderRefundCode
=
orderInfo
.
getOrderCode
();
String
codeNum
=
StringUtils
.
leftPad
(
String
.
valueOf
(
refundCount
),
3
,
"0"
);
kylinOrderRefunds
.
setOrderRefundCode
(
orderRefundCode
.
concat
(
codeNum
));
kylinOrderRefunds
.
setPrice
(
BigDecimal
.
valueOf
(
refundPrice
));
kylinOrderRefunds
.
setPriceExpress
(
orderInfo
.
getPriceExpress
());
kylinOrderRefunds
.
setStatus
(
KylinTableStatusConst
.
ORDER_REFUND_STATUS_APPLY
);
kylinOrderRefunds
.
setType
(
KylinTableStatusConst
.
ORDER_REFUND_TYPE_APPLY
);
kylinOrderRefunds
.
setApplicantId
(
uid
);
kylinOrderRefunds
.
setApplicantName
(
username
);
kylinOrderRefunds
.
setApplicantAt
(
time
);
kylinOrderRefunds
.
setReason
(
reason
);
if
(
orderInfo
.
getPriceExpress
().
doubleValue
()
>
0
&&
refundPrice
>
0
)
{
kylinOrderRefunds
.
setRefundCate
(
KylinTableStatusConst
.
ORDER_REFUND_CATE3
);
}
else
if
(
orderInfo
.
getPriceExpress
().
doubleValue
()
>
0
)
{
kylinOrderRefunds
.
setRefundCate
(
KylinTableStatusConst
.
ORDER_REFUND_CATE2
);
}
else
if
(
refundPrice
>
0
)
{
kylinOrderRefunds
.
setRefundCate
(
KylinTableStatusConst
.
ORDER_REFUND_CATE1
);
}
kylinOrderRefunds
.
setCreatedAt
(
time
);
KylinOrderRefundsVoBase
orderRefundsVo
=
new
KylinOrderRefundsVoBase
();
BeanUtils
.
copyProperties
(
kylinOrderRefunds
,
orderRefundsVo
);
orderRefundsVo
.
setCreatedAt
(
strTime
);
orderRefundsVo
.
setApplicantAt
(
strTime
);
mongoTemplate
.
insert
(
orderRefundsVo
,
KylinOrderRefundsVoBase
.
class
.
getSimpleName
());
// 退款入场人表
KylinOrderRefundEntities
kylinOrderRefundEntities
=
new
KylinOrderRefundEntities
();
String
orderRefundsEntitiesId
=
IDGenerator
.
nextSnowId
();
kylinOrderRefundEntities
.
setOrderRefundsEntitiesId
(
orderRefundsEntitiesId
);
kylinOrderRefundEntities
.
setOrderRefundsId
(
orderRefundsId
);
kylinOrderRefundEntities
.
setRefundPrice
(
BigDecimal
.
valueOf
(
refundPrice
));
kylinOrderRefundEntities
.
setOrderTicketEntitiesId
(
orderEntitiesId
);
kylinOrderRefundEntities
.
setCreatedAt
(
time
);
KylinOrderRefundEntitiesVo
orderRefundEntitiesVo
=
new
KylinOrderRefundEntitiesVo
();
BeanUtils
.
copyProperties
(
kylinOrderRefundEntities
,
orderRefundEntitiesVo
);
orderRefundEntitiesVo
.
setCreatedAt
(
strTime
);
mongoTemplate
.
insert
(
orderRefundEntitiesVo
,
KylinOrderRefundEntitiesVo
.
class
.
getSimpleName
());
//退款图片
KylinOrderRefundPic
orderRefundPic
=
new
KylinOrderRefundPic
();
orderRefundPic
.
setRefundPicId
(
IDGenerator
.
nextSnowId
());
orderRefundPic
.
setOrderRefundsId
(
kylinOrderRefunds
.
getOrderRefundsId
());
orderRefundPic
.
setPicUrl
(
picList
);
orderRefundPic
.
setCreatedAt
(
time
);
KylinOrderRefundPicVo
orderRefundPicVo
=
new
KylinOrderRefundPicVo
();
BeanUtils
.
copyProperties
(
orderRefundPic
,
orderRefundPicVo
);
orderRefundPicVo
.
setCreatedAt
(
strTime
);
mongoTemplate
.
insert
(
orderRefundPicVo
,
KylinOrderRefundPicVo
.
class
.
getSimpleName
());
dataUtils
.
delOrderRefundVoByOrderId
(
orderInfo
.
getOrderTicketsId
());
//MQ
LinkedList
<
String
>
sqls
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataA
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataB
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataC
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataD
=
new
LinkedList
<>();
LinkedList
<
Object
[]>
sqlsDataE
=
new
LinkedList
<>();
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_status.refund"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_ticket_entities.refund"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_refund.refund"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_refund_entities.refund"
));
sqls
.
add
(
SqlMapping
.
get
(
"kylin_order_refund_pic.refund"
));
sqlsDataA
.
add
(
new
Object
[]{
orderStatusTable
.
getStatus
(),
orderStatusTable
.
getUpdatedAt
(),
orderInfo
.
getOrderTicketsId
(),
orderInfo
.
getChangeDate
(),
orderInfo
.
getChangeDate
()
});
sqlsDataB
.
add
(
new
Object
[]{
entitiesTable
.
getIsPayment
(),
entitiesTable
.
getUpdatedAt
(),
orderEntitiesId
,
orderInfo
.
getChangeDate
(),
orderInfo
.
getChangeDate
()
});
sqlsDataC
.
add
(
new
Object
[]{
kylinOrderRefunds
.
getOrderRefundsId
(),
kylinOrderRefunds
.
getOrderTicketsId
(),
kylinOrderRefunds
.
getOrderRefundCode
(),
kylinOrderRefunds
.
getPrice
(),
kylinOrderRefunds
.
getPriceExpress
(),
kylinOrderRefunds
.
getStatus
(),
kylinOrderRefunds
.
getType
(),
kylinOrderRefunds
.
getApplicantId
(),
kylinOrderRefunds
.
getApplicantName
(),
kylinOrderRefunds
.
getApplicantAt
(),
kylinOrderRefunds
.
getReason
(),
kylinOrderRefunds
.
getRefundCate
(),
kylinOrderRefunds
.
getCreatedAt
()
});
sqlsDataD
.
add
(
new
Object
[]{
kylinOrderRefundEntities
.
getOrderRefundsEntitiesId
(),
kylinOrderRefundEntities
.
getOrderRefundsId
(),
kylinOrderRefundEntities
.
getRefundPrice
(),
kylinOrderRefundEntities
.
getOrderTicketEntitiesId
(),
kylinOrderRefundEntities
.
getCreatedAt
()
});
sqlsDataE
.
add
(
new
Object
[]{
orderRefundPic
.
getOrderRefundsId
(),
orderRefundPic
.
getOrderRefundsId
(),
orderRefundPic
.
getPicUrl
(),
orderRefundPic
.
getCreatedAt
()
});
//TODO 生成新QUERY
rabbitTemplate
.
convertAndSend
(
MQConst
.
EXCHANGES_LIQUIDNET_SQL_ORDER_REFUND
,
MQConst
.
ROUTING_KEY_SQL_ORDER_REFUND
,
SqlMapping
.
gets
(
sqls
,
sqlsDataA
,
sqlsDataB
,
sqlsDataC
,
sqlsDataD
,
sqlsDataE
));
return
true
;
}
catch
(
Exception
e
){
e
.
printStackTrace
();
return
false
;
}
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/refund/OrderRefundsCallbackServiceImpl.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
platform
.
service
.
refund
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.service.kylin.constant.KylinTableStatusConst
;
import
com.liquidnet.service.kylin.dao.KylinOrderTicketEntitiesDao
;
import
com.liquidnet.service.kylin.dto.param.RefundCallbackParam
;
import
com.liquidnet.service.kylin.entity.KylinOrderRefunds
;
import
com.liquidnet.service.kylin.entity.KylinOrderTicketEntities
;
import
com.liquidnet.service.kylin.entity.KylinOrderTicketRelations
;
import
com.liquidnet.service.kylin.entity.KylinOrderTickets
;
import
com.liquidnet.service.kylin.mapper.*
;
import
com.liquidnet.service.kylin.service.IKylinOrderRefundsService
;
import
com.liquidnet.service.platform.utils.DataUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.MongoTemplate
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* <p>
* 订单退款表 服务实现类 处理逻辑判断
* </p>
*
* @author jiangxiulong
* @since 2021-05-26
*/
@Slf4j
@Service
public
class
OrderRefundsCallbackServiceImpl
extends
ServiceImpl
<
KylinOrderRefundsMapper
,
KylinOrderRefunds
>
implements
IKylinOrderRefundsService
{
@Autowired
private
KylinRefundsStatusServiceImpl
kylinRefundsStatusServiceImpl
;
@Autowired
private
KylinOrderRefundsMapper
kylinOrderRefundsMapper
;
@Autowired
private
KylinOrderTicketsMapper
kylinOrderTicketsMapper
;
@Autowired
private
KylinOrderTicketEntitiesMapper
kylinOrderTicketEntitiesMapper
;
@Autowired
private
KylinOrderTicketRelationsMapper
kylinOrderTicketRelationsMapper
;
@Autowired
MongoTemplate
mongoTemplate
;
@Autowired
private
DataUtils
dataUtils
;
public
String
refundCallback
(
RefundCallbackParam
refundCallbackParam
)
{
KylinOrderRefunds
refundInfo
=
kylinOrderRefundsMapper
.
selectOne
(
new
UpdateWrapper
<
KylinOrderRefunds
>()
.
eq
(
"order_refund_code"
,
refundCallbackParam
.
getOrder_refund_code
())
);
if
(
refundInfo
==
null
)
{
log
.
info
(
"Failed:{}.RefundController refundCallback: 退款订单查询失败,编号{}"
,
"KylinOrderRefundsServiceImplRefundCallback"
,
refundCallbackParam
.
getOrder_refund_code
());
return
"fail"
;
}
if
(
refundInfo
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_REFUND_STATUS_CANCEL
)
{
log
.
info
(
"Failed:{}.RefundController refundCallback: 退款订单已取消,编号{}"
,
"KylinOrderRefundsServiceImplRefundCallback"
,
refundCallbackParam
.
getOrder_refund_code
());
return
"fail"
;
}
if
(
refundInfo
.
getStatus
()
==
KylinTableStatusConst
.
ORDER_REFUND_STATUS_REFUNDED
)
{
log
.
info
(
"Failed:{}.RefundController refundCallback: 退款订单已退款,编号{}"
,
"KylinOrderRefundsServiceImplRefundCallback"
,
refundCallbackParam
.
getOrder_refund_code
());
return
"success"
;
}
Integer
status
=
refundCallbackParam
.
getStatus
();
if
(
1
==
status
)
{
// 退款成功
boolean
res
=
kylinRefundsStatusServiceImpl
.
orderTicketRefunded
(
refundCallbackParam
,
refundInfo
);
if
(
res
)
{
return
"success"
;
}
else
{
return
"fail"
;
}
}
if
(
0
==
status
)
{
// 退款失败
KylinOrderRefunds
kylinOrderRefunds
=
new
KylinOrderRefunds
();
kylinOrderRefunds
.
setStatus
(
KylinTableStatusConst
.
ORDER_REFUND_STATUS_ERROR
);
kylinOrderRefunds
.
setRefundCode
(
refundCallbackParam
.
getRefund_code
());
kylinOrderRefunds
.
setRefundType
(
refundCallbackParam
.
getRefund_type
());
kylinOrderRefunds
.
setRefundId
(
refundCallbackParam
.
getRefund_id
());
kylinOrderRefunds
.
setRefundAt
(
refundCallbackParam
.
getRefund_at
());
kylinOrderRefunds
.
setRefundError
(
refundCallbackParam
.
getRefund_error
());
kylinOrderRefunds
.
setUpdatedAt
(
LocalDateTime
.
now
());
kylinOrderRefundsMapper
.
update
(
kylinOrderRefunds
,
new
UpdateWrapper
<
KylinOrderRefunds
>().
eq
(
"order_refund_code"
,
refundCallbackParam
.
getOrder_refund_code
())
);
}
return
"success"
;
}
public
Boolean
refundApply
(
String
orderTicketsId
)
{
KylinOrderTickets
orderInfo
=
kylinOrderTicketsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTickets
>().
eq
(
"order_tickets_id"
,
orderTicketsId
)
);
KylinOrderTicketRelations
orderRelations
=
kylinOrderTicketRelationsMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTicketRelations
>().
eq
(
"order_id"
,
orderTicketsId
)
);
// 传的快递费不能大于实际的快递费=(支付的快递费-已退的快递费)
Double
refundPriceExpressSum
=
kylinOrderRefundsMapper
.
RefundPriceExpressSum
(
// 已退快递费
orderTicketsId
,
KylinTableStatusConst
.
ORDER_REFUND_STATUS_CANCEL
);
if
(
null
==
refundPriceExpressSum
)
{
refundPriceExpressSum
=
0.0
;
}
Double
RefundPriceExpress
=
orderInfo
.
getPriceExpress
().
doubleValue
()
-
refundPriceExpressSum
;
// 查询订单入场人
List
<
KylinOrderTicketEntitiesDao
>
entitiesListTemp
=
kylinOrderTicketEntitiesMapper
.
getOvertimeRefundEntitiesList
(
orderTicketsId
);
List
<
KylinOrderTicketEntitiesDao
>
entitiesList
=
new
ArrayList
<>();
if
(
entitiesListTemp
.
size
()
>
0
)
{
double
priceActual
=
orderInfo
.
getPriceActual
().
doubleValue
();
double
priceExpress
=
orderInfo
.
getPriceExpress
().
doubleValue
();
int
allEntitiesCount
=
kylinOrderTicketEntitiesMapper
.
selectCount
(
// 总入场人数量 排出未付款的 用来计算单入场人的价格
new
QueryWrapper
<
KylinOrderTicketEntities
>()
.
eq
(
"order_id"
,
orderInfo
.
getOrderTicketsId
())
// .ne("is_payment", KylinTableStatusConst.ENTITIES_IS_PAYMENT0)
);
double
onePrice
=
(
priceActual
-
priceExpress
)
/
allEntitiesCount
;
//单价
for
(
KylinOrderTicketEntitiesDao
entities
:
entitiesListTemp
)
{
Double
refundedPrice
=
kylinOrderTicketEntitiesMapper
.
getRefundEntitiesPrice
(
//已退 包含退款中
orderInfo
.
getOrderTicketsId
(),
KylinTableStatusConst
.
ORDER_REFUND_STATUS_CANCEL
,
entities
.
getOrderTicketEntitiesId
()
);
double
canRefundedPrice
;
if
(
null
!=
refundedPrice
)
{
canRefundedPrice
=
onePrice
-
refundedPrice
;
}
else
{
canRefundedPrice
=
onePrice
;
}
entities
.
setCanRefundedPrice
(
BigDecimal
.
valueOf
(
canRefundedPrice
));
if
(
canRefundedPrice
>
0
)
{
// 退款中但是可退款金额为0不展示
entitiesList
.
add
(
entities
);
}
}
}
List
<
String
>
ticketEntityIds
=
entitiesList
.
stream
().
map
(
KylinOrderTicketEntities
->
KylinOrderTicketEntities
.
getOrderTicketEntitiesId
()).
collect
(
Collectors
.
toList
());
List
<
Double
>
entitiesPrice
=
entitiesList
.
stream
().
map
(
KylinOrderTicketEntities
->
KylinOrderTicketEntities
.
getCanRefundedPrice
().
doubleValue
()).
collect
(
Collectors
.
toList
());
boolean
res
=
kylinRefundsStatusServiceImpl
.
orderTicketRefunding
(
orderInfo
,
orderTicketsId
,
RefundPriceExpress
,
ticketEntityIds
,
entitiesPrice
);
if
(
res
)
{
// 超时直接退还库存
for
(
String
entitiesId
:
ticketEntityIds
)
{
KylinOrderTicketEntities
entitiesInfo
=
kylinOrderTicketEntitiesMapper
.
selectOne
(
new
QueryWrapper
<
KylinOrderTicketEntities
>().
eq
(
"order_ticket_entities_id"
,
entitiesId
)
);
if
(
entitiesInfo
.
getIsPayment
()
==
KylinTableStatusConst
.
ENTITIES_IS_PAYMENT3
)
{
dataUtils
.
changeSurplusGeneral
(
entitiesInfo
.
getTicketId
(),
1
);
dataUtils
.
changeBuyInfo
(
orderInfo
.
getUserId
(),
entitiesInfo
.
getEnterIdCode
(),
orderRelations
.
getPerformanceId
(),
entitiesInfo
.
getTicketId
(),
-
1
);
}
}
return
true
;
}
else
{
return
false
;
}
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/utils/ShunfengSignUtils.java
0 → 100644
View file @
b9fe5d3a
package
com
.
liquidnet
.
service
.
platform
.
utils
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.UserPathDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.util.EntityUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.util.HashMap
;
/**
* <p>
* 顺丰
* </p>
*
* @author jiangxiulong
* @since 2021-06-24 8:00 下午
*/
@Component
@Slf4j
public
class
ShunfengSignUtils
{
/**
* appId
*/
@Value
(
"${liquidnet.shunfeng.appid}"
)
private
String
APP_ID
;
/**
* sk
*/
@Value
(
"${liquidnet.shunfeng.sk}"
)
private
String
SK
;
/**
* url
*/
@Value
(
"${liquidnet.shunfeng.url}"
)
private
String
URL
;
/**
* 签名有效期(可根据实际业务设定)单位:毫秒
*/
private
final
static
Long
CHECK_TIME
=
600000L
;
/**
* 生成签名并请求
* @param hbody 请求body
* @return
*/
public
String
generateSignatureAndRequest
(
HashMap
<
String
,
Object
>
hbody
,
String
url
)
{
long
currentTimeMillis
=
System
.
currentTimeMillis
();
// 时间戳
String
timestamp
=
currentTimeMillis
+
""
;
hbody
.
put
(
"companyId"
,
APP_ID
);
String
body
=
JsonUtils
.
toJson
(
hbody
);
// 生成签名
String
sign
=
genSign
(
timestamp
,
body
);
CloseableHttpClient
client
=
HttpClients
.
createDefault
();
// 请求下单地址
HttpPost
httpPost
=
new
HttpPost
(
URL
+
url
);
// sendAppId(sendAppId需赋值appId)
httpPost
.
addHeader
(
"sendAppId"
,
APP_ID
);
// 时间戳需和获取验签时一致!!!
httpPost
.
addHeader
(
"timestamp"
,
timestamp
);
// 签名
httpPost
.
addHeader
(
"sign"
,
sign
);
httpPost
.
addHeader
(
"Content-Type"
,
"application/json;charset=utf-8"
);
httpPost
.
addHeader
(
"Accept"
,
"application/json"
);
// 请求body体需和获取验签时一致且编码UTF8!!!
httpPost
.
setEntity
(
new
StringEntity
(
body
,
"utf-8"
));
CloseableHttpResponse
response
=
null
;
log
.
info
(
UserPathDto
.
setData
(
"header"
,
""
,
httpPost
.
getAllHeaders
()));
log
.
info
(
UserPathDto
.
setData
(
"body"
,
""
,
body
));
try
{
response
=
client
.
execute
(
httpPost
);
if
(
response
.
getStatusLine
().
getStatusCode
()
==
200
)
{
System
.
out
.
println
(
"发送请求成功"
);
HttpEntity
entity
=
response
.
getEntity
();
// 发送响应且编码UTF8!!!
return
EntityUtils
.
toString
(
entity
,
"utf-8"
);
}
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"发送请求失败"
);
e
.
printStackTrace
();
}
finally
{
if
(
client
!=
null
)
{
try
{
client
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
if
(
response
!=
null
)
{
try
{
response
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
return
null
;
}
/**
* 生成签名
* @param timestamp 时间戳
* @param body 请求body
* @return
*/
private
String
genSign
(
String
timestamp
,
String
body
)
{
if
(
StringUtils
.
isEmpty
(
body
))
{
body
=
""
;
}
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
body
);
sb
.
append
(
"&sk="
).
append
(
SK
);
sb
.
append
(
"×tamp="
).
append
(
timestamp
);
byte
[]
bytes
=
DigestUtils
.
sha512
(
sb
.
toString
());
return
Base64
.
encodeBase64URLSafeString
(
bytes
);
}
/**
* 接收请求且验签(可在控制层调用此方法)
* @param params 接收请求参数
* @param request 接收请求
* @return
*/
public
boolean
receiveRequestAndCheckSign
(
String
params
,
HttpServletRequest
request
)
{
// 请求方APPID
String
sendAppId
=
request
.
getHeader
(
"sendAppId"
);
// 请求方时间戳
String
timestamp
=
request
.
getHeader
(
"timestamp"
);
// 请求方签名
String
sign
=
request
.
getHeader
(
"sign"
);
if
(
StringUtils
.
isBlank
(
sendAppId
))
{
System
.
out
.
println
(
"参数sendAppId不能为空"
);
return
false
;
}
if
(
StringUtils
.
isBlank
(
timestamp
))
{
System
.
out
.
println
(
"参数timestamp不能为空"
);
return
false
;
}
if
(
StringUtils
.
isBlank
(
sign
))
{
System
.
out
.
println
(
"参数sign不能为空"
);
return
false
;
}
// 校验签名是否过期
long
requestTime
=
Long
.
parseLong
(
timestamp
);
long
now
=
System
.
currentTimeMillis
();
if
(
Math
.
abs
(
now
-
requestTime
)
>
CHECK_TIME
)
{
System
.
out
.
println
(
"签名过期!"
);
return
false
;
}
// 请求方参数+请求方时间戳+SK 生成签名
String
thisSign
=
genSign
(
timestamp
,
params
);
// 获取的签名和请求方签名比较是否一致
if
(!
thisSign
.
equals
(
sign
))
{
System
.
out
.
println
(
"签名错误"
);
return
false
;
}
return
true
;
}
}
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