记得上下班打卡 | 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
a62b91a0
Commit
a62b91a0
authored
Jul 08, 2025
by
wangyifan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
离线支付-斗拱接口回调
parent
8e1176be
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
278 additions
and
36 deletions
+278
-36
GoblinRedisConst.java
...m/liquidnet/service/goblin/constant/GoblinRedisConst.java
+3
-1
GoblinBraceletRelatedOrderVo.java
...t/service/goblin/dto/vo/GoblinBraceletRelatedOrderVo.java
+19
-0
DougongJsPayData.java
...uidnet/service/goblin/param/dougong/DougongJsPayData.java
+4
-0
DougongSyncCallbackRespData.java
...ice/goblin/param/dougong/DougongSyncCallbackRespData.java
+64
-0
IGoblinBraceletOrderService.java
...t/service/goblin/service/IGoblinBraceletOrderService.java
+3
-2
IGoblinDougongPayService.java
...dnet/service/goblin/service/IGoblinDougongPayService.java
+1
-0
RedisKeyExpireConst.java
.../liquidnet/service/base/constant/RedisKeyExpireConst.java
+2
-0
GoblinBraceletOrderController.java
...vice/goblin/controller/GoblinBraceletOrderController.java
+3
-3
GoblinBraceletOrderServiceImpl.java
...e/goblin/service/impl/GoblinBraceletOrderServiceImpl.java
+85
-9
GoblinDougongPayServiceImpl.java
...vice/goblin/service/impl/GoblinDougongPayServiceImpl.java
+7
-0
GoblinRedisUtils.java
...a/com/liquidnet/service/goblin/util/GoblinRedisUtils.java
+24
-3
sqlmap.properties
...-service-goblin-impl/src/main/resources/sqlmap.properties
+3
-1
GoblinBraceletOrderServiceTest.java
...t/service/goblin/test/GoblinBraceletOrderServiceTest.java
+39
-0
GoblinDougongPayServiceImplTest.java
.../service/goblin/test/GoblinDougongPayServiceImplTest.java
+21
-17
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/constant/GoblinRedisConst.java
View file @
a62b91a0
...
...
@@ -365,7 +365,9 @@ public class GoblinRedisConst {
public
static
final
String
GOBLIN_RECHARGE_DEVICE_NUMBER_ENDTIME
=
PREFIX
.
concat
(
"recharge:deviceNumber:endtime:operationNo:"
);
// 手环订单
public
static
final
String
GOBLIN_BRACELET_USER
=
PREFIX
.
concat
(
"bracelet:userId:"
);
public
static
final
String
GOBLIN_BRACELET_ORDERID
=
PREFIX
.
concat
(
"bracelet:orderId:"
);
public
static
final
String
GOBLIN_BRACELET_RELATED_ORDER
=
PREFIX
.
concat
(
"bracelet:reqSeqId:"
);
/* ----------------------------------------------------------------- */
public
static
final
String
GOBLIN_ORDER_LOG
=
PREFIX
.
concat
(
"order:log:"
);
//无用
...
...
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinBraceletRelatedOrderVo.java
0 → 100644
View file @
a62b91a0
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
lombok.Data
;
/**
*
*/
@Data
public
class
GoblinBraceletRelatedOrderVo
{
// 用户ID
private
String
uid
;
// 手环订单ID
private
String
orderId
;
// 调用斗拱请求ID
private
String
reqSeqId
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/dougong/DougongJsPayData.java
View file @
a62b91a0
...
...
@@ -4,6 +4,10 @@ import lombok.Data;
import
java.util.List
;
/**
* 调用斗拱业务层参数
*/
@Data
public
class
DougongJsPayData
{
...
...
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/dougong/DougongSyncCallbackRespData.java
0 → 100644
View file @
a62b91a0
package
com
.
liquidnet
.
service
.
goblin
.
param
.
dougong
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
@Data
public
class
DougongSyncCallbackRespData
{
// 业务响应码
@JsonProperty
(
"resp_code"
)
private
String
respCode
;
//业务响应信息
@JsonProperty
(
"resp_code"
)
private
String
respDesc
;
//商户号
@JsonProperty
(
"huifu_id"
)
private
String
huifuId
;
//请求流水号
@JsonProperty
(
"req_seq_id"
)
private
String
reqSeqId
;
//请求日期
@JsonProperty
(
"req_date"
)
private
String
reqDate
;
//交易类型
@JsonProperty
(
"trans_type"
)
private
String
transType
;
//全局流水号
@JsonProperty
(
"hf_seq_id"
)
private
String
hfSeqId
;
//交易金额
@JsonProperty
(
"trans_amt"
)
private
String
transAmt
;
//消费者实付金额
@JsonProperty
(
"pay_amt"
)
private
String
payAmt
;
// 支付完成时间 格式yyyyMMddHHmmss
@JsonProperty
(
"end_time"
)
private
String
endTime
;
//入账时间 格式为yyyyMMdd
@JsonProperty
(
"acct_date"
)
private
String
acctDate
;
// 交易状态 S:成功、F:失败,交易状态以此字段为准
@JsonProperty
(
"trans_stat"
)
private
String
transStat
;
//通知类型 1:通道通知,2:账务通知
@JsonProperty
(
"notify_type"
)
private
Integer
notifyType
;
@JsonProperty
(
"out_trans_id"
)
private
String
outTransId
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinBrace
L
etOrderService.java
→
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinBrace
l
etOrderService.java
View file @
a62b91a0
...
...
@@ -3,8 +3,9 @@ package com.liquidnet.service.goblin.service;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.vo.GoblinBraceletPayResultVo
;
import
com.liquidnet.service.goblin.param.GoblinBraceletOrderPayParam
;
import
com.liquidnet.service.goblin.param.dougong.DougongSyncCallbackparam
;
public
interface
IGoblinBrace
L
etOrderService
{
public
interface
IGoblinBrace
l
etOrderService
{
/**
* 下单
...
...
@@ -24,5 +25,5 @@ public interface IGoblinBraceLetOrderService {
* 斗拱支付回调
* @return
*/
ResponseDto
<
Boolean
>
dougongCallBack
();
ResponseDto
<
Boolean
>
dougongCallBack
(
DougongSyncCallbackparam
callbackparam
);
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinDougongPayService.java
View file @
a62b91a0
...
...
@@ -11,4 +11,5 @@ public interface IGoblinDougongPayService {
*/
Map
<
String
,
Object
>
jsPay
(
DougongJsPayData
data
);
boolean
verifySign
(
String
data
,
String
sign
);
}
liquidnet-bus-common/liquidnet-common-service-base/src/main/java/com/liquidnet/service/base/constant/RedisKeyExpireConst.java
View file @
a62b91a0
...
...
@@ -51,4 +51,6 @@ public class RedisKeyExpireConst {
public
static
final
long
SWEET_DOUDOU_SCOPE_MOBILE_EXPIRE
=
3
*
24
*
60
*
60
;
// GOBLIN_BRACELET_USER 过期时间3天
public
static
final
long
GOBLIN_BRACELET_USER_EXPIRE
=
30
*
24
*
60
*
60
;
// GOBLIN_BRACELET_RELATED_ORDER 过期30天
public
static
final
long
GOBLIN_BRACELET_RELATED_ORDER_EXPIRE
=
30
*
24
*
60
*
60
;
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/GoblinBraceletOrderController.java
View file @
a62b91a0
...
...
@@ -5,7 +5,7 @@ import com.liquidnet.service.base.codec.vo.EncryptedReq;
import
com.liquidnet.service.goblin.dto.vo.GoblinBraceletPayResultVo
;
import
com.liquidnet.service.goblin.param.GoblinBraceletOrderPayParam
;
import
com.liquidnet.service.goblin.param.dougong.DougongSyncCallbackparam
;
import
com.liquidnet.service.goblin.service.IGoblinBrace
L
etOrderService
;
import
com.liquidnet.service.goblin.service.IGoblinBrace
l
etOrderService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
...
...
@@ -24,7 +24,7 @@ import javax.validation.constraints.NotBlank;
public
class
GoblinBraceletOrderController
{
@Autowired
private
IGoblinBrace
L
etOrderService
braceLetOrderService
;
private
IGoblinBrace
l
etOrderService
braceLetOrderService
;
@PostMapping
(
"/pre"
)
// @ApiOperation("下单(加密)")
...
...
@@ -52,7 +52,7 @@ public class GoblinBraceletOrderController {
@PostMapping
(
"/callback"
)
@ApiOperation
(
"斗拱支付回调"
)
public
ResponseDto
<
Boolean
>
dougongCallBack
(
@RequestBody
DougongSyncCallbackparam
dougongSyncCallbackparam
)
{
return
braceLetOrderService
.
dougongCallBack
();
return
braceLetOrderService
.
dougongCallBack
(
dougongSyncCallbackparam
);
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinBrace
L
etOrderServiceImpl.java
→
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinBrace
l
etOrderServiceImpl.java
View file @
a62b91a0
...
...
@@ -10,7 +10,8 @@ import com.liquidnet.service.goblin.enums.PayStatus;
import
com.liquidnet.service.goblin.param.GoblinBraceletOrderPayParam
;
import
com.liquidnet.service.goblin.param.dougong.DougongJsPayData
;
import
com.liquidnet.service.goblin.param.dougong.DougongRequestParam
;
import
com.liquidnet.service.goblin.service.IGoblinBraceLetOrderService
;
import
com.liquidnet.service.goblin.param.dougong.DougongSyncCallbackparam
;
import
com.liquidnet.service.goblin.service.IGoblinBraceletOrderService
;
import
com.liquidnet.service.goblin.service.IGoblinDougongPayService
;
import
com.liquidnet.service.goblin.service.IGoblinRechargeWristbandService
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
...
...
@@ -27,7 +28,7 @@ import java.util.stream.Collectors;
@Slf4j
@Service
public
class
GoblinBrace
LetOrderServiceImpl
implements
IGoblinBraceL
etOrderService
{
public
class
GoblinBrace
letOrderServiceImpl
implements
IGoblinBracel
etOrderService
{
@Autowired
GoblinRedisUtils
goblinRedisUtils
;
...
...
@@ -102,14 +103,11 @@ public class GoblinBraceLetOrderServiceImpl implements IGoblinBraceLetOrderServi
// 根据响应接口填充参数
orderVo
.
setHfSeqId
((
String
)
dougongResponseMap
.
get
(
"hf_seq_id"
));
orderVo
.
setAtuSubMerId
((
String
)
dougongResponseMap
.
get
(
"atu_sub_mer_id"
));
// orderVo.setOutTransId(dougongResponseMap.get(""));
orderVo
.
setPartyOrderId
((
String
)
dougongResponseMap
.
get
(
"party_order_id"
));
// orderVo.setEndTime(dougongResponseMap.get(""));
// orderVo.setAcctDate(dougongResponseMap.get(""));
// orderVo.setPriceActual(dougongResponseMap.get(""));
// 5. 根据响应结构写 redis、mysql
goblinRedisUtils
.
setBraceletOrderVo
(
orderVo
);
goblinRedisUtils
.
setBraceletRelatedOrderVo
(
orderVo
.
getReqSeqId
(),
orderVo
.
getOrderId
());
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
sqls
.
add
(
SqlMapping
.
get
(
"goblin_bracelet_order_insert"
));
...
...
@@ -246,16 +244,94 @@ public class GoblinBraceLetOrderServiceImpl implements IGoblinBraceLetOrderServi
@Override
public
ResponseDto
<
Integer
>
checkOrderResult
(
String
orderId
)
{
final
String
uid
=
CurrentUtil
.
getCurrentUid
();
GoblinBraceletOrderVo
braceletOrderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
uid
,
orderId
);
GoblinBraceletOrderVo
braceletOrderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
if
(
braceletOrderVo
==
null
)
{
log
.
error
(
"订单不存在"
);
return
ResponseDto
.
failure
(
"订单不存在"
);
}
if
(!
uid
.
equals
(
braceletOrderVo
.
getUserId
()))
{
log
.
error
(
"暂无权限"
);
return
ResponseDto
.
failure
(
"暂无权限"
);
}
return
ResponseDto
.
success
(
braceletOrderVo
.
getPayStatus
());
}
@Override
public
ResponseDto
<
Boolean
>
dougongCallBack
()
{
return
null
;
public
ResponseDto
<
Boolean
>
dougongCallBack
(
DougongSyncCallbackparam
callbackparam
)
{
log
.
info
(
"斗拱回调参数: {}."
,
JsonUtils
.
toJson
(
callbackparam
));
// 验签
boolean
verifySign
=
dougongPayService
.
verifySign
(
callbackparam
.
getRespData
(),
callbackparam
.
getSign
());
// 2. 判断验签结果
if
(!
verifySign
)
{
log
.
error
(
"斗拱回调验签失败"
);
return
ResponseDto
.
failure
();
}
try
{
Map
<
String
,
Object
>
callbackRespDataMap
=
JsonUtils
.
fromJson
(
callbackparam
.
getRespData
(),
Map
.
class
);
if
(
callbackRespDataMap
==
null
||
!
"00000000"
.
equals
(
callbackRespDataMap
.
get
(
"resp_code"
)))
{
log
.
error
(
"斗拱回调数据为空"
);
return
ResponseDto
.
failure
();
}
final
String
reqSeqId
=
(
String
)
callbackRespDataMap
.
get
(
"req_seq_id"
);
final
String
orderId
=
goblinRedisUtils
.
getBraceletRelatedOrderVo
(
reqSeqId
);
if
(
StringUtil
.
isBlank
(
orderId
))
{
log
.
error
(
"未找到对应的订单, reqSeqId: {}."
,
reqSeqId
);
return
ResponseDto
.
failure
();
}
GoblinBraceletOrderVo
orderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
if
(
orderVo
==
null
)
{
log
.
error
(
"未找到对应的订单, reqSeqId: {}."
,
reqSeqId
);
return
ResponseDto
.
failure
();
}
orderVo
.
setOutTransId
((
String
)
callbackRespDataMap
.
get
(
"out_trans_id"
));
orderVo
.
setEndTime
((
String
)
callbackRespDataMap
.
get
(
"end_time"
));
orderVo
.
setAcctDate
((
String
)
callbackRespDataMap
.
get
(
"acct_date"
));
orderVo
.
setPriceActual
(
new
BigDecimal
((
String
)
callbackRespDataMap
.
get
(
"pay_amt"
)));
orderVo
.
setTimePay
((
String
)
callbackRespDataMap
.
get
(
"end_time"
));
orderVo
.
setUpdatedAt
(
LocalDateTime
.
now
());
if
(
"S"
.
equalsIgnoreCase
((
String
)
callbackRespDataMap
.
get
(
"trans_stat"
)))
{
// 斗拱返回成功
updateOrderStatus
(
OrderStatus
.
PAID
.
getCode
(),
PayStatus
.
PAID
.
getCode
(),
orderVo
);
}
else
{
// 斗拱返回失败
updateOrderStatus
(
OrderStatus
.
PENDING_PAYMENT
.
getCode
(),
PayStatus
.
PAYMENT_FAILED
.
getCode
(),
orderVo
);
}
// 更新redis
goblinRedisUtils
.
setBraceletOrderVo
(
orderVo
);
// 更新MySQL
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_GOODS
.
getKey
(),
SqlMapping
.
get
(
"gpblin_bracelet_order_update"
,
orderVo
.
getOutTransId
(),
orderVo
.
getEndTime
(),
orderVo
.
getAcctDate
(),
orderVo
.
getPriceActual
(),
orderVo
.
getTimePay
(),
orderVo
.
getUpdatedAt
(),
orderVo
.
getOrderId
())
);
for
(
GoblinBraceletOrderEntitiesVo
entitiesVo
:
orderVo
.
getOrderEntitiesDetailVoList
())
{
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_GOODS
.
getKey
(),
SqlMapping
.
get
(
"goblie_bracelet_order_entities_update"
,
entitiesVo
.
getStatus
(),
entitiesVo
.
getPayStatus
(),
entitiesVo
.
getUpdatedAt
(),
entitiesVo
.
getOrderEntitiesId
())
);
}
return
ResponseDto
.
success
(
Boolean
.
TRUE
);
}
catch
(
Exception
e
)
{
log
.
error
(
"error"
,
e
);
return
ResponseDto
.
failure
();
}
}
private
void
updateOrderStatus
(
int
statusCode
,
int
payStatusCode
,
GoblinBraceletOrderVo
orderVo
)
{
orderVo
.
setStatus
(
statusCode
);
orderVo
.
setPayStatus
(
payStatusCode
);
List
<
GoblinBraceletOrderEntitiesVo
>
orderEntitiesDetailVoList
=
orderVo
.
getOrderEntitiesDetailVoList
();
for
(
GoblinBraceletOrderEntitiesVo
entitiesVo
:
orderEntitiesDetailVoList
)
{
entitiesVo
.
setStatus
(
statusCode
);
entitiesVo
.
setPayStatus
(
payStatusCode
);
entitiesVo
.
setUpdatedAt
(
LocalDateTime
.
now
());
}
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinDougongPayServiceImpl.java
View file @
a62b91a0
...
...
@@ -8,6 +8,7 @@ import com.liquidnet.service.goblin.config.properties.AppProperties;
import
com.liquidnet.service.goblin.param.dougong.DougongJsPayData
;
import
com.liquidnet.service.goblin.param.dougong.DougongRequestParam
;
import
com.liquidnet.service.goblin.service.IGoblinDougongPayService
;
import
com.liquidnet.service.goblin.util.DougongSignUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
...
...
@@ -66,6 +67,12 @@ public class GoblinDougongPayServiceImpl implements IGoblinDougongPayService {
return
null
;
}
@Override
public
boolean
verifySign
(
String
data
,
String
sign
)
{
boolean
verify
=
DougongSignUtils
.
verify
(
data
,
appInfo
.
getPublicKey
(),
sign
);
return
verify
;
}
private
DougongRequestParam
buildDougongRequestParam
(
DougongJsPayData
data
){
if
(
data
==
null
)
{
return
null
;
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/GoblinRedisUtils.java
View file @
a62b91a0
...
...
@@ -2952,13 +2952,34 @@ public class GoblinRedisUtils {
}
}
public
void
setBraceletRelatedOrderVo
(
String
reqSeqId
,
String
orderId
){
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_RELATED_ORDER
.
concat
(
reqSeqId
);
redisUtil
.
set
(
key
,
orderId
,
RedisKeyExpireConst
.
GOBLIN_BRACELET_RELATED_ORDER_EXPIRE
);
}
/**
*
* @param reqSeqId 调用斗拱-请求流水号
* @return
*/
public
String
getBraceletRelatedOrderVo
(
String
reqSeqId
){
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_RELATED_ORDER
.
concat
(
reqSeqId
);
Object
obj
=
redisUtil
.
get
(
key
);
if
(
obj
==
null
)
{
// TODO 从数据库查询
return
null
;
}
else
{
return
(
String
)
obj
;
}
}
public
void
setBraceletOrderVo
(
GoblinBraceletOrderVo
orderVo
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_
USER
.
concat
(
orderVo
.
getUserId
()).
concat
(
"orderId:"
)
.
concat
(
orderVo
.
getOrderId
());
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_
ORDERID
.
concat
(
orderVo
.
getOrderId
());
redisUtil
.
set
(
key
,
orderVo
,
RedisKeyExpireConst
.
GOBLIN_BRACELET_USER_EXPIRE
);
}
public
GoblinBraceletOrderVo
getBraceletOrderVo
(
String
uid
,
String
orderId
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_
USER
.
concat
(
uid
).
concat
(
"orderId:"
)
.
concat
(
orderId
);
public
GoblinBraceletOrderVo
getBraceletOrderVo
(
String
orderId
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_
ORDERID
.
concat
(
orderId
);
Object
obj
=
redisUtil
.
get
(
key
);
if
(
obj
==
null
)
{
// TODO 从数据库查询
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/resources/sqlmap.properties
View file @
a62b91a0
...
...
@@ -197,4 +197,6 @@ candy_user_coupon.update_apply_refund=UPDATE candy_user_coupon SET state=?,opera
#----
# ---- \u624B\u73AF\u8BA2\u5355 ----
goblin_bracelet_order_insert
=
INSERT INTO `goblin_bracelet_order`(`order_id`, `user_id`, `bind_name`, `bind_mobile`, `bind_idcard`, `req_date`, `goods_desc`, `req_seq_id`, `hf_seq_id`, `trade_type`, `atu_sub_mer_id`, `party_order_id`, `price`, `price_total`, `price_refund`, `refund_price_charges`, `refund_number`, `status`, `pay_status`, `created_at`, `updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_bracelet_order_entities_insert
=
INSERT INTO `goblin_bracelet_order_entities`(`order_entities_id`, `order_id`, `goods_type`, `goods_id`, `goods_name`, `goods_price`, `status`, `pay_status`, `created_at`, `updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
gpblin_bracelet_order_update
=
update goblin_bracelet_order set out_trans_id=?, end_time=?, acct_date=?, price_actual=?, time_pay=?, updated_at=? where order_id=?
goblin_bracelet_order_entities_insert
=
INSERT INTO `goblin_bracelet_order_entities`(`order_entities_id`, `order_id`, `goods_type`, `goods_id`, `goods_name`, `goods_price`, `status`, `pay_status`, `created_at`, `updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?)
goblie_bracelet_order_entities_update
=
update goblin_bracelet_order_entities set status=?, pay_status=?, updated_at=? where order_entities_id=?
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/test/java/com/liquidnet/service/goblin/test/GoblinBraceletOrderServiceTest.java
0 → 100644
View file @
a62b91a0
package
com
.
liquidnet
.
service
.
goblin
.
test
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.param.dougong.DougongSyncCallbackparam
;
import
com.liquidnet.service.goblin.service.IGoblinBraceletOrderService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.Assert
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
java.util.Map
;
@Slf4j
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringBootTest
public
class
GoblinBraceletOrderServiceTest
{
@Autowired
private
IGoblinBraceletOrderService
goblinBraceletorderservice
;
@Test
public
void
dougongCallBackTest
(){
DougongSyncCallbackparam
callbackparam
=
new
DougongSyncCallbackparam
();
callbackparam
.
setRespCode
(
"00000000"
);
callbackparam
.
setSign
(
"gsbW6XtkMbtpM9kI2sZ+aAMB2/QHH7YFN7ecBcfUmPe93LdC+BwKPxhT587zr7LlDzwfhmv+xVcbWTKrol5THa7dK8+RqYNbijKxZFba+oNi2dVWeRmSXVgL5yZ8+DsrXdTms9uv5WP19vuLMVh+UCh1n7zDBhJPMsW6w9LPEaCWXJcLJ8xgzBm/JtAQNZO7WWxFdHJShYmUssRfQvq8a/TXwBxlAB07hjQmI9rhTDL0UY39sfh1a9NVUrwmRPunDtq9WvV+/8I3VL4yZNWO9w4V56VrZj24SmmHBb2EDeHzx4qfky6DK9Djk/ZJBqFeOi/N0YKkzR6X2CsL7ab72A=="
);
callbackparam
.
setRespDesc
(
"交易成功[000]"
);
callbackparam
.
setRespData
(
"{\"acct_id\":\"F00300982\",\"acct_split_bunch\":{\"acct_infos\":[{\"acct_id\":\"F00300982\",\"div_amt\":\"0.02\",\"huifu_id\":\"6666000109133323\"}],\"fee_acct_id\":\"F00380563\",\"fee_amt\":\"0.01\",\"fee_huifu_id\":\"6666000109133323\"},\"acct_stat\":\"I\",\"atu_sub_mer_id\":\"460360228\",\"avoid_sms_flag\":\"\",\"bagent_id\":\"6666000108840829\",\"bank_code\":\"SUCCESS\",\"bank_desc\":\"交易成功\",\"bank_message\":\"交易成功\",\"bank_order_no\":\"4200002303202406139053495866\",\"bank_seq_id\":\"800448\",\"bank_type\":\"OTHERS\",\"base_acct_id\":\"F00300982\",\"batch_id\":\"240613\",\"channel_type\":\"U\",\"charge_flags\":\"758_0\",\"combinedpay_data\":[],\"combinedpay_fee_amt\":\"0.00\",\"debit_type\":\"0\",\"delay_acct_flag\":\"N\",\"div_flag\":\"0\",\"end_time\":\"20240613105518\",\"fee_amount\":\"0.01\",\"fee_amt\":\"0.01\",\"fee_flag\":1,\"fee_formula_infos\":[{\"fee_formula\":\"MAX(0.01,AMT*0.01)\",\"fee_type\":\"TRANS_FEE\"}],\"fee_rec_type\":\"1\",\"fee_type\":\"OUTSIDE\",\"gate_id\":\"VN\",\"hf_seq_id\":\"002900TOP2B240613105504P831ac139c2000000\",\"huifu_id\":\"6666000109133323\",\"is_delay_acct\":\"0\",\"is_div\":\"0\",\"maze_resp_code\":\"\",\"mer_name\":\"上海汇涵信息科技服务有限公司\",\"mer_ord_id\":\"20240613105441800448\",\"mypaytsf_discount\":\"0.00\",\"need_big_object\":true,\"notify_type\":1,\"org_auth_no\":\"\",\"org_huifu_seq_id\":\"\",\"org_trans_date\":\"\",\"out_ord_id\":\"4200002303202406139053495866\",\"out_trans_id\":\"4200002303202406139053495866\",\"party_order_id\":\"03242406133930500803797\",\"pay_amt\":\"0.02\",\"pay_scene\":\"02\",\"posp_seq_id\":\"03242406133930500803797\",\"product_id\":\"YYZY\",\"ref_no\":\"105504800448\",\"req_date\":\"20240613\",\"req_seq_id\":\"20240613105441800448\",\"resp_code\":\"00000000\",\"resp_desc\":\"交易成功\",\"risk_check_data\":{\"ip_addr\":\"192.1.1.1\"},\"risk_check_info\":{\"client_ip\":\"192.1.1.1\"},\"settlement_amt\":\"0.02\",\"sub_resp_code\":\"00000000\",\"sub_resp_desc\":\"交易成功\",\"subsidy_stat\":\"I\",\"sys_id\":\"6666000108840829\",\"trade_type\":\"T_JSAPI\",\"trans_amt\":\"0.02\",\"trans_date\":\"20240613\",\"trans_fee_allowance_info\":{\"actual_fee_amt\":\"0.01\",\"allowance_fee_amt\":\"0.00\",\"allowance_type\":\"0\",\"cur_allowance_config_infos\":{\"activity_id\":\"AYYZY202403281643407965739\",\"activity_name\":\"\",\"allowance_sys\":\"1\",\"allowance_sys_id\":\"1234567891011\",\"create_by\":\"yunlong.zhang\",\"create_time\":1711615421000,\"end_time\":\"20241201\",\"human_flag\":\"N\",\"is_delay_allowance\":\"2\",\"is_share\":\"Y\",\"merchant_group\":\"6666000109133323\",\"pos_credit_limit_amt\":\"1000.00\",\"pos_debit_limit_amt\":\"1000.00\",\"pos_limit_amt\":\"2000.00\",\"qr_limit_amt\":\"1.00\",\"start_time\":\"20240101\",\"status\":\"1\",\"total_limit_amt\":\"1900.00\",\"update_time\":1711615421000},\"no_allowance_desc\":\"8\",\"receivable_fee_amt\":\"0.01\"},\"trans_order_info\":{\"acct_id\":\"F00300982\",\"acct_stat\":\"I\",\"agent_id\":\"6666000108840829\",\"atu_sub_mer_id\":\"460360228\",\"bagent_id\":\"6666000108840829\",\"bank_mer_id\":\"W1035134718836156463\",\"bank_mer_name\":\"上海汇涵信息科技服务有限公司\",\"bank_resp_code\":\"SUCCESS\",\"bank_resp_desc\":\"交易成功\",\"bank_seq_id\":\"800448\",\"bank_type\":\"OTHERS\",\"batch_id\":\"240613\",\"card_channel_type\":\"\",\"card_sign\":\"\",\"cash_req_date\":\"20240613105504\",\"cash_resp_code\":\"000\",\"cash_resp_desc\":\"成功\",\"cash_trans_id\":\"20240613241pkafk\",\"cashier_version\":\"V2\",\"channel_code\":\"00\",\"channel_finish_time\":1718247318000,\"channel_message\":\"交易成功\",\"channel_stat\":\"S\",\"channel_type\":\"U\",\"check_cash_flag\":\"I\",\"close_trans_stat\":\"\",\"create_time\":1718247304000,\"creator\":\"\",\"credit_fee_amt\":0.00,\"credit_type\":\"\",\"db_unit\":\"2\",\"debit_fee_amt\":0.00,\"double_limit_amt\":0.00,\"fee_acct_id\":\"F00380563\",\"fee_allowance_flag\":0,\"fee_amt\":0.01,\"fee_flag\":1,\"fee_formula\":\"\",\"fee_huifu_id\":\"6666000109133323\",\"fee_real_acct_id\":\"F00380563\",\"fee_real_cust_id\":\"6666000109133323\",\"fee_rec_type\":1,\"fee_source\":\"'SERVER'\",\"fee_split_type\":\"\",\"gate_id\":\"SPIN002\",\"goods_desc\":\"微信测试商品-无线鼠标\",\"hf_seq_id\":\"002900TOP2B240613105504P831ac139c2000000\",\"huifu_id\":\"6666000109133323\",\"icc_data\":\"\",\"id\":4175314075,\"is_acct_div\":0,\"is_acct_div_param\":0,\"is_delay_acct\":0,\"is_deleted\":0,\"is_route\":\"\",\"iss_inst_id\":\"\",\"maze_bg_date\":\"\",\"maze_bg_seq_id\":\"\",\"maze_pnr_dev_id\":\"\",\"maze_resp_code\":\"\",\"maze_resp_desc\":\"\",\"mcc\":\"\",\"mer_name\":\"上海汇涵信息科技服务有限公司\",\"mer_ord_id\":\"20240613105441800448\",\"modifier\":\"\",\"modify_time\":1718247318000,\"mypaytsf_discount\":0.00,\"ord_amt\":0.02,\"ord_id\":\"202406131055040TOP2_BL2684095952\",\"org_acct_id\":\"F00300982\",\"org_auth_no\":\"\",\"org_huifu_seq_id\":\"\",\"org_trans_date\":\"\",\"out_trans_id\":\"4200002303202406139053495866\",\"pa_mer_id\":\"SSP001\",\"party_order_id\":\"03242406133930500803797\",\"pay_amt\":0.02,\"pay_channel\":\"T\",\"pay_channel_id\":\"10000001\",\"pay_scene\":\"02\",\"pay_type\":\"JSAPI\",\"product_id\":\"YYZY\",\"real_acct_id\":\"F00300982\",\"real_cust_id\":\"6666000109133323\",\"real_gate_id\":\"VN\",\"ref_amt\":0.02,\"ref_cnt\":0,\"ref_fee_amt\":0.01,\"ref_num\":\"105504800448\",\"region_id\":\"TOP2_B\",\"req_date\":\"20240613\",\"req_seq_id\":\"20240613105441800448\",\"route_region_id\":\"C24_A\",\"settle_amt\":0.02,\"settle_trans_stat\":\"\",\"sn_code\":\"\",\"source_region_id\":\"TOP2_B\",\"subsidy_amt\":0.00,\"subsidy_ref_amt\":0.00,\"subsidy_stat\":\"I\",\"sys_id\":\"6666000108840829\",\"sys_trace_audit_num\":\"\",\"term_div_coupon_type\":3,\"time_expire\":\"20240613110004\",\"trans_date\":\"20240613\",\"trans_finish_time\":1718247319000,\"trans_notify_url\":\"VIRGO://https://iotpush.cloudpnr.com/ws-mgnt-ser/callback/jspay\",\"trans_stat\":\"S\",\"trans_type\":\"1000\",\"un_scene_info\":\"\",\"unconfirm_amt\":0.02,\"unconfirm_fee_amt\":0.01,\"version\":3},\"trans_stat\":\"S\",\"trans_time\":\"105504\",\"trans_type\":\"T_JSAPI\",\"wx_response\":{\"bank_type\":\"OTHERS\",\"coupon_fee\":\"0.00\",\"openid\":\"o8jhot5QnK-AmVoARPMJjMT-SsX0\",\"sub_appid\":\"wxdfe9a5d141f96685\",\"sub_openid\":\"oozDJ52_y7RMnxObV04Q4bpuNZEM\"}}"
);
Map
map
=
JsonUtils
.
fromJson
(
callbackparam
.
getRespData
(),
Map
.
class
);
ResponseDto
<
Boolean
>
responseDto
=
goblinBraceletorderservice
.
dougongCallBack
(
callbackparam
);
Assert
.
assertTrue
(
responseDto
.
isSuccess
());
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/test/java/com/liquidnet/service/goblin/test/GoblinDougongPayServiceImplTest.java
View file @
a62b91a0
package
com
.
liquidnet
.
service
.
goblin
.
test
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.goblin.param.dougong.DougongJsPayData
;
import
com.liquidnet.service.goblin.param.dougong.DougongRequestParam
;
import
com.liquidnet.service.goblin.service.IGoblinDougongPayService
;
...
...
@@ -15,6 +14,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
...
...
@@ -26,8 +26,7 @@ public class GoblinDougongPayServiceImplTest {
private
IGoblinDougongPayService
goblinDougongPayService
;
@Test
public
void
jsPay
(){
private
List
<
DougongRequestParam
.
WxDataGoodsDetail
>
getWxDataGoodsDetails
()
{
HashMap
<
String
,
Object
>
goods1
=
new
HashMap
<>();
goods1
.
put
(
"id"
,
"1"
);
goods1
.
put
(
"name"
,
"手环"
);
...
...
@@ -40,17 +39,33 @@ public class GoblinDougongPayServiceImplTest {
goods2
.
put
(
"price"
,
"50"
);
goods2
.
put
(
"number"
,
1
);
// 商品列表
ArrayList
<
Map
<
String
,
Object
>>
goodsList
=
new
ArrayList
<>();
goodsList
.
add
(
goods1
);
goodsList
.
add
(
goods2
);
ArrayList
<
DougongRequestParam
.
WxDataGoodsDetail
>
wxDataGoodsDetails
=
new
ArrayList
<>();
for
(
Map
<
String
,
Object
>
stringObjectMap
:
goodsList
)
{
DougongRequestParam
.
WxDataGoodsDetail
wxDataGoodsDetail
=
new
DougongRequestParam
.
WxDataGoodsDetail
();
wxDataGoodsDetail
.
setGoodsId
(
String
.
valueOf
(
stringObjectMap
.
get
(
"id"
)));
wxDataGoodsDetail
.
setGoodsName
(
String
.
valueOf
(
stringObjectMap
.
get
(
"name"
)));
wxDataGoodsDetail
.
setPrice
(
String
.
valueOf
(
stringObjectMap
.
get
(
"price"
)));
wxDataGoodsDetail
.
setQuantity
((
Integer
)
stringObjectMap
.
get
(
"number"
));
wxDataGoodsDetails
.
add
(
wxDataGoodsDetail
);
}
return
wxDataGoodsDetails
;
}
@Test
public
void
jsPay
()
{
// 商品描述
String
goodsDesc
=
"手环充值"
;
// 商品金额
BigDecimal
totalAmt
=
new
BigDecimal
(
"51.00"
);
// 请求日期
String
reqDate
=
"2025070
7
"
;
String
reqDate
=
"2025070
8
"
;
// 交易类型
String
tradeType
=
"T_MINIAPP"
;
...
...
@@ -59,17 +74,6 @@ public class GoblinDougongPayServiceImplTest {
requestParam
.
setTimeExpire
(
"20250718235959"
);
//TODO 在计算
requestParam
.
setNotifyUrl
(
"http://www.baidu.com"
);
//TODO 配置
ArrayList
<
DougongRequestParam
.
WxDataGoodsDetail
>
wxDataGoodsDetails
=
new
ArrayList
<>();
for
(
Map
<
String
,
Object
>
stringObjectMap
:
goodsList
)
{
DougongRequestParam
.
WxDataGoodsDetail
wxDataGoodsDetail
=
new
DougongRequestParam
.
WxDataGoodsDetail
();
wxDataGoodsDetail
.
setGoodsId
(
String
.
valueOf
(
stringObjectMap
.
get
(
"id"
)));
wxDataGoodsDetail
.
setGoodsName
(
String
.
valueOf
(
stringObjectMap
.
get
(
"name"
)));
wxDataGoodsDetail
.
setPrice
(
String
.
valueOf
(
stringObjectMap
.
get
(
"price"
)));
wxDataGoodsDetail
.
setQuantity
((
Integer
)
stringObjectMap
.
get
(
"number"
));
wxDataGoodsDetails
.
add
(
wxDataGoodsDetail
);
}
DougongJsPayData
dougongJsPayData
=
new
DougongJsPayData
();
dougongJsPayData
.
setReqDate
(
reqDate
);
dougongJsPayData
.
setReqSeqId
(
IDGenerator
.
nextSnowId
());
...
...
@@ -78,7 +82,7 @@ public class GoblinDougongPayServiceImplTest {
dougongJsPayData
.
setTransAmt
(
totalAmt
.
toString
());
dougongJsPayData
.
setTimeExpire
(
"20250718235959"
);
//TODO 在计算
dougongJsPayData
.
setSubOpenid
(
"o8jhotzittQSetZ-N0Yj4Hz91Rqc"
);
//TODO 前端带过来
dougongJsPayData
.
setGoodsDetailList
(
wxDataGoodsDetails
);
dougongJsPayData
.
setGoodsDetailList
(
getWxDataGoodsDetails
()
);
System
.
out
.
println
(
goblinDougongPayService
.
jsPay
(
dougongJsPayData
));
}
...
...
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