记得上下班打卡 | 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
d7d8ae09
Commit
d7d8ae09
authored
Apr 30, 2026
by
姜秀龙
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'refs/heads/dev-1.6-shouqianba' into container-test
parents
43f75418
c7fcc512
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
91 additions
and
10 deletions
+91
-10
SqbBiz.java
.../main/java/com/liquidnet/common/third/sqb/biz/SqbBiz.java
+2
-2
CouponQueryResponse.java
.../common/third/sqb/param/response/CouponQueryResponse.java
+3
-1
GoblinSqbServiceImpl.java
...net/service/goblin/service/impl/GoblinSqbServiceImpl.java
+78
-7
GoblinSqbRedisUtils.java
...om/liquidnet/service/goblin/util/GoblinSqbRedisUtils.java
+8
-0
No files found.
liquidnet-bus-common/liquidnet-common-third/liquidnet-common-third-sqb/src/main/java/com/liquidnet/common/third/sqb/biz/SqbBiz.java
View file @
d7d8ae09
...
...
@@ -211,7 +211,7 @@ public class SqbBiz {
/**
* 查询券码
*/
public
CouponQueryData
queryCoupon
(
CouponQueryRequest
request
)
{
public
List
<
CouponQueryData
>
queryCoupon
(
CouponQueryRequest
request
)
{
return
executeShouQianBaRequest
(
"/optimus/core/voucher/queryOrderVoucherList"
,
"查询优惠券"
,
request
,
CouponQueryResponse
.
class
);
}
...
...
@@ -222,7 +222,7 @@ public class SqbBiz {
* @param signature 订单密码
* @return
*/
public
CouponQueryData
queryCoupon
(
String
sn
,
String
signature
)
{
public
List
<
CouponQueryData
>
queryCoupon
(
String
sn
,
String
signature
)
{
CouponQueryRequest
couponQueryRequest
=
new
CouponQueryRequest
();
couponQueryRequest
.
setAppid
(
sqbConfig
.
getAppId
());
couponQueryRequest
.
setSeller
(
cachedSeller
);
...
...
liquidnet-bus-common/liquidnet-common-third/liquidnet-common-third-sqb/src/main/java/com/liquidnet/common/third/sqb/param/response/CouponQueryResponse.java
View file @
d7d8ae09
...
...
@@ -6,6 +6,8 @@ import com.liquidnet.common.third.sqb.param.response.data.CouponQueryData;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.util.List
;
/**
* 券详情查询响应
*/
...
...
@@ -13,5 +15,5 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
@JsonIgnoreProperties
(
ignoreUnknown
=
true
)
public
class
CouponQueryResponse
extends
BaseResponse
<
CouponQueryData
>{
public
class
CouponQueryResponse
extends
BaseResponse
<
List
<
CouponQueryData
>
>{
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinSqbServiceImpl.java
View file @
d7d8ae09
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.liquidnet.common.third.sqb.biz.SqbBiz
;
import
com.liquidnet.common.third.sqb.param.request.CommonRequest
;
import
com.liquidnet.common.third.sqb.param.request.CouponQueryRequest
;
import
com.liquidnet.common.third.sqb.param.request.CouponRefundRequest
;
import
com.liquidnet.common.third.sqb.param.response.data.CouponQueryData
;
import
com.liquidnet.common.third.sqb.param.response.data.CouponRefundData
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.constant.GoblinStatusConst
;
import
com.liquidnet.service.goblin.dto.vo.*
;
import
com.liquidnet.service.goblin.entity.GoblinSqbOrder
;
import
com.liquidnet.service.goblin.mapper.GoblinSqbOrderMapper
;
import
com.liquidnet.service.goblin.service.IGoblinSqbService
;
import
com.liquidnet.service.goblin.util.GoblinMongoUtils
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
...
...
@@ -49,6 +50,9 @@ public class GoblinSqbServiceImpl implements IGoblinSqbService {
private
SqbBiz
sqbBiz
;
private
static
final
DateTimeFormatter
DTF
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
@Autowired
private
GoblinSqbOrderMapper
goblinSqbOrderMapper
;
// ================================ 获取券码 ================================
...
...
@@ -56,10 +60,26 @@ public class GoblinSqbServiceImpl implements IGoblinSqbService {
public
ResponseDto
<
GoblinSqbCouponVo
>
queryCoupon
(
String
userId
,
String
orderId
)
{
log
.
info
(
"[收钱吧券码] 开始获取 userId={}, orderId={}"
,
userId
,
orderId
);
// 支付态以商城订单为准(收钱吧扩展状态仅用于核销等业务态)
GoblinStoreOrderVo
storeOrderVo
=
goblinRedisUtils
.
getGoblinOrder
(
orderId
);
if
(
storeOrderVo
==
null
)
return
ResponseDto
.
failure
(
"订单不存在"
);
if
(!
userId
.
equals
(
storeOrderVo
.
getUserId
()))
return
ResponseDto
.
failure
(
"无权限访问该订单"
);
if
(!(
storeOrderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_STATUS_2
.
getValue
()
||
storeOrderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_STATUS_4
.
getValue
()))
{
return
ResponseDto
.
failure
(
"订单未支付,无法获取券码"
);
}
GoblinSqbOrderVo
orderVo
=
goblinSqbRedisUtils
.
getSqbOrder
(
orderId
);
if
(
orderVo
==
null
)
return
ResponseDto
.
failure
(
"订单不存在"
);
if
(!
userId
.
equals
(
orderVo
.
getUserId
()))
return
ResponseDto
.
failure
(
"无权限访问该订单"
);
if
(!
Integer
.
valueOf
(
1
).
equals
(
orderVo
.
getStatus
()))
return
ResponseDto
.
failure
(
"订单未支付,无法获取券码"
);
if
(
orderVo
==
null
)
{
orderVo
=
loadSqbOrderVoFromDb
(
orderId
);
if
(
orderVo
!=
null
)
{
goblinSqbRedisUtils
.
setSqbOrderForever
(
orderId
,
orderVo
);
}
else
{
return
ResponseDto
.
failure
(
"订单不存在"
);
}
}
// 兜底:以商城订单的 userId 为准,这里仅防御脏数据
if
(
orderVo
.
getUserId
()
!=
null
&&
!
userId
.
equals
(
orderVo
.
getUserId
()))
return
ResponseDto
.
failure
(
"无权限访问该订单"
);
// 幂等:已存在则直接返回
if
(
orderVo
.
getCouponQrCode
()
!=
null
&&
!
orderVo
.
getCouponQrCode
().
isEmpty
())
{
...
...
@@ -71,8 +91,9 @@ public class GoblinSqbServiceImpl implements IGoblinSqbService {
}
// 调用收钱吧查询券码
CouponQueryData
couponData
=
sqbBiz
.
queryCoupon
(
orderVo
.
getSqbOrderSn
(),
orderVo
.
getSqbOrderSignature
());
if
(
couponData
==
null
)
return
ResponseDto
.
failure
(
"获取券码失败"
);
List
<
CouponQueryData
>
couponList
=
sqbBiz
.
queryCoupon
(
orderVo
.
getSqbOrderSn
(),
orderVo
.
getSqbOrderSignature
());
if
(
CollectionUtils
.
isEmpty
(
couponList
))
return
ResponseDto
.
failure
(
"暂无可用券码"
);
CouponQueryData
couponData
=
couponList
.
get
(
0
);
// 更新订单 coupon 字段
String
now
=
LocalDateTime
.
now
().
format
(
DTF
);
...
...
@@ -312,6 +333,12 @@ public class GoblinSqbServiceImpl implements IGoblinSqbService {
}
GoblinSqbOrderVo
sqbOrderVo
=
goblinSqbRedisUtils
.
getSqbOrder
(
orderId
);
if
(
sqbOrderVo
==
null
)
{
sqbOrderVo
=
loadSqbOrderVoFromDb
(
orderId
);
if
(
sqbOrderVo
!=
null
)
{
goblinSqbRedisUtils
.
setSqbOrderForever
(
orderId
,
sqbOrderVo
);
}
}
GoblinSqbOrderDetailVo
detailVo
=
buildDetailVo
(
storeOrderVo
,
skuVo
,
sqbOrderVo
);
log
.
info
(
"[收钱吧订单详情] 查询成功,orderId={}"
,
orderId
);
...
...
@@ -353,6 +380,50 @@ public class GoblinSqbServiceImpl implements IGoblinSqbService {
return
detailVo
;
}
private
GoblinSqbOrderVo
loadSqbOrderVoFromDb
(
String
orderId
)
{
if
(
orderId
==
null
||
orderId
.
trim
().
isEmpty
())
{
return
null
;
}
try
{
LambdaQueryWrapper
<
GoblinSqbOrder
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
GoblinSqbOrder:
:
getOrderId
,
orderId
).
last
(
"LIMIT 1"
);
GoblinSqbOrder
dbOrder
=
goblinSqbOrderMapper
.
selectOne
(
wrapper
);
if
(
dbOrder
==
null
)
{
return
null
;
}
GoblinSqbOrderVo
vo
=
new
GoblinSqbOrderVo
();
vo
.
setOrderId
(
dbOrder
.
getOrderId
());
vo
.
setUserId
(
dbOrder
.
getUserId
());
vo
.
setPerformancesId
(
dbOrder
.
getPerformancesId
());
vo
.
setSpuId
(
dbOrder
.
getSpuId
());
vo
.
setSkuId
(
dbOrder
.
getSkuId
());
vo
.
setQuantity
(
dbOrder
.
getQuantity
());
vo
.
setAmount
(
dbOrder
.
getAmount
());
vo
.
setSqbOrderSn
(
dbOrder
.
getSqbOrderSn
());
vo
.
setSqbOrderSignature
(
dbOrder
.
getSqbOrderSignature
());
vo
.
setSqbAcquiringSn
(
dbOrder
.
getSqbAcquiringSn
());
vo
.
setSqbAcquiringSign
(
dbOrder
.
getSqbAcquiringSign
());
vo
.
setSqbCheckoutItemsId
(
dbOrder
.
getSqbCheckoutItemsId
());
vo
.
setCouponSn
(
dbOrder
.
getCouponSn
());
vo
.
setCouponQrCode
(
dbOrder
.
getCouponQrCode
());
vo
.
setCouponExpireTime
(
dbOrder
.
getCouponExpireTime
());
vo
.
setStatus
(
dbOrder
.
getStatus
());
vo
.
setRefundReason
(
dbOrder
.
getRefundReason
());
vo
.
setRefundSn
(
dbOrder
.
getSqbRefundSn
());
vo
.
setRefundSignature
(
dbOrder
.
getSqbRefundSignature
());
vo
.
setCreatedAt
(
dbOrder
.
getCreatedAt
());
vo
.
setUpdatedAt
(
dbOrder
.
getUpdatedAt
());
if
(
Integer
.
valueOf
(
2
).
equals
(
dbOrder
.
getStatus
()))
{
vo
.
setCouponUsedStatus
(
1
);
}
return
vo
;
}
catch
(
Exception
e
)
{
log
.
warn
(
"[收钱吧订单详情] sqbOrderVo 降级回源失败 orderId={}"
,
orderId
,
e
);
return
null
;
}
}
/**
* 构建收钱吧请求唯一ID,规则:AppCode(4位)+ id,总长不超过40位。
*
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/GoblinSqbRedisUtils.java
View file @
d7d8ae09
...
...
@@ -30,6 +30,14 @@ public class GoblinSqbRedisUtils {
redisUtil
.
set
(
GoblinRedisConst
.
SQB_ORDER
.
concat
(
orderId
),
vo
,
RedisKeyExpireConst
.
SQB_ORDER_EXPIRE
);
}
/**
* 写入收钱吧订单缓存(不过期)。
* 用于详情接口降级回源后补齐缓存,使其与 storeOrderVo 缓存策略一致。
*/
public
void
setSqbOrderForever
(
String
orderId
,
GoblinSqbOrderVo
vo
)
{
redisUtil
.
set
(
GoblinRedisConst
.
SQB_ORDER
.
concat
(
orderId
),
vo
);
}
public
GoblinSqbOrderVo
getSqbOrder
(
String
orderId
)
{
String
redisKey
=
GoblinRedisConst
.
SQB_ORDER
.
concat
(
orderId
);
Object
object
=
redisUtil
.
get
(
redisKey
);
...
...
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