记得上下班打卡 | 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
d31b13fa
Commit
d31b13fa
authored
Aug 06, 2025
by
姜秀龙
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master' into dev_user_refund
parents
b3a71150
92bb4c12
Changes
122
Show whitespace changes
Inline
Side-by-side
Showing
122 changed files
with
6358 additions
and
119 deletions
+6358
-119
GoblinRedisConst.java
...m/liquidnet/service/goblin/constant/GoblinRedisConst.java
+14
-0
GoblinBraceletOrderVo.java
...iquidnet/service/goblin/dto/vo/GoblinBraceletOrderVo.java
+262
-0
GoblinBraceletPayResultVo.java
...dnet/service/goblin/dto/vo/GoblinBraceletPayResultVo.java
+38
-0
GoblinBraceletRelatedOrderVo.java
...t/service/goblin/dto/vo/GoblinBraceletRelatedOrderVo.java
+19
-0
GoblinRechargeAmountVo.java
...quidnet/service/goblin/dto/vo/GoblinRechargeAmountVo.java
+35
-0
GoblinRechargeWristbandVo.java
...dnet/service/goblin/dto/vo/GoblinRechargeWristbandVo.java
+39
-0
MaiZhiAllVo.java
...java/com/liquidnet/service/goblin/dto/vo/MaiZhiAllVo.java
+219
-0
OrderStatus.java
.../java/com/liquidnet/service/goblin/enums/OrderStatus.java
+41
-0
PayStatus.java
...in/java/com/liquidnet/service/goblin/enums/PayStatus.java
+44
-0
GoblinBraceletOrderPayParam.java
...net/service/goblin/param/GoblinBraceletOrderPayParam.java
+40
-0
DougongJsPayData.java
...uidnet/service/goblin/param/dougong/DougongJsPayData.java
+38
-0
DougongRequestParam.java
...net/service/goblin/param/dougong/DougongRequestParam.java
+117
-0
DougongSyncCallbackRespData.java
...ice/goblin/param/dougong/DougongSyncCallbackRespData.java
+64
-0
DougongSyncCallbackparam.java
...ervice/goblin/param/dougong/DougongSyncCallbackparam.java
+20
-0
IGoblinBraceletOrderService.java
...t/service/goblin/service/IGoblinBraceletOrderService.java
+42
-0
IGoblinDougongPayService.java
...dnet/service/goblin/service/IGoblinDougongPayService.java
+15
-0
IGoblinRechargeAmountService.java
.../service/goblin/service/IGoblinRechargeAmountService.java
+16
-0
IGoblinRechargeWristbandService.java
...rvice/goblin/service/IGoblinRechargeWristbandService.java
+37
-0
KylinRedisConst.java
...com/liquidnet/service/kylin/constant/KylinRedisConst.java
+8
-0
LuckyBagStatusEnum.java
.../liquidnet/service/kylin/constant/LuckyBagStatusEnum.java
+30
-0
BannersParam.java
...a/com/liquidnet/service/kylin/dto/param/BannersParam.java
+3
-0
KylinBannersVo.java
...va/com/liquidnet/service/kylin/dto/vo/KylinBannersVo.java
+6
-0
KylinLuckyBagCodeDetailVo.java
...idnet/service/kylin/dto/vo/KylinLuckyBagCodeDetailVo.java
+97
-0
KylinLuckyBagScopeVo.java
.../liquidnet/service/kylin/dto/vo/KylinLuckyBagScopeVo.java
+26
-0
KylinLuckyBagVo.java
...a/com/liquidnet/service/kylin/dto/vo/KylinLuckyBagVo.java
+88
-0
IFeishuBotService.java
...om/liquidnet/service/kylin/service/IFeishuBotService.java
+7
-0
IKylinLuckyBagService.java
...iquidnet/service/kylin/service/IKylinLuckyBagService.java
+45
-0
IKylinPerformancesAdminService.java
...e/kylin/service/admin/IKylinPerformancesAdminService.java
+3
-0
SweetConstant.java
...a/com/liquidnet/service/sweet/constant/SweetConstant.java
+4
-0
SweetDouDouCheckParam.java
.../liquidnet/service/sweet/param/SweetDouDouCheckParam.java
+30
-0
SweetDouDouParam.java
...a/com/liquidnet/service/sweet/param/SweetDouDouParam.java
+36
-0
ISweetDoudouService.java
.../liquidnet/service/sweet/service/ISweetDoudouService.java
+38
-0
SweetDouDouActiveVo.java
...a/com/liquidnet/service/sweet/vo/SweetDouDouActiveVo.java
+66
-0
SweetDouDouScopeVo.java
...va/com/liquidnet/service/sweet/vo/SweetDouDouScopeVo.java
+56
-0
SweetDouDouVo.java
...in/java/com/liquidnet/service/sweet/vo/SweetDouDouVo.java
+55
-0
BannersDisplayLocation.java
...net/client/admin/common/enums/BannersDisplayLocation.java
+1
-0
KylinBannersAdminController.java
...ontroller/zhengzai/kylin/KylinBannersAdminController.java
+3
-3
KylinPerformancesController.java
...ontroller/zhengzai/kylin/KylinPerformancesController.java
+9
-3
banners.html
...n/resources/templates/zhengzai/kylin/banners/banners.html
+4
-0
create.html
...in/resources/templates/zhengzai/kylin/banners/create.html
+69
-24
update.html
...in/resources/templates/zhengzai/kylin/banners/update.html
+117
-8
KylinBannersServiceImpl.java
.../zhengzai/kylin/service/impl/KylinBannersServiceImpl.java
+38
-1
KylinPerformancesAdminServiceImpl.java
...kylin/service/impl/KylinPerformancesAdminServiceImpl.java
+15
-4
RedisKeyExpireConst.java
.../liquidnet/service/base/constant/RedisKeyExpireConst.java
+16
-0
SmsEnum.java
.../main/java/com/liquidnet/common/sms/constant/SmsEnum.java
+4
-2
liquidnet-service-goblin-dev.yml
...-config/liquidnet-config/liquidnet-service-goblin-dev.yml
+11
-1
liquidnet-service-goblin-test.yml
...config/liquidnet-config/liquidnet-service-goblin-test.yml
+11
-1
liquidnet-service-goblin.yml
...-bus-config/liquidnet-config/liquidnet-service-goblin.yml
+13
-1
liquidnet-service-kylin-dev.yml
...s-config/liquidnet-config/liquidnet-service-kylin-dev.yml
+2
-0
liquidnet-service-kylin-test.yml
...-config/liquidnet-config/liquidnet-service-kylin-test.yml
+3
-1
liquidnet-service-kylin-test2.yml
...config/liquidnet-config/liquidnet-service-kylin-test2.yml
+3
-1
liquidnet-service-kylin-yace.yml
...-config/liquidnet-config/liquidnet-service-kylin-yace.yml
+3
-1
liquidnet-service-kylin.yml
...t-bus-config/liquidnet-config/liquidnet-service-kylin.yml
+15
-1
liquidnet-service-sweet.yml
...t-bus-config/liquidnet-config/liquidnet-service-sweet.yml
+2
-0
GoblinBraceletOrder.java
.../liquidnet/service/goblin/entity/GoblinBraceletOrder.java
+218
-0
GoblinRechargeAmount.java
...liquidnet/service/goblin/entity/GoblinRechargeAmount.java
+54
-0
GoblinRechargeWristband.java
...uidnet/service/goblin/entity/GoblinRechargeWristband.java
+54
-0
GoblinBraceletOrderMapper.java
...dnet/service/goblin/mapper/GoblinBraceletOrderMapper.java
+15
-0
GoblinRechargeAmountMapper.java
...net/service/goblin/mapper/GoblinRechargeAmountMapper.java
+16
-0
GoblinRechargeWristbandMapper.java
.../service/goblin/mapper/GoblinRechargeWristbandMapper.java
+16
-0
GoblinRechargeAmountMapper.xml
...blin-do/src/main/resources/GoblinRechargeAmountMapper.xml
+5
-0
GoblinRechargeWristbandMapper.xml
...n-do/src/main/resources/GoblinRechargeWristbandMapper.xml
+5
-0
BannerDetailsListDao.java
...com/liquidnet/service/kylin/dao/BannerDetailsListDao.java
+10
-0
KylinBanners.java
...java/com/liquidnet/service/kylin/entity/KylinBanners.java
+10
-0
KylinBrands.java
.../java/com/liquidnet/service/kylin/entity/KylinBrands.java
+76
-0
KylinLuckyBag.java
...ava/com/liquidnet/service/kylin/entity/KylinLuckyBag.java
+90
-0
KylinLuckyBagActivity.java
...liquidnet/service/kylin/entity/KylinLuckyBagActivity.java
+68
-0
KylinLuckyBagScope.java
...om/liquidnet/service/kylin/entity/KylinLuckyBagScope.java
+59
-0
KylinRewardCode.java
...a/com/liquidnet/service/kylin/entity/KylinRewardCode.java
+47
-0
KylinRewardUser.java
...a/com/liquidnet/service/kylin/entity/KylinRewardUser.java
+69
-0
KylinBrandsMapper.java
...com/liquidnet/service/kylin/mapper/KylinBrandsMapper.java
+8
-0
KylinLuckyBagActivityMapper.java
...net/service/kylin/mapper/KylinLuckyBagActivityMapper.java
+7
-0
KylinLuckyBagMapper.java
...m/liquidnet/service/kylin/mapper/KylinLuckyBagMapper.java
+8
-0
KylinLuckyBagScopeMapper.java
...uidnet/service/kylin/mapper/KylinLuckyBagScopeMapper.java
+7
-0
KylinRewardCodeMapper.java
...liquidnet/service/kylin/mapper/KylinRewardCodeMapper.java
+16
-0
KylinRewardUserMapper.java
...liquidnet/service/kylin/mapper/KylinRewardUserMapper.java
+7
-0
SweetDoudou.java
.../java/com/liquidnet/service/sweet/entity/SweetDoudou.java
+89
-0
SweetDoudouActive.java
...com/liquidnet/service/sweet/entity/SweetDoudouActive.java
+80
-0
SweetDoudouScope.java
.../com/liquidnet/service/sweet/entity/SweetDoudouScope.java
+55
-0
SweetDoudouActiveMapper.java
...quidnet/service/sweet/mapper/SweetDoudouActiveMapper.java
+17
-0
SweetDoudouMapper.java
...com/liquidnet/service/sweet/mapper/SweetDoudouMapper.java
+16
-0
SweetDoudouScopeMapper.java
...iquidnet/service/sweet/mapper/SweetDoudouScopeMapper.java
+17
-0
SweetDoudouActiveMapper.xml
...iquidnet.service.sweet.mapper/SweetDoudouActiveMapper.xml
+5
-0
SweetDoudouMapper.xml
.../com.liquidnet.service.sweet.mapper/SweetDoudouMapper.xml
+5
-0
SweetDoudouScopeMapper.xml
...liquidnet.service.sweet.mapper/SweetDoudouScopeMapper.xml
+5
-0
FeignGoblinTaskClient.java
...dnet/service/feign/goblin/task/FeignGoblinTaskClient.java
+6
-0
GoblinTaskHandler.java
...dnet/service/executor/main/handler/GoblinTaskHandler.java
+20
-0
goblin_recharge.sql
...in/liquidnet-service-goblin-impl/docu/goblin_recharge.sql
+67
-0
pom.xml
...dnet-service-goblin/liquidnet-service-goblin-impl/pom.xml
+6
-0
ServiceGoblinApplication.java
.../java/com/liquidnet/service/ServiceGoblinApplication.java
+2
-0
AppProperties.java
...idnet/service/goblin/config/properties/AppProperties.java
+36
-0
GoblinBraceletOrderController.java
...vice/goblin/controller/GoblinBraceletOrderController.java
+76
-0
GoblinRechargeAmountController.java
...ice/goblin/controller/GoblinRechargeAmountController.java
+162
-0
GoblinMaiZhiJobController.java
...ce/goblin/controller/Inner/GoblinMaiZhiJobController.java
+36
-0
GoblinBraceletOrderServiceImpl.java
...e/goblin/service/impl/GoblinBraceletOrderServiceImpl.java
+340
-0
GoblinDougongPayServiceImpl.java
...vice/goblin/service/impl/GoblinDougongPayServiceImpl.java
+108
-0
GoblinRechargeAmountServiceImpl.java
.../goblin/service/impl/GoblinRechargeAmountServiceImpl.java
+20
-0
GoblinRechargeWristbandServiceImpl.java
...blin/service/impl/GoblinRechargeWristbandServiceImpl.java
+322
-0
DougongSignUtils.java
...a/com/liquidnet/service/goblin/util/DougongSignUtils.java
+69
-0
GoblinRedisUtils.java
...a/com/liquidnet/service/goblin/util/GoblinRedisUtils.java
+125
-0
ThirdMaiZhiUtils.java
...a/com/liquidnet/service/goblin/util/ThirdMaiZhiUtils.java
+290
-0
sqlmap.properties
...-service-goblin-impl/src/main/resources/sqlmap.properties
+7
-1
GoblinBraceletOrderServiceTest.java
...t/service/goblin/test/GoblinBraceletOrderServiceTest.java
+39
-0
GoblinDougongPayServiceImplTest.java
.../service/goblin/test/GoblinDougongPayServiceImplTest.java
+90
-0
ServiceKylinApplication.java
...n/java/com/liquidnet/service/ServiceKylinApplication.java
+2
-0
KylinBannersController.java
...dnet/service/kylin/controller/KylinBannersController.java
+5
-3
KylinLuckyBagController.java
...net/service/kylin/controller/KylinLuckyBagController.java
+56
-0
BannersServiceImpl.java
...uidnet/service/kylin/service/impl/BannersServiceImpl.java
+10
-2
FeishuBotServiceImpl.java
...dnet/service/kylin/service/impl/FeishuBotServiceImpl.java
+34
-0
KylinLuckyBagServiceImpl.java
.../service/kylin/service/impl/KylinLuckyBagServiceImpl.java
+506
-0
KylinOrderTicketsRefundServiceImpl.java
...ylin/service/impl/KylinOrderTicketsRefundServiceImpl.java
+2
-1
KylinOrderTicketsServiceImpl.java
...vice/kylin/service/impl/KylinOrderTicketsServiceImpl.java
+1
-1
DataUtils.java
...ain/java/com/liquidnet/service/kylin/utils/DataUtils.java
+91
-4
errors.properties
...t-service-kylin-impl/src/main/resources/errors.properties
+52
-46
KylinOrderTicketsServiceImpl.java
...vice/order/service/impl/KylinOrderTicketsServiceImpl.java
+10
-2
db_20250604_doudou.sql
...rvice/liquidnet-service-sweet/docu/db_20250604_doudou.sql
+47
-0
db_20250626_doudouV2.sql
...ice/liquidnet-service-sweet/docu/db_20250626_doudouV2.sql
+18
-0
SweetDoudouController.java
...idnet/service/sweet/controller/SweetDoudouController.java
+77
-0
SweetDoudouServiceImpl.java
...et/service/sweet/service/impl/SweetDoudouServiceImpl.java
+360
-0
RedisDataUtils.java
...ava/com/liquidnet/service/sweet/utils/RedisDataUtils.java
+61
-0
errors.properties
...uidnet-service-sweet/src/main/resources/errors.properties
+13
-6
sqlmap.properties
...uidnet-service-sweet/src/main/resources/sqlmap.properties
+1
-1
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/constant/GoblinRedisConst.java
View file @
d31b13fa
...
...
@@ -356,6 +356,20 @@ public class GoblinRedisConst {
public
static
final
String
GOBLIN_MIX_RESERVE_UID
=
PREFIX
.
concat
(
"mix:reserve:uid:"
);
//$mixId:$uid 混合售用户预约保存
// 迈之
// 充值配置的需要充值金额的列表
public
static
final
String
GOBLIN_RECHARGE_WRISTBAND
=
PREFIX
.
concat
(
"recharge:wristband"
);
// 迈之的accessToken
public
static
final
String
GOBLIN_RECHARGE_MAIZHI_TOKEN
=
PREFIX
.
concat
(
"recharge:maizhitoken"
);
// 获取设备编号定时任务最后一次的时间
public
static
final
String
GOBLIN_RECHARGE_DEVICE_NUMBER_ENDTIME
=
PREFIX
.
concat
(
"recharge:deviceNumber:endtime:operationNo:"
);
// 通过分订单号获取订单 id
public
static
final
String
GOBLIN_RECHARGE_FOUT_TRADE_NO
=
PREFIX
.
concat
(
"recharge:foutTradeNo:"
);
// 手环订单
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/GoblinBraceletOrderVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.goblin.entity.GoblinBraceletOrder
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
org.springframework.beans.BeanUtils
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
/**
* 手环-订单VO
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ApiModel
(
value
=
"手环订单vo"
)
public
class
GoblinBraceletOrderVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 订单ID
*/
@ApiModelProperty
(
value
=
"订单ID"
)
private
String
orderId
;
/**
* 用户ID
*/
@ApiModelProperty
(
value
=
"用户ID"
)
private
String
userId
;
/**
* 绑定用户姓名
*/
@ApiModelProperty
(
value
=
"绑定用户姓名"
)
private
String
bindName
;
/**
* 绑定用户手机号
*/
@ApiModelProperty
(
value
=
"绑定用户手机号"
)
private
String
bindMobile
;
/**
* 绑定用户身份证号码
*/
@ApiModelProperty
(
value
=
"绑定用户身份证号码"
)
private
String
bindIdcard
;
/**
* 请求日期
*/
@ApiModelProperty
(
value
=
"请求日期"
)
private
String
reqDate
;
/**
* 商品描述
*/
@ApiModelProperty
(
value
=
"商品描述"
)
private
String
goodsDesc
;
/**
* 手环ID
*/
@ApiModelProperty
(
value
=
"手环ID"
)
private
String
wristbandId
;
/**
*手环金额
*/
@ApiModelProperty
(
value
=
"手环金额"
)
private
BigDecimal
wristbandPrice
;
/**
*充值金额ID
*/
@ApiModelProperty
(
value
=
"充值金额ID"
)
private
String
amountId
;
/**
*充值金额
*/
@ApiModelProperty
(
value
=
"充值金额"
)
private
BigDecimal
amountPrice
;
/**
* 请求流水号
*/
@ApiModelProperty
(
value
=
"请求流水号"
)
private
String
reqSeqId
;
/**
* 全局流水号
*/
@ApiModelProperty
(
value
=
"全局流水号"
)
private
String
hfSeqId
;
/**
* 交易类型:
* T_JSAPI: 微信公众号支付
* T_MINIAPP: 微信小程序支付
* A_JSAPI: 支付宝JS
* A_NATIVE: 支付宝正扫
* U_NATIVE: 银联正扫
* U_JSAPI: 银联 JS
* D_NATIVE: 数字人民币正扫
* T_H5:微信直连H5支付
* T_APP:微信APP支付
* T_NATIVE:微信正扫
*/
@ApiModelProperty
(
value
=
"交易类型"
)
private
String
tradeType
;
/**
* 用户账单上的交易订单号
*/
@ApiModelProperty
(
value
=
"用户账单上的交易订单号"
)
private
String
outTransId
;
/**
* 用户账单上的商户订单号
*/
@ApiModelProperty
(
value
=
"用户账单上的商户订单号"
)
private
String
partyOrderId
;
/**
* 支付完成时间 格式yyyyMMddHHmmss
*/
@ApiModelProperty
(
value
=
"支付完成时间 格式yyyyMMddHHmmss"
)
private
String
endTime
;
/**
* 入账时间 格式为yyyyMMdd
*/
@ApiModelProperty
(
value
=
"入账时间 格式为yyyyMMdd"
)
private
String
acctDate
;
/**
* 单价
*/
@ApiModelProperty
(
value
=
"单价"
)
private
BigDecimal
price
;
/**
* 应付价格
*/
@ApiModelProperty
(
value
=
"应付价格"
)
private
BigDecimal
priceTotal
;
/**
* 实付价格
*/
@ApiModelProperty
(
value
=
"实付价格"
)
private
BigDecimal
priceActual
;
/**
* 退款价格
*/
@ApiModelProperty
(
value
=
"退款价格"
)
private
BigDecimal
priceRefund
;
/**
* 退款扣除的手续费金额
*/
@ApiModelProperty
(
value
=
"退款扣除的手续费金额"
)
private
BigDecimal
refundPriceCharges
;
/**
* 退款数
*/
@ApiModelProperty
(
value
=
"退款数"
)
private
Integer
refundNumber
;
/**
* 支付时间
*/
@ApiModelProperty
(
value
=
"支付时间"
)
private
String
timePay
;
/**
* 订单状态:
* 0 待付款
* 1 已付款
* 2 已关闭
* 3 正在退款
* 4 已退款
* 5 待关闭
* 6 部分退款
* 7 退款失败
*/
@ApiModelProperty
(
value
=
"订单状态"
)
private
Integer
status
;
/**
* 支付状态:
* 0 未支付
* 1 已支付
* 2 支付失败
*/
@ApiModelProperty
(
value
=
"支付状态"
)
private
Integer
payStatus
;
/**
* 迈之的分订单号
*/
@ApiModelProperty
(
value
=
"迈之的分订单号"
)
private
String
foutTradeNo
;
/**
* 迈之的设备编号
*/
@ApiModelProperty
(
value
=
"迈之的设备编号"
)
private
String
cardno
;
/**
* 迈之的分订单号
*/
@ApiModelProperty
(
value
=
"迈之的分订单号"
)
private
Integer
refundStatus
;
/**
* 迈之的设备编号
*/
@ApiModelProperty
(
value
=
"迈之的设备编号"
)
private
String
refundStatusNote
;
/**
* 创建时间
*/
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
createdAt
;
/**
* 更新时间
*/
@ApiModelProperty
(
value
=
"更新时间"
)
private
LocalDateTime
updatedAt
;
private
static
final
GoblinBraceletOrderVo
obj
=
new
GoblinBraceletOrderVo
();
public
static
GoblinBraceletOrderVo
getNew
()
{
try
{
return
(
GoblinBraceletOrderVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
e
.
printStackTrace
();
}
return
new
GoblinBraceletOrderVo
();
}
public
GoblinBraceletOrderVo
copy
(
GoblinBraceletOrder
goblinBraceletOrder
){
if
(
goblinBraceletOrder
==
null
)
return
this
;
BeanUtils
.
copyProperties
(
goblinBraceletOrder
,
this
);
return
this
;
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinBraceletPayResultVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ApiModel
(
value
=
"手环下单结果vo"
)
public
class
GoblinBraceletPayResultVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
position
=
1
,
value
=
"订单ID"
)
private
String
orderId
;
@ApiModelProperty
(
position
=
3
,
value
=
"价格"
)
private
BigDecimal
price
;
@ApiModelProperty
(
position
=
5
,
value
=
"三方支付信息"
)
private
Object
payInfo
;
private
static
final
GoblinBraceletPayResultVo
obj
=
new
GoblinBraceletPayResultVo
();
public
static
GoblinBraceletPayResultVo
getNew
()
{
try
{
return
(
GoblinBraceletPayResultVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
e
.
printStackTrace
();
}
return
new
GoblinBraceletPayResultVo
();
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinBraceletRelatedOrderVo.java
0 → 100644
View file @
d31b13fa
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/dto/vo/GoblinRechargeAmountVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
GoblinRechargeAmountVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
" 金额ID"
)
private
String
amountId
;
@ApiModelProperty
(
value
=
"金额名称"
)
private
String
name
;
@ApiModelProperty
(
value
=
"充值金额"
)
private
BigDecimal
price
;
private
final
static
GoblinRechargeAmountVo
obj
=
new
GoblinRechargeAmountVo
();
public
static
GoblinRechargeAmountVo
getNew
()
{
try
{
return
(
GoblinRechargeAmountVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
GoblinRechargeAmountVo
();
}
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinRechargeWristbandVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.List
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
GoblinRechargeWristbandVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
" 手环ID"
)
private
String
wristbandId
;
@ApiModelProperty
(
value
=
"手环名称"
)
private
String
name
;
@ApiModelProperty
(
value
=
"手环价格"
)
private
BigDecimal
price
;
@ApiModelProperty
(
value
=
"充值金额"
)
private
List
<
GoblinRechargeAmountVo
>
amonutList
;
private
final
static
GoblinRechargeWristbandVo
obj
=
new
GoblinRechargeWristbandVo
();
public
static
GoblinRechargeWristbandVo
getNew
()
{
try
{
return
(
GoblinRechargeWristbandVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
GoblinRechargeWristbandVo
();
}
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/MaiZhiAllVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* <p>
* xx 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03 17:38
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
MaiZhiAllVo
{
// 基础响应类
@Data
public
static
class
BaseResponse
<
T
>
{
private
String
msg
;
private
Integer
errcode
;
private
T
data
;
}
// 登录授权
@Data
public
static
class
AuthParam
{
private
String
appid
;
private
String
appSecret
;
}
@Data
public
static
class
AuthResponse
extends
BaseResponse
<
AuthResponse
.
DataRes
>
{
@Data
public
static
class
DataRes
{
private
String
accessToken
;
private
Integer
expire
;
}
}
// 实名
@Data
public
static
class
IdCardParam
{
@ApiModelProperty
(
value
=
"姓名"
)
private
String
name
;
@ApiModelProperty
(
value
=
"身份证"
)
private
String
idcard
;
}
@Data
public
static
class
CheckIdcardResponse
{
private
String
message
;
private
String
msg
;
private
Integer
result
;
private
String
resultDesc
;
private
Integer
gender
;
private
Integer
age
;
private
String
area
;
private
Integer
errcode
;
}
// 新增订单
@Data
public
static
class
OrderParam
implements
Cloneable
{
private
String
operationNo
;
private
String
out_trade_no
;
private
String
dgoid
;
private
BigDecimal
receipt_amount
;
private
Integer
total
;
private
String
payTime
;
private
List
<
User
>
userList
;
@Data
public
static
class
User
implements
Cloneable
{
private
String
name
;
private
String
phone
;
private
String
idcard
;
private
BigDecimal
money
;
private
static
final
User
obj
=
new
User
();
public
static
User
getNew
()
{
try
{
return
(
User
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
e
.
printStackTrace
();
}
return
new
User
();
}
}
private
static
final
OrderParam
obj
=
new
OrderParam
();
public
static
OrderParam
getNew
()
{
try
{
return
(
OrderParam
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
e
.
printStackTrace
();
}
return
new
OrderParam
();
}
}
@Data
public
static
class
OrderResponse
extends
BaseResponse
<
String
>
{
}
// 订单查询
@Data
public
static
class
OrderInfoParam
implements
Cloneable
{
private
List
<
String
>
orderList
;
private
static
final
OrderInfoParam
obj
=
new
OrderInfoParam
();
public
static
OrderInfoParam
getNew
()
{
try
{
return
(
OrderInfoParam
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
e
.
printStackTrace
();
}
return
new
OrderInfoParam
();
}
}
@Data
public
static
class
OrderInfoResponse
{
private
Integer
errcode
;
private
List
<
OrderList
>
outlist
;
@Data
public
static
class
OrderList
{
private
String
out_trade_no
;
private
Integer
status
;
private
BigDecimal
receipt_amount
;
private
String
time
;
private
List
<
UserOrder
>
user_order
;
@Data
public
static
class
UserOrder
{
private
String
fout_trade_no
;
private
Integer
status
;
private
String
name
;
private
String
phone
;
private
String
idcard
;
private
BigDecimal
money
;
}
}
}
// 核销码
@Data
public
static
class
GenerateDeviceCodeResponse
{
private
String
qrcode_str
;
private
Integer
errcode
;
}
// 设备编号获取
@Data
public
static
class
DeviceNumberResponse
{
private
List
<
NumberList
>
list
;
private
Integer
errcode
;
@Data
public
static
class
NumberList
{
private
String
fout_trade_no
;
private
String
cardno
;
}
}
// 设备余额
@Data
public
static
class
DeviceBalanceResponse
{
private
String
cardno
;
private
BigDecimal
money
;
private
String
time
;
private
String
msg
;
private
Integer
errcode
;
}
// 设备记录查询
@Data
public
static
class
DeviceRecordResponse
{
private
List
<
Record
>
list
;
private
String
msg
;
private
Integer
errcode
;
private
String
cardno
;
private
Integer
total
;
private
Integer
page
;
@Data
public
static
class
Record
{
private
String
note
;
private
BigDecimal
amt
;
private
BigDecimal
ftbal
;
private
String
time
;
}
}
// 变更设备状态
@Data
public
static
class
ChangeDeviceStatusResponse
implements
Cloneable
{
private
String
msg
;
private
Integer
errcode
;
private
Integer
status
;
private
String
note
;
private
static
final
ChangeDeviceStatusResponse
obj
=
new
ChangeDeviceStatusResponse
();
public
static
ChangeDeviceStatusResponse
getNew
()
{
try
{
return
(
ChangeDeviceStatusResponse
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
e
.
printStackTrace
();
}
return
new
ChangeDeviceStatusResponse
();
}
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/enums/OrderStatus.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
enums
;
/**
* 订单状态枚举
*/
public
enum
OrderStatus
{
PENDING_PAYMENT
(
0
,
"待付款"
),
PAID
(
1
,
"已付款"
),
CLOSED
(
2
,
"已关闭"
),
REFUNDING
(
3
,
"正在退款"
),
REFUNDED
(
4
,
"已退款"
),
PENDING_CLOSE
(
5
,
"待关闭"
),
PARTIAL_REFUND
(
6
,
"部分退款"
);
private
final
int
code
;
private
final
String
description
;
OrderStatus
(
int
code
,
String
description
)
{
this
.
code
=
code
;
this
.
description
=
description
;
}
public
int
getCode
()
{
return
code
;
}
public
String
getDescription
()
{
return
description
;
}
// 通过code获取对应的枚举值
public
static
OrderStatus
fromCode
(
int
code
)
{
for
(
OrderStatus
status
:
values
())
{
if
(
status
.
getCode
()
==
code
)
{
return
status
;
}
}
throw
new
IllegalArgumentException
(
"无效的状态码: "
+
code
);
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/enums/PayStatus.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
enums
;
/**
* 支付状态枚举
*/
public
enum
PayStatus
{
NOT_PAID
(
0
,
"未支付"
),
PAID
(
1
,
"已支付"
),
PAYMENT_FAILED
(
2
,
"支付失败"
);
private
final
int
code
;
private
final
String
description
;
PayStatus
(
int
code
,
String
description
)
{
this
.
code
=
code
;
this
.
description
=
description
;
}
public
int
getCode
()
{
return
code
;
}
public
String
getDescription
()
{
return
description
;
}
// 根据 code 获取枚举实例
public
static
PayStatus
fromCode
(
int
code
)
{
for
(
PayStatus
status
:
values
())
{
if
(
status
.
getCode
()
==
code
)
{
return
status
;
}
}
throw
new
IllegalArgumentException
(
"无效的支付状态码: "
+
code
);
}
@Override
public
String
toString
()
{
return
description
;
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/GoblinBraceletOrderPayParam.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
java.io.Serializable
;
@ApiModel
(
value
=
"GoblinBraceletOrderPayParam"
,
description
=
"手环下单请求参数"
)
@Data
public
class
GoblinBraceletOrderPayParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"手环ID"
)
@NotBlank
(
message
=
"wristbandId不能为空"
)
private
String
wristbandId
;
@ApiModelProperty
(
value
=
"金额ID"
)
@NotBlank
(
message
=
"金额ID不能为空"
)
private
String
amountId
;
@ApiModelProperty
(
value
=
"姓名"
)
@NotBlank
(
message
=
"绑定姓名不能为空"
)
private
String
name
;
@ApiModelProperty
(
value
=
"手机号"
)
@NotBlank
(
message
=
"绑定手机号不能为空"
)
private
String
mobile
;
@ApiModelProperty
(
value
=
"身份证号码"
)
@NotBlank
(
message
=
"绑定身份证号码不能为空"
)
private
String
idCard
;
@ApiModelProperty
(
value
=
"子商户用户标识"
)
@NotBlank
(
message
=
"openId不能为空"
)
private
String
subOpenId
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/dougong/DougongJsPayData.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
param
.
dougong
;
import
lombok.Data
;
import
java.util.List
;
/**
* 调用斗拱业务层参数
*/
@Data
public
class
DougongJsPayData
{
// 请求日期
private
String
reqDate
;
// 请求流水号
private
String
reqSeqId
;
// 交易类型
private
String
tradeType
;
// 商品描述
private
String
goodsDesc
;
// 交易总金额
private
String
transAmt
;
// 交易有效期
private
String
timeExpire
;
// 商品列表
private
List
<
DougongRequestParam
.
WxDataGoodsDetail
>
goodsDetailList
;
// 子商户用户标识
private
String
subOpenid
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/dougong/DougongRequestParam.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
param
.
dougong
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
/**
* 斗拱-请求jspay-参数
*/
@Data
public
class
DougongRequestParam
{
// 请求日期
@JsonProperty
(
"req_date"
)
private
String
reqDate
;
// 请求流水号
@JsonProperty
(
"req_seq_id"
)
private
String
reqSeqId
;
// 商户号
@JsonProperty
(
"huifu_id"
)
private
String
huifuId
;
// 商品描述
@JsonProperty
(
"goods_desc"
)
private
String
goodsDesc
;
//交易类型
//T_JSAPI: 微信公众号
//T_MINIAPP: 微信小程序
//A_JSAPI: 支付宝JS
//A_NATIVE: 支付宝正扫
//U_NATIVE: 银联正扫
//U_JSAPI: 银联JS
//D_NATIVE: 数字人民币正扫
//T_H5:微信直连H5支付
//T_APP:微信APP支付
//T_NATIVE:微信正扫
@JsonProperty
(
"trade_type"
)
private
String
tradeType
;
// 交易金额
@JsonProperty
(
"trans_amt"
)
private
String
transAmt
;
// 交易有效期
@JsonProperty
(
"time_expire"
)
private
String
timeExpire
;
// 微信参数集合 WxData
@JsonProperty
(
"wx_data"
)
private
String
wxData
;
// 是否延迟交易
@JsonProperty
(
"delay_acct_flag"
)
private
String
delayAcctFlag
=
"N"
;
// 异步通知地址
@JsonProperty
(
"notify_url"
)
private
String
notifyUrl
;
@Data
public
static
class
WxData
{
//子商户应用ID
@JsonProperty
(
"sub_appid"
)
private
String
subAppid
;
// 子商户用户标识
@JsonProperty
(
"sub_openid"
)
private
String
subOpenid
;
//商品描述
@JsonProperty
(
"body"
)
private
String
body
;
// 商品详情
@JsonProperty
(
"detail"
)
private
WxDataDetail
detail
;
}
@Data
public
static
class
WxDataDetail
{
@JsonProperty
(
"cost_price"
)
private
String
costPrice
;
@JsonProperty
(
"goods_detail"
)
private
List
<
WxDataGoodsDetail
>
goodsDetail
;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public
static
class
WxDataGoodsDetail
{
// 商品编码
@JsonProperty
(
"goods_id"
)
private
String
goodsId
;
// 商品名称
@JsonProperty
(
"goods_name"
)
private
String
goodsName
;
// 商品单价(元)
@JsonProperty
(
"price"
)
private
String
price
;
// 商品数量
@JsonProperty
(
"quantity"
)
private
Integer
quantity
;
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/dougong/DougongSyncCallbackRespData.java
0 → 100644
View file @
d31b13fa
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/param/dougong/DougongSyncCallbackparam.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
param
.
dougong
;
import
lombok.Data
;
/**
* 异步返回参数
* 公共返回
*/
@Data
public
class
DougongSyncCallbackparam
{
private
String
respCode
;
private
String
respDesc
;
private
String
sign
;
private
String
respData
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinBraceletOrderService.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.vo.GoblinBraceletOrderVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinBraceletPayResultVo
;
import
com.liquidnet.service.goblin.entity.GoblinBraceletOrder
;
import
com.liquidnet.service.goblin.param.GoblinBraceletOrderPayParam
;
import
com.liquidnet.service.goblin.param.dougong.DougongSyncCallbackparam
;
import
java.util.List
;
import
java.util.Map
;
public
interface
IGoblinBraceletOrderService
extends
IService
<
GoblinBraceletOrder
>
{
/**
* 下单
* @param payParam
* @return
*/
ResponseDto
<
GoblinBraceletPayResultVo
>
checkOrder
(
GoblinBraceletOrderPayParam
payParam
);
/**
* 校验订单状态
*
* @param orderId
* @return
*/
ResponseDto
<
Map
<
String
,
Object
>>
checkOrderResult
(
String
orderId
);
/**
* 斗拱支付回调
* @return
*/
ResponseDto
<
Boolean
>
dougongCallBack
(
DougongSyncCallbackparam
callbackparam
);
/**
* 获取订单列表
* @return
*/
List
<
GoblinBraceletOrderVo
>
getOrderList
();
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinDougongPayService.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.liquidnet.service.goblin.param.dougong.DougongJsPayData
;
import
java.util.Map
;
public
interface
IGoblinDougongPayService
{
/**
* @return
*/
Map
<
String
,
Object
>
jsPay
(
DougongJsPayData
data
);
boolean
verifySign
(
String
data
,
String
sign
);
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinRechargeAmountService.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.liquidnet.service.goblin.entity.GoblinRechargeAmount
;
import
com.baomidou.mybatisplus.extension.service.IService
;
/**
* <p>
* 充值金额选项表 服务类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public
interface
IGoblinRechargeAmountService
extends
IService
<
GoblinRechargeAmount
>
{
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinRechargeWristbandService.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.liquidnet.service.goblin.dto.vo.GoblinRechargeWristbandVo
;
import
com.liquidnet.service.goblin.dto.vo.MaiZhiAllVo.*
;
import
com.liquidnet.service.goblin.entity.GoblinRechargeWristband
;
/**
* <p>
* 手环信息表 服务类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public
interface
IGoblinRechargeWristbandService
extends
IService
<
GoblinRechargeWristband
>
{
GoblinRechargeWristbandVo
getList
();
CheckIdcardResponse
auth
(
IdCardParam
param
);
OrderResponse
createOrder
(
OrderParam
param
,
String
orderId
);
OrderInfoResponse
getOrder
(
OrderInfoParam
param
,
String
orderId
);
GenerateDeviceCodeResponse
getQrcode
(
String
outno
);
Boolean
getDeviceNumber
(
Integer
operationNo
);
DeviceBalanceResponse
getDeviceBalance
(
String
cardno
);
DeviceRecordResponse
getDeviceRecord
(
String
cardno
,
Integer
page
);
ChangeDeviceStatusResponse
changeDeviceStatus
(
String
orderId
,
int
type
);
Boolean
refundRes
();
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/constant/KylinRedisConst.java
View file @
d31b13fa
...
...
@@ -120,4 +120,12 @@ public class KylinRedisConst {
public
static
final
String
ORDER_AR_CODE
=
"kylin:ar:order:"
;
//$key + $orderId
/**
* 福袋相关
*/
// 福袋活动
public
static
final
String
LUCKY_BAG_ACTIVITY
=
"kylin:luckybag:activity"
;
public
static
final
String
LUCKY_BAG
=
"kylin:luckybag"
;
public
static
final
String
LUCKY_BAG_CODE_LOCK
=
"kylin:luckybag:code:lock:"
;
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/constant/LuckyBagStatusEnum.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
constant
;
import
lombok.Getter
;
@Getter
public
enum
LuckyBagStatusEnum
{
// 兑换码显示类型
CODE_SHOW_TYPE_CODE
(
1
,
"兑换码"
),
CODE_SHOW_TYPE_QR_CODE
(
2
,
"二维码"
),
// 解锁状态
UNLOCK_STATUS_NOT_UNLOCKED
(
0
,
"未解锁"
),
UNLOCK_STATUS_UNLOCKED
(
1
,
"已解锁"
),
// 可用状态
AVAILABLE_STATUS_UNAVAILABLE
(
0
,
"不可用"
),
AVAILABLE_STATUS_AVAILABLE
(
1
,
"可用"
),
AVAILABLE_STATUS_RECEIVED
(
2
,
"已领取"
);
private
final
Integer
value
;
private
final
String
desc
;
LuckyBagStatusEnum
(
Integer
value
,
String
desc
)
{
this
.
value
=
value
;
this
.
desc
=
desc
;
}
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/param/BannersParam.java
View file @
d31b13fa
...
...
@@ -75,6 +75,9 @@ public class BannersParam implements Serializable {
@ApiModelProperty
(
value
=
"推广省份 多选 数组"
,
example
=
"[\"北京市\", \"天津市\", \"沈阳市\"]"
)
private
List
provincesNameList
;
@ApiModelProperty
(
value
=
"演出ID"
)
private
String
performanceId
;
@JsonIgnore
public
KylinBanners
getFields
(
String
bannersId
,
String
createdAt
)
{
KylinBanners
fields
=
new
KylinBanners
();
...
...
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/KylinBannersVo.java
View file @
d31b13fa
...
...
@@ -77,4 +77,10 @@ public class KylinBannersVo implements Serializable {
@ApiModelProperty
(
value
=
"修改时间"
)
private
String
updatedAt
;
@ApiModelProperty
(
value
=
"演出ID"
)
private
String
performanceId
;
@ApiModelProperty
(
value
=
"演出名称"
)
private
String
performanceName
;
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/KylinLuckyBagCodeDetailVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
dto
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.databind.annotation.JsonDeserialize
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer
;
import
com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
@Data
@ApiModel
(
value
=
"福袋兑换码详情VO"
)
public
class
KylinLuckyBagCodeDetailVo
{
@ApiModelProperty
(
value
=
"福袋ID"
)
private
String
luckyBagId
;
@ApiModelProperty
(
value
=
"福袋名称"
)
private
String
luckyBagName
;
@ApiModelProperty
(
value
=
"兑换码"
)
private
String
code
;
@ApiModelProperty
(
value
=
"状态 0:不可用 1:可用 2:已领取"
)
private
int
useStatus
;
@ApiModelProperty
(
value
=
"发放时间"
)
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
createdAt
;
@ApiModelProperty
(
value
=
"领取时间"
)
@JsonDeserialize
(
using
=
LocalDateTimeDeserializer
.
class
)
@JsonSerialize
(
using
=
LocalDateTimeSerializer
.
class
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
updatedAt
;
@ApiModelProperty
(
value
=
"领取人信息"
)
private
UserInfo
userInfo
;
@ApiModelProperty
(
value
=
"关联订单订单"
)
private
OrderInfo
orderInfo
;
@ApiModelProperty
(
value
=
"核验人"
)
private
Operator
operator
;
@ApiModel
(
value
=
"用户信息"
)
@Data
public
static
class
UserInfo
{
@ApiModelProperty
(
value
=
"用户ID"
)
private
String
uid
;
@ApiModelProperty
(
value
=
"用户昵称"
)
private
String
userName
;
@ApiModelProperty
(
value
=
"用户手机号"
)
private
String
userMobile
;
}
@ApiModel
(
value
=
"订单信息"
)
@Data
public
static
class
OrderInfo
{
@ApiModelProperty
(
value
=
"订单ID"
)
private
String
orderId
;
@ApiModelProperty
(
position
=
15
,
value
=
"订单号"
)
private
String
orderCode
;
@ApiModelProperty
(
value
=
"演出名称"
)
private
String
performanceTitle
;
@ApiModelProperty
(
value
=
"票种名称"
)
private
String
ticketTitle
;
@ApiModelProperty
(
value
=
"数量"
)
private
Integer
number
;
@ApiModelProperty
(
value
=
"退款张数"
)
private
Integer
refundNumber
;
@ApiModelProperty
(
value
=
"订单生成时间"
)
private
String
createdAt
;
@ApiModelProperty
(
value
=
"适用时间"
)
private
String
useStart
;
}
@ApiModel
(
value
=
"和燕人"
)
@Data
@AllArgsConstructor
public
static
class
Operator
{
@ApiModelProperty
(
value
=
"手机号"
)
private
String
mobile
;
@ApiModelProperty
(
value
=
"昵称"
)
private
String
nickName
;
}
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/KylinLuckyBagScopeVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
@Data
@ApiModel
(
value
=
"福袋Scope VO"
)
public
class
KylinLuckyBagScopeVo
{
@ApiModelProperty
(
value
=
"福袋ID"
)
private
String
luckyBagId
;
@ApiModelProperty
(
value
=
"福袋名称"
)
private
String
name
;
@ApiModelProperty
(
value
=
"福袋描述"
)
private
String
introduction
;
@ApiModelProperty
(
value
=
"关联演出ID"
)
private
String
performanceId
;
@ApiModelProperty
(
value
=
"关联演出名称"
)
private
String
performanceName
;
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/KylinLuckyBagVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Collections
;
import
java.util.List
;
@Data
@ApiModel
(
value
=
"福袋VO"
)
public
class
KylinLuckyBagVo
implements
Serializable
{
@ApiModelProperty
(
value
=
"福袋列表"
)
private
List
<
LuckyBagVo
>
luckyBagVoList
;
@ApiModelProperty
(
value
=
"福袋活动列表"
)
private
LuckyBagActivityVo
luckyBagActivityVo
;
@Data
@ApiModel
(
value
=
"福袋活动VO"
)
@AllArgsConstructor
public
static
class
LuckyBagActivityVo
{
@ApiModelProperty
(
value
=
"活动ID"
)
private
String
luckyBagActivityId
;
@ApiModelProperty
(
value
=
"活动名称"
)
private
String
name
;
@ApiModelProperty
(
value
=
"活动简介"
)
private
String
detail
;
@ApiModelProperty
(
value
=
"跳转地址"
)
private
String
targetUrl
;
}
@Data
@ApiModel
(
value
=
"福袋VO"
)
public
static
class
LuckyBagVo
{
@ApiModelProperty
(
value
=
"福袋ID"
)
private
String
luckyBagId
;
@ApiModelProperty
(
value
=
"福袋名称"
)
private
String
name
;
@ApiModelProperty
(
value
=
"福袋描述"
)
private
String
introduction
;
@ApiModelProperty
(
value
=
"兑换码显示状态 1:兑换码 2:二维码"
)
private
Integer
codeShowType
;
@ApiModelProperty
(
value
=
"状态 0:未解锁 1:已解锁"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"兑换码"
)
private
List
<
RewardCodeVo
>
rewardCodeVoList
;
}
@Data
@ApiModel
(
value
=
"兑换码VO"
)
public
static
class
RewardCodeVo
{
@ApiModelProperty
(
value
=
"状态 0:不可用 1:可用 2:已领取"
)
private
Integer
useStatus
;
@ApiModelProperty
(
value
=
"兑换码"
)
private
String
code
;
}
public
static
KylinLuckyBagVo
of
(
List
<
LuckyBagVo
>
luckyBagVoList
,
LuckyBagActivityVo
luckyBagActivityVo
){
KylinLuckyBagVo
kylinLuckyBagVo
=
new
KylinLuckyBagVo
();
kylinLuckyBagVo
.
setLuckyBagVoList
(
luckyBagVoList
);
kylinLuckyBagVo
.
setLuckyBagActivityVo
(
luckyBagActivityVo
);
return
kylinLuckyBagVo
;
}
public
static
KylinLuckyBagVo
ofEmpty
(){
KylinLuckyBagVo
kylinLuckyBagVo
=
new
KylinLuckyBagVo
();
kylinLuckyBagVo
.
setLuckyBagVoList
(
Collections
.
emptyList
());
return
kylinLuckyBagVo
;
}
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/service/IFeishuBotService.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
service
;
public
interface
IFeishuBotService
{
void
sendTextMessage
(
String
text
);
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/service/IKylinLuckyBagService.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
service
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagCodeDetailVo
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagScopeVo
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo
;
import
java.util.List
;
public
interface
IKylinLuckyBagService
{
/**
* 根据订单ID获取福袋
*
* @param orderId
* @return
*/
ResponseDto
<
KylinLuckyBagVo
>
getLuckyBagByOrderId
(
String
orderId
);
/**
* 获取福袋验码列表
*
* @param mobile
* @return
*/
ResponseDto
<
List
<
KylinLuckyBagScopeVo
>>
getLuckyBagListScope
(
String
mobile
);
/**
* 获取福袋详情
*
* @param authMobile
* @param code
* @param luckyBagId
* @return
*/
ResponseDto
<
KylinLuckyBagCodeDetailVo
>
getCodeDetail
(
String
authMobile
,
String
code
,
String
luckyBagId
);
/**
* 验码
* @param authMobile
* @param code
* @param luckyBagId
* @return
*/
ResponseDto
<
Boolean
>
consumeCode
(
String
authMobile
,
String
code
,
String
luckyBagId
);
}
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/service/admin/IKylinPerformancesAdminService.java
View file @
d31b13fa
...
...
@@ -9,6 +9,7 @@ import com.liquidnet.service.kylin.dto.param.PerformanceMemberAuditParam;
import
com.liquidnet.service.kylin.dto.param.SysDamaiParam
;
import
com.liquidnet.service.kylin.dto.vo.admin.*
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinPerformancesVo
;
import
com.liquidnet.service.kylin.entity.KylinOrderImport
;
import
com.liquidnet.service.kylin.entity.KylinPerformances
;
...
...
@@ -320,4 +321,6 @@ public interface IKylinPerformancesAdminService {
* @return: com.liquidnet.service.kylin.dto.vo.admin.KylinPerformanceAgentVo
**/
List
<
KylinPerformanceSubscribeTicketStatisticalDao
>
getPerformanceSubscribe
(
String
performancesId
);
List
<
KylinPerformancesVo
>
searchPerformanceByTitle
(
String
title
);
}
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/constant/SweetConstant.java
View file @
d31b13fa
...
...
@@ -60,6 +60,10 @@ public class SweetConstant {
public
static
final
String
REDIS_KEY_SWEET_SEND_COUPON
=
"sweet:integralActivity:coupon:send:"
;
// 答题活动
public
final
static
String
REDIS_KEY_SWEET_ANSWER_PHONE
=
"sweet:answer:phone:"
;
// doudou
public
final
static
String
REDIS_KEY_SWEET_DOUDOU_USER
=
"sweet:doudou:uid:"
;
public
final
static
String
REDIS_KEY_SWEET_DOUDOU_SCOPE_MOBILE
=
"sweet:doudou:scope:mobile:"
;
public
static
final
String
REDIS_KEY_SWEET_DOUDOU_ACTIVE
=
"sweet:doudou:active"
;
// 城市投票活动
public
final
static
String
REDIS_KEY_SWEET_CITY_VOTE_STAT_LIST
=
":StatList"
;
public
final
static
String
REDIS_KEY_SWEET_CITY_VOTE_CITY_CODE
=
":cityCode:"
;
...
...
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/param/SweetDouDouCheckParam.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
java.io.Serializable
;
@ApiModel
(
value
=
"SweetDouDouCheckParam"
,
description
=
"入参"
)
@Data
public
class
SweetDouDouCheckParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
position
=
1
,
required
=
true
,
value
=
"核验人手机号"
,
example
=
"10000000000"
)
@NotBlank
(
message
=
"authMobile不能为空"
)
private
String
authMobile
;
@ApiModelProperty
(
position
=
2
,
required
=
true
,
value
=
"doudouId"
,
example
=
"5223713433667502081163230"
)
@NotBlank
(
message
=
"doudouId不能为空"
)
private
String
doudouId
;
@ApiModelProperty
(
position
=
4
,
required
=
true
,
value
=
"activeId"
,
example
=
"3189092902231364195328061"
)
@NotBlank
(
message
=
"activeId不能为空"
)
private
String
activeId
;
@ApiModelProperty
(
position
=
3
,
required
=
true
,
value
=
"用户ID"
,
example
=
"937724050260131847782985"
)
@NotBlank
(
message
=
"userId不能为空"
)
private
String
userId
;
}
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/param/SweetDouDouParam.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
java.io.Serializable
;
@ApiModel
(
value
=
"SweetDouDouParam"
,
description
=
"入参"
)
@Data
public
class
SweetDouDouParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
position
=
10
,
required
=
true
,
value
=
"观演人姓名"
,
example
=
"张三"
)
@NotBlank
(
message
=
"username不能为空"
)
private
String
username
;
@ApiModelProperty
(
position
=
11
,
required
=
true
,
value
=
"观演人手机号"
,
example
=
"15811112222"
)
@NotBlank
(
message
=
"phone不能为空"
)
private
String
phone
;
@ApiModelProperty
(
position
=
12
,
required
=
true
,
value
=
"3442"
,
example
=
"活动 ID"
)
@NotBlank
(
message
=
"activeId不能为空"
)
private
String
activeId
;
@ApiModelProperty
(
position
=
13
,
required
=
true
,
value
=
"img"
,
example
=
"图片地址"
)
@NotBlank
(
message
=
"imgUrl不能为空"
)
private
String
imgUrl
;
@ApiModelProperty
(
position
=
14
,
required
=
true
,
value
=
"想给doudou说的话"
,
example
=
"我爱你啦啦啦"
)
private
String
mark
;
}
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/service/ISweetDoudouService.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.sweet.entity.SweetDoudou
;
import
com.liquidnet.service.sweet.param.SweetDouDouCheckParam
;
import
com.liquidnet.service.sweet.param.SweetDouDouParam
;
import
com.liquidnet.service.sweet.vo.SweetDouDouActiveVo
;
import
com.liquidnet.service.sweet.vo.SweetDouDouVo
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.validation.Valid
;
import
java.util.List
;
/**
* <p>
* doudou预约签名CD记录表 服务类
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
public
interface
ISweetDoudouService
extends
IService
<
SweetDoudou
>
{
ResponseDto
<
SweetDouDouVo
>
info
(
String
activeId
);
ResponseDto
<
SweetDouDouVo
>
create
(
@Valid
SweetDouDouParam
param
);
ResponseDto
check
(
SweetDouDouCheckParam
param
);
ResponseDto
<
SweetDouDouVo
>
detail
(
SweetDouDouCheckParam
param
);
boolean
winningUpload
(
MultipartFile
file
);
ResponseDto
<
List
<
SweetDouDouActiveVo
>>
getActiveList
();
ResponseDto
<
SweetDouDouActiveVo
>
getActiveDetail
(
String
activeId
);
}
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/vo/SweetDouDouActiveVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
vo
;
import
com.liquidnet.service.sweet.entity.SweetDoudouActive
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
@ApiModel
(
"SweetDouDouActiveVo"
)
public
class
SweetDouDouActiveVo
implements
Serializable
,
Cloneable
{
@ApiModelProperty
(
"doudou_id"
)
private
String
doudouId
;
@ApiModelProperty
(
"user_id"
)
private
String
userId
;
@ApiModelProperty
(
"活动ID"
)
private
String
activeId
;
@ApiModelProperty
(
"标题"
)
private
String
title
;
@ApiModelProperty
(
"活动详情"
)
private
String
details
;
@ApiModelProperty
(
"卡片背景图"
)
private
String
cardImages
;
@ApiModelProperty
(
"活动详情背景图"
)
private
String
detailImages
;
@ApiModelProperty
(
"活动详情URL"
)
private
String
targetUrl
;
@ApiModelProperty
(
"活动状态:2:进行中 3:已结束"
)
private
Integer
activeStatus
;
@ApiModelProperty
(
"状态 0未登记 1已登记 2未中签 3已中签 4已核销"
)
private
Integer
status
;
private
static
final
SweetDouDouActiveVo
obj
=
new
SweetDouDouActiveVo
();
public
static
SweetDouDouActiveVo
getNew
()
{
try
{
return
(
SweetDouDouActiveVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
SweetDouDouActiveVo
();
}
}
public
SweetDouDouActiveVo
copy
(
SweetDoudouActive
source
)
{
if
(
null
==
source
)
return
this
;
this
.
activeId
=
source
.
getActiveId
();
this
.
title
=
source
.
getTitle
();
this
.
cardImages
=
source
.
getCardImages
();
this
.
detailImages
=
source
.
getDetailImages
();
this
.
targetUrl
=
source
.
getTargetUrl
();
this
.
details
=
source
.
getDetails
();
return
this
;
}
}
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/vo/SweetDouDouScopeVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
vo
;
import
com.liquidnet.service.sweet.entity.SweetDoudouScope
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
@Data
public
class
SweetDouDouScopeVo
implements
Serializable
,
Cloneable
{
@ApiModelProperty
(
"mobile"
)
private
String
mobile
;
@ApiModelProperty
(
"nickName"
)
private
String
nickName
;
@ApiModelProperty
(
"realName"
)
private
String
realName
;
@ApiModelProperty
(
"idCard"
)
private
String
idCard
;
@ApiModelProperty
(
"status"
)
private
Integer
status
;
@ApiModelProperty
(
"createdAt"
)
private
LocalDateTime
createdAt
;
@ApiModelProperty
(
"updatedAt"
)
private
LocalDateTime
updatedAt
;
private
static
final
SweetDouDouScopeVo
obj
=
new
SweetDouDouScopeVo
();
public
static
SweetDouDouScopeVo
getNew
()
{
try
{
return
(
SweetDouDouScopeVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
SweetDouDouScopeVo
();
}
}
public
SweetDouDouScopeVo
copy
(
SweetDoudouScope
source
)
{
if
(
null
==
source
)
return
this
;
this
.
mobile
=
source
.
getMobile
();
this
.
nickName
=
source
.
getNickName
();
this
.
realName
=
source
.
getRealName
();
this
.
idCard
=
source
.
getIdCard
();
this
.
status
=
source
.
getStatus
();
this
.
createdAt
=
source
.
getCreatedAt
();
this
.
updatedAt
=
source
.
getUpdatedAt
();
return
this
;
}
}
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/vo/SweetDouDouVo.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
vo
;
import
com.liquidnet.service.sweet.entity.SweetDoudou
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
SweetDouDouVo
implements
Serializable
,
Cloneable
{
@ApiModelProperty
(
"doudou_id"
)
private
String
doudouId
;
@ApiModelProperty
(
"user_id"
)
private
String
userId
;
@ApiModelProperty
(
"观演人姓名"
)
private
String
username
;
@ApiModelProperty
(
"观演人手机号"
)
private
String
phone
;
@ApiModelProperty
(
"图片地址"
)
private
String
imgUrl
;
@ApiModelProperty
(
"活动 ID"
)
private
String
activeId
;
@ApiModelProperty
(
"想给doudou说的话"
)
private
String
mark
;
@ApiModelProperty
(
"状态 1已登记 2未中签 3已中签 4已核销"
)
private
Integer
status
;
@ApiModelProperty
(
"活动名称"
)
private
String
activeTitle
;
private
static
final
SweetDouDouVo
obj
=
new
SweetDouDouVo
();
public
static
SweetDouDouVo
getNew
()
{
try
{
return
(
SweetDouDouVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
SweetDouDouVo
();
}
}
public
SweetDouDouVo
copy
(
SweetDoudou
source
)
{
if
(
null
==
source
)
return
this
;
this
.
setPhone
(
source
.
getPhone
());
return
this
;
}
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-common/src/main/java/com/liquidnet/client/admin/common/enums/BannersDisplayLocation.java
View file @
d31b13fa
...
...
@@ -19,6 +19,7 @@ public enum BannersDisplayLocation {
DISPLAY_LOCATION6
(
"YOUNG BLOOD"
,
6
),
DISPLAY_LOCATION8
(
"视频"
,
8
),
DISPLAY_LOCATION9
(
"正在下单"
,
9
),
DISPLAY_LOCATION10
(
"福袋"
,
10
),
;
private
String
name
;
private
int
index
;
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/KylinBannersAdminController.java
View file @
d31b13fa
...
...
@@ -69,7 +69,7 @@ public class KylinBannersAdminController extends BaseController {
return
prefix
+
"/create"
;
}
@Log
(
title
=
"
Banner列表
"
,
businessType
=
BusinessType
.
INSERT
)
@Log
(
title
=
"
创建Banner
"
,
businessType
=
BusinessType
.
INSERT
)
@RequiresPermissions
(
"kylin:banners:create"
)
@PostMapping
(
"create"
)
@ResponseBody
...
...
@@ -105,7 +105,7 @@ public class KylinBannersAdminController extends BaseController {
return
prefix
+
"/update"
;
}
@Log
(
title
=
"
Banner列表
"
,
businessType
=
BusinessType
.
UPDATE
)
@Log
(
title
=
"
修改Banner
"
,
businessType
=
BusinessType
.
UPDATE
)
@RequiresPermissions
(
"kylin:banners:update"
)
@PostMapping
(
"update"
)
@ResponseBody
...
...
@@ -142,7 +142,7 @@ public class KylinBannersAdminController extends BaseController {
return
getDataTable
(
result
.
getList
());
}
@Log
(
title
=
"
Banner列表
"
,
businessType
=
BusinessType
.
DELETE
)
@Log
(
title
=
"
删除Banner
"
,
businessType
=
BusinessType
.
DELETE
)
@RequiresPermissions
(
"kylin:banners:delete"
)
@PostMapping
(
"delete"
)
@ResponseBody
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/KylinPerformancesController.java
View file @
d31b13fa
...
...
@@ -8,12 +8,10 @@ import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import
com.liquidnet.client.admin.common.core.page.TableDataInfo
;
import
com.liquidnet.client.admin.common.enums.BusinessType
;
import
com.liquidnet.client.admin.common.utils.poi.ExcelUtil
;
import
com.liquidnet.client.admin.zhengzai.kylin.dto.KylinOrderImportDto
;
import
com.liquidnet.client.admin.zhengzai.kylin.dto.KylinPerformanceSubscribeTicketStatisticalExportDao
;
import
com.liquidnet.client.admin.zhengzai.kylin.dto.PerformanceOrderStatisCountResp
;
import
com.liquidnet.client.admin.zhengzai.stone.service.dto.StoneScoreListExportDto
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.
goblin.param.GoblinFrontCubeParam
;
import
com.liquidnet.service.
base.ResponseDto
;
import
com.liquidnet.service.kylin.dao.PerformanceAdminListDao
;
import
com.liquidnet.service.kylin.dao.PerformanceMemberAuditDao
;
import
com.liquidnet.service.kylin.dao.PerformanceOrderStatisticalDao
;
...
...
@@ -23,6 +21,7 @@ import com.liquidnet.service.kylin.dto.param.PerformanceMemberAuditParam;
import
com.liquidnet.service.kylin.dto.param.SysDamaiParam
;
import
com.liquidnet.service.kylin.dto.vo.admin.*
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinPerformancesVo
;
import
com.liquidnet.service.kylin.entity.KylinOrderImport
;
import
com.liquidnet.service.kylin.service.admin.IKylinPerformancesAdminService
;
import
com.liquidnet.service.kylin.service.other.DamaiService
;
...
...
@@ -365,4 +364,11 @@ public class KylinPerformancesController extends BaseController {
String
result
=
kylinPerformancesService
.
changeTransferConfig
(
performancesId
,
isCanTransfer
,
transferStartTime
,
transferEndTime
);
return
this
.
success
(
result
);
}
@GetMapping
(
value
=
"/search"
)
@ResponseBody
public
ResponseDto
<
List
<
KylinPerformancesVo
>>
searchPerformanceByTitle
(
@RequestParam
(
value
=
"title"
)
String
title
)
{
List
<
KylinPerformancesVo
>
kylinPerformancesVoList
=
kylinPerformancesService
.
searchPerformanceByTitle
(
title
);
return
ResponseDto
.
success
(
kylinPerformancesVoList
);
}
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/banners/banners.html
View file @
d31b13fa
...
...
@@ -124,6 +124,10 @@
field
:
'createdAt'
,
title
:
'创建时间'
},
{
field
:
'performanceName'
,
title
:
'关联演出名称'
},
{
title
:
'操作'
,
align
:
'center'
,
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/banners/create.html
View file @
d31b13fa
...
...
@@ -155,39 +155,72 @@
var
url9
=
"[[${url9}]]"
;
var
url14
=
"[[${url14}]]"
;
let
count
=
0
;
function
areaSelect
(
e
)
{
function
areaSelect
(
e
)
{
console
.
log
(
e
.
value
,
'kan'
)
if
(
e
.
value
==
9
)
{
// 清空之前的输入和选择
$
(
"#searchIpt"
).
val
(
''
).
attr
(
'data-id'
,
''
);
$
(
"#selectActivity label"
).
text
(
"选择活动"
);
// 默认文本
if
(
e
.
value
==
9
||
e
.
value
==
10
)
{
count
++
;
if
(
count
%
2
)
{
console
.
log
(
count
,
'dsa'
)
// 根据不同类型设置参数
let
url
,
keyField
,
idField
,
searchTip
;
if
(
e
.
value
==
9
)
{
url
=
'/goblin/marketing/zhengzai/list/get?pageSize=10&pageNum=1&orderByColumn=createdAt&isAsc=desc&status=-1&purchaseName='
;
keyField
=
'name'
;
idField
=
'selfMarketId'
;
searchTip
=
'请输入活动名称'
;
$
(
"#selectActivity label"
).
text
(
"选择活动"
);
}
else
if
(
e
.
value
==
10
)
{
url
=
'/kylin/performances/search?title='
;
// 演出搜索接口
keyField
=
'title'
;
idField
=
'performanceId'
;
searchTip
=
'请输入演出名称'
;
$
(
"#selectActivity label"
).
text
(
"选择演出"
);
}
$
(
"#selectActivity"
).
show
();
// 销毁旧的实例并重新初始化
$
(
"#searchIpt"
).
bsSuggest
(
'destroy'
).
attr
(
'placeholder'
,
searchTip
);
$
(
"#searchIpt"
).
bsSuggest
({
idField
:
'selfMarketId'
,
// data.value 的第几个数据,作为input输入框的内容
keyField
:
'name'
,
// data.value 的第几个数据,作为input输入框的内容
allowNoKeyword
:
false
,
//是否允许无关键字时请求数据
showBtn
:
false
,
multiWord
:
true
,
//以分隔符号分割的多关键字支持
idField
:
idField
,
keyField
:
keyField
,
allowNoKeyword
:
false
,
showBtn
:
false
,
multiWord
:
true
,
hideOnSelect
:
true
,
getDataMethod
:
"url"
,
//获取数据的方式,总是从 URL 获取
effectiveFields
:
[
'name'
],
url
:
'/goblin/marketing/zhengzai/list/get?pageSize=10&pageNum=1&orderByColumn=createdAt&isAsc=desc&status=-1&purchaseName='
,
/*如果从 url 获取数据,并且需要跨域,则该参数必须设置*/
processData
:
function
(
json
)
{
// url 获取数据时,对数据的处理,作为 getData 的回调函数
//字符串转化为 js 对象
console
.
log
(
json
,
'json'
)
let
data
=
{};
data
.
value
=
json
.
data
return
data
}
}).
on
(
'onDataRequestSuccess'
,
function
(
e
,
result
)
{
}).
on
(
'onSetSelectValue'
,
function
(
e
,
selectedData
,
selectedRawData
)
{
// 当前行的所有值都能拿到
}).
on
(
'onUnsetSelectValue'
,
function
(
e
)
{
});;
getDataMethod
:
"url"
,
effectiveFields
:
[
keyField
],
url
:
url
,
processData
:
function
(
json
)
{
// 统一处理接口返回数据
let
data
=
{
value
:
json
.
data
||
[]
};
if
(
e
.
value
==
10
)
{
// 假设演出接口返回格式为 { data: [{id:1, title:"演出名称"},...] }
data
.
value
=
json
.
data
.
map
(
item
=>
({
[
idField
]:
item
.
performancesId
,
[
keyField
]:
item
.
title
}));
}
return
data
;
}
}).
on
(
'onSetSelectValue'
,
function
(
e
,
selectedData
,
selectedRawData
)
{
// 选中时存储ID
const
id
=
selectedRawData
[
idField
];
$
(
this
).
attr
(
'data-id'
,
id
);
}).
on
(
'onUnsetSelectValue'
,
function
()
{
// 取消选择时清空ID
$
(
this
).
attr
(
'data-id'
,
''
);
});
}
else
{
$
(
"#selectActivity"
).
hide
();
$
(
"#searchIpt"
).
val
(
''
).
attr
(
'data-id'
,
''
);
}
}
else
{
$
(
"#selectActivity"
).
hide
();
$
(
"#searchIpt"
).
val
(
''
).
attr
(
'data-id'
,
''
);
}
}
function
submitHandler
()
{
...
...
@@ -202,6 +235,11 @@
layer
.
msg
(
"请选择展示位置"
);
return
false
;
}
// 新增校验:如果选择了位置10,必须选择演出
if
(
positionList
.
split
(
','
).
includes
(
'10'
)
&&
!
$
(
'#searchIpt'
).
attr
(
'data-id'
))
{
layer
.
msg
(
'请选择演出!'
);
return
false
;
}
var
targetType
=
$
(
'#targetType'
).
select2
(
'val'
);
if
(
!
targetType
)
{
layer
.
msg
(
"请选择跳转方式"
);
...
...
@@ -212,6 +250,13 @@
if
(
positionList
.
split
(
','
).
includes
(
'9'
))
{
data
.
push
({
"name"
:
"marketId"
,
"value"
:
$
(
'#searchIpt'
).
attr
(
'data-id'
)});
}
// 添加演出ID到提交数据
if
(
positionList
.
split
(
','
).
includes
(
'10'
))
{
data
.
push
({
"name"
:
"performanceId"
,
"value"
:
$
(
'#searchIpt'
).
attr
(
'data-id'
)
});
}
var
targetObj
=
''
;
var
targetObjName
=
''
;
if
(
12
==
targetType
||
100
==
targetType
)
{
// 请填写url
...
...
@@ -519,7 +564,7 @@
'theme'
:
'explorer-fas'
,
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl'
:
platformUrl
+
"/platform/basicServices/alOss/upload"
,
'uploadUrl'
:
platformUrl
+
"/platform/basicServices/alOss/upload
/unsm
"
,
"uploadExtraData"
:
{
"pathName"
:
"banner"
,
"buckType"
:
1
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/banners/update.html
View file @
d31b13fa
...
...
@@ -187,26 +187,92 @@
var
bannersId
=
"[[${KylinBannersVo.bannersId}]]"
;
var
marketName
=
"[[${KylinBannersVo.marketName}]]"
;
var
marketId
=
"[[${KylinBannersVo.marketId}]]"
;
var
performanceId
=
"[[${KylinBannersVo.performanceId}]]"
;
let
count
=
0
;
console
.
log
(
marketId
,
marketName
)
function
areaSelect
(
e
)
{
function
areaSelect
(
e
)
{
console
.
log
(
e
.
value
,
'kan'
)
if
(
e
.
value
==
9
)
{
// 清空之前的输入和选择
$
(
"#searchIpt"
).
val
(
''
).
attr
(
'data-id'
,
''
);
$
(
"#selectActivity label"
).
text
(
"选择活动"
);
// 默认文本
if
(
e
.
value
==
9
||
e
.
value
==
10
)
{
count
++
;
if
(
count
%
2
)
{
console
.
log
(
count
,
'dsa'
)
// 根据不同类型设置参数
let
url
,
keyField
,
idField
,
searchTip
;
if
(
e
.
value
==
9
)
{
url
=
'/goblin/marketing/zhengzai/list/get?pageSize=10&pageNum=1&orderByColumn=createdAt&isAsc=desc&status=-1&purchaseName='
;
keyField
=
'name'
;
idField
=
'selfMarketId'
;
searchTip
=
'请输入活动名称'
;
$
(
"#selectActivity label"
).
text
(
"选择活动"
);
}
else
if
(
e
.
value
==
10
)
{
url
=
'/kylin/performances/search?title='
;
// 演出搜索接口
keyField
=
'title'
;
idField
=
'performanceId'
;
searchTip
=
'请输入演出名称'
;
$
(
"#selectActivity label"
).
text
(
"选择演出"
);
}
$
(
"#selectActivity"
).
show
();
commomSe
()
// 销毁旧的实例并重新初始化
$
(
"#searchIpt"
).
bsSuggest
(
'destroy'
).
attr
(
'placeholder'
,
searchTip
);
$
(
"#searchIpt"
).
bsSuggest
({
idField
:
idField
,
keyField
:
keyField
,
allowNoKeyword
:
false
,
showBtn
:
false
,
multiWord
:
true
,
hideOnSelect
:
true
,
getDataMethod
:
"url"
,
effectiveFields
:
[
keyField
],
url
:
url
,
processData
:
function
(
json
)
{
// 统一处理接口返回数据
let
data
=
{
value
:
json
.
data
||
[]
};
if
(
e
.
value
==
10
)
{
// 假设演出接口返回格式为 { data: [{id:1, title:"演出名称"},...] }
data
.
value
=
json
.
data
.
map
(
item
=>
({
[
idField
]:
item
.
performancesId
,
[
keyField
]:
item
.
title
}));
}
return
data
;
}
}).
on
(
'onSetSelectValue'
,
function
(
e
,
selectedData
,
selectedRawData
)
{
// 选中时存储ID
const
id
=
selectedRawData
[
idField
];
$
(
this
).
attr
(
'data-id'
,
id
);
}).
on
(
'onUnsetSelectValue'
,
function
()
{
// 取消选择时清空ID
$
(
this
).
attr
(
'data-id'
,
''
);
});
}
else
{
$
(
"#selectActivity"
).
hide
();
$
(
"#searchIpt"
).
val
(
''
).
attr
(
'data-id'
,
''
);
}
}
else
{
$
(
"#selectActivity"
).
hide
();
$
(
"#searchIpt"
).
val
(
''
).
attr
(
'data-id'
,
''
);
}
}
if
(
marketId
)
{
if
(
marketId
||
performanceId
)
{
count
++
;
$
(
"#selectActivity"
).
show
()
commomSe
()
$
(
"#searchIpt"
).
attr
(
'data-id'
,
marketId
)
// 根据存储的位置类型初始化不同的搜索框
const
positionList
=
"[[${KylinBannersVo.positionList}]]"
;
if
(
positionList
&&
positionList
.
includes
(
'10'
))
{
performanceCommomSe
();
// 设置演出数据回显
$
(
"#searchIpt"
).
val
(
"[[${KylinBannersVo.performanceName}]]"
)
// 新增演出名称字段
.
attr
(
'data-id'
,
"[[${KylinBannersVo.performanceId}]]"
);
// 新增演出ID字段
}
else
{
commomSe
();
$
(
"#searchIpt"
).
attr
(
'data-id'
,
marketId
);
}
}
function
commomSe
()
{
$
(
"#searchIpt"
).
bsSuggest
({
...
...
@@ -233,6 +299,34 @@
}).
on
(
'onUnsetSelectValue'
,
function
(
e
)
{
});;
}
// 搜索演出接口
function
performanceCommomSe
()
{
// 初始化演出搜索框
$
(
"#searchIpt"
).
bsSuggest
({
idField
:
'performanceId'
,
// 演出ID字段
keyField
:
'title'
,
// 演出名称字段
allowNoKeyword
:
false
,
showBtn
:
false
,
multiWord
:
true
,
hideOnSelect
:
true
,
getDataMethod
:
"url"
,
effectiveFields
:
[
'title'
],
url
:
'/kylin/performances/search?title='
,
// 演出搜索接口
processData
:
function
(
json
)
{
let
data
=
{};
// 转换数据结构为bsSuggest需要的格式
data
.
value
=
json
.
data
.
map
(
item
=>
({
performanceId
:
item
.
performancesId
,
title
:
item
.
title
}));
return
data
;
}
}).
on
(
'onSetSelectValue'
,
function
(
e
,
selectedData
,
selectedRawData
)
{
$
(
this
).
attr
(
'data-id'
,
selectedRawData
.
performanceId
);
}).
on
(
'onUnsetSelectValue'
,
function
()
{
$
(
this
).
attr
(
'data-id'
,
''
);
});
}
function
submitHandler
()
{
var
bannersName
=
$
(
'#bannersName'
).
val
();
if
(
!
bannersName
)
{
...
...
@@ -245,6 +339,11 @@
layer
.
msg
(
"请选择展示位置"
);
return
false
;
}
// 新增校验:如果选择了位置10,必须选择演出
if
(
positionList
.
split
(
','
).
includes
(
'10'
)
&&
!
$
(
'#searchIpt'
).
attr
(
'data-id'
))
{
layer
.
msg
(
'请选择演出!'
);
return
false
;
}
var
targetType
=
$
(
'#targetType'
).
select2
(
'val'
);
if
(
!
targetType
)
{
layer
.
msg
(
"请选择跳转方式"
);
...
...
@@ -254,6 +353,16 @@
var
data
=
$
(
'#form-post-add'
).
serializeArray
();
if
(
positionList
.
split
(
','
).
includes
(
'9'
))
{
data
.
push
({
"name"
:
"marketId"
,
"value"
:
$
(
'#searchIpt'
).
attr
(
'data-id'
)});
data
.
push
({
"name"
:
"performanceId"
,
"value"
:
""
})
data
.
push
({
"name"
:
"performanceName"
,
"value"
:
""
})
}
// 添加演出ID到提交数据
if
(
positionList
.
split
(
','
).
includes
(
'10'
))
{
data
.
push
({
"name"
:
"performanceId"
,
"value"
:
$
(
'#searchIpt'
).
attr
(
'data-id'
)
});
data
.
push
({
"name"
:
"marketId"
,
"value"
:
""
})
}
var
targetObj
=
''
;
var
targetObjName
=
''
;
...
...
@@ -585,7 +694,7 @@
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': ctx + "system/user/profile/updateAvatar",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl'
:
platformUrl
+
"/platform/basicServices/alOss/upload"
,
'uploadUrl'
:
platformUrl
+
"/platform/basicServices/alOss/upload
/unsm
"
,
"uploadExtraData"
:
{
"pathName"
:
"banner"
,
"buckType"
:
1
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/service/impl/KylinBannersServiceImpl.java
View file @
d31b13fa
package
com
.
liquidnet
.
client
.
admin
.
zhengzai
.
kylin
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
...
...
@@ -10,6 +11,7 @@ import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
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.StringUtil
;
import
com.liquidnet.service.goblin.entity.GoblinSelfMarketing
;
import
com.liquidnet.service.goblin.mapper.GoblinSelfMarketingMapper
;
import
com.liquidnet.service.kylin.constant.KylinRedisConst
;
...
...
@@ -19,8 +21,10 @@ import com.liquidnet.service.kylin.dto.param.BannersSearchParam;
import
com.liquidnet.service.kylin.dto.vo.KylinBannersVo
;
import
com.liquidnet.service.kylin.entity.KylinBanners
;
import
com.liquidnet.service.kylin.entity.KylinBannersRelations
;
import
com.liquidnet.service.kylin.entity.KylinPerformances
;
import
com.liquidnet.service.kylin.mapper.KylinBannersMapper
;
import
com.liquidnet.service.kylin.mapper.KylinBannersRelationsMapper
;
import
com.liquidnet.service.kylin.mapper.KylinPerformancesMapper
;
import
com.liquidnet.service.kylin.service.admin.IKylinBannersService
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -63,6 +67,9 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
@Autowired
private
GoblinSelfMarketingMapper
goblinSelfMarketingMapper
;
@Autowired
private
KylinPerformancesMapper
kylinPerformancesMapper
;
public
boolean
create
(
BannersParam
bannersParam
)
{
try
{
// 时间
...
...
@@ -76,7 +83,15 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
bannersParam
.
setOnlineEndTime
(
null
);
}
// 入数据库
bannersMapper
.
insert
(
bannersParam
.
getFields
(
bannersId
,
createdAtString
));
KylinBanners
kylinBanners
=
bannersParam
.
getFields
(
bannersId
,
createdAtString
);
String
performanceName
=
getPerformanceNameById
(
bannersParam
.
getPerformanceId
());
if
(
StringUtil
.
isBlank
(
performanceName
))
{
kylinBanners
.
setPerformanceId
(
""
);
kylinBanners
.
setPerformanceName
(
""
);
}
else
{
kylinBanners
.
setPerformanceName
(
performanceName
);
}
bannersMapper
.
insert
(
kylinBanners
);
List
<
String
>
positionList
=
bannersParam
.
getPositionList
();
KylinBannersRelations
kylinBannersRelations
=
new
KylinBannersRelations
();
...
...
@@ -105,10 +120,24 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"error."
,
e
);
return
false
;
}
}
private
String
getPerformanceNameById
(
String
performanceId
)
{
if
(
StringUtil
.
isBlank
(
performanceId
))
{
return
""
;
}
List
<
KylinPerformances
>
kylinPerformances
=
kylinPerformancesMapper
.
selectList
(
new
LambdaUpdateWrapper
<
KylinPerformances
>()
.
eq
(
KylinPerformances:
:
getPerformancesId
,
performanceId
));
if
(
kylinPerformances
.
isEmpty
())
{
return
""
;
}
return
kylinPerformances
.
get
(
0
).
getTitle
();
}
private
void
setBannerListRedis
()
{
List
<
KylinBanners
>
bannerList
=
bannersMapper
.
selectList
(
Wrappers
.
lambdaQuery
(
KylinBanners
.
class
).
eq
(
KylinBanners:
:
getIsOnline
,
1
)
...
...
@@ -141,6 +170,14 @@ public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, Kyl
KylinBanners
params
=
bannersParam
.
getFields
(
null
,
null
);
params
.
setUpdatedAt
(
updatedAtString
);
String
performanceName
=
getPerformanceNameById
(
bannersParam
.
getPerformanceId
());
if
(
StringUtil
.
isBlank
(
performanceName
))
{
params
.
setPerformanceId
(
""
);
params
.
setPerformanceName
(
""
);
}
else
{
params
.
setPerformanceName
(
performanceName
);
}
/*if (StringUtils.isEmpty(bannersParam.getOnlineStartTime())) {
params.setOnlineStartTime(null);
}
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/service/impl/KylinPerformancesAdminServiceImpl.java
View file @
d31b13fa
...
...
@@ -25,10 +25,7 @@ import com.liquidnet.service.kylin.dto.vo.admin.*;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo
;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo
;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinTicketTimesPartnerVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.TicketTimesTicketCreatePartnerVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.*
;
import
com.liquidnet.service.kylin.entity.*
;
import
com.liquidnet.service.kylin.mapper.*
;
import
com.liquidnet.service.kylin.service.admin.IKylinPerformancesAdminService
;
...
...
@@ -977,6 +974,20 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
return
performancesMapper
.
getSubscribeTicketStatisticalByPerformancesId
(
performancesId
);
}
@Override
public
List
<
KylinPerformancesVo
>
searchPerformanceByTitle
(
String
title
)
{
LambdaQueryWrapper
<
KylinPerformances
>
lambdaQueryWrapper
=
new
QueryWrapper
<
KylinPerformances
>()
.
lambda
()
.
like
(
KylinPerformances:
:
getTitle
,
title
);
List
<
KylinPerformances
>
kylinPerformances
=
performancesMapper
.
selectList
(
lambdaQueryWrapper
);
return
kylinPerformances
.
stream
().
map
(
k
->
{
KylinPerformancesVo
vo
=
new
KylinPerformancesVo
();
vo
.
setPerformancesId
(
k
.
getPerformancesId
());
vo
.
setTitle
(
k
.
getTitle
());
return
vo
;
}).
collect
(
Collectors
.
toList
());
}
//删除演出下所有订单缓存(订单详情,订单列表)
public
void
delOrderTicketsRedis
(
KylinPerformanceMisVo
vo
)
{
//找到所有ticketId
...
...
liquidnet-bus-common/liquidnet-common-service-base/src/main/java/com/liquidnet/service/base/constant/RedisKeyExpireConst.java
View file @
d31b13fa
...
...
@@ -37,4 +37,20 @@ public class RedisKeyExpireConst {
// sweet:user:service:openId 过期时间30天
public
static
final
long
SWEET_USER_SERVICE_OPENID_EXPIRE
=
30
*
24
*
60
*
60
;
// kylin:luckybag:activity 过期时间30天
public
static
final
long
KYLIN_LUCKY_BAG_ACTIVITY_EXPIRE
=
30
*
24
*
60
*
60
;
// kylin:luckybag 过期时间30天
public
static
final
long
KYLIN_LUCKY_BAG_EXPIRE
=
30
*
24
*
60
*
60
;
// sweet:douduo:active 过期时间30天
public
static
final
long
SWEET_DOUDOU_ACTIVE_EXPIRE
=
30
*
24
*
60
*
60
;
// sweet:doudou:scope:mobile 过期时间3天
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-common/liquidnet-common-sms/src/main/java/com/liquidnet/common/sms/constant/SmsEnum.java
View file @
d31b13fa
...
...
@@ -7,10 +7,12 @@ public class SmsEnum {
*/
public
enum
ADSignName
{
M01
(
"摩登天空"
),
M02
(
"正在现场"
),
// M02("正在现场"),
M02
(
"摩登天空"
),
M03
(
"新血计划"
),
M04
(
"摩登小家伙"
),
M05
(
"五百里Live"
);
M05
(
"五百里Live"
),
M06
(
"正在映画"
);
private
final
String
val
;
ADSignName
(
String
val
)
{
...
...
liquidnet-bus-config/liquidnet-config/liquidnet-service-goblin-dev.yml
View file @
d31b13fa
...
...
@@ -16,3 +16,13 @@ liquidnet:
mongodb
:
sslEnabled
:
false
database
:
dev_ln_scene
lxpay
:
apps
:
dougong
:
huifu-id
:
'
6666000171841162'
sys-id
:
'
6666000162031620'
product-id
:
'
PAYUN'
sub-app-id
:
'
wx4732efeaa2b08086'
public-key
:
"
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArR8pqWsRMqiunn8uEZGF9AeizJK0vuWjlcNnTbw9Sb96dMVuYu3SRj+Dx4E4SgyEL4CYROou1xwY57kAKEqHdH7o1W41O9jYjXZG38BrtBR+D9Qh9OqGxCZ+e4Gi38XHGg6fn67iXefOqp1kWGd4qc8tIZO1lIDXS19R09D/mESNBMulQdVPyZF7gvd11A+7EEOfRlSOjrtqIoUWV0GIqhLPUtGJk8Uq/d9NLitJyvK3tgz8cvJ4RyK6UpGtRDrqiBiQxbvK9EqMd1sw3zkvM03szSWon4LHFNqvDr6RYfFyFUCvX9UPYmeritENnroEuTBlTFLLb68ed4HZEZDPTQIDAQAB"
private-key
:
"
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDJAOaA1ikJzDL0vUuTyl3/vlHyuSod6/gFLLrSTD6EJkma5Ld34HHu82/5pEojEvbcU113L9j3fUJlpyjX6CFk6j2KjMIuyFxhgrVFi5WT5m74wYohoWNifkQrgwsO3oxI7cewWFu/w7/yCK9dzI4QxasGUKH9iPweI+26IR0DBbOfC9GVudOy2b2xLrGAevEEHdVTNqrQNdlrTzqAH7r3uk8s2vaBZX+O4gyf7eKdHdC4CVSWfYPLO1sA48MxNwI7OExxfGeV+0wmBMGRSoZ5FhWsqZs+f9jGcmfF+uEfAO71PqHjezXYxq7+oWDfDBPCTc5fo9w5v1HV0aZaYOe1AgMBAAECggEBAI4yR98fInse7XF8NOpBwIv6/QhEfAoc9CHdCfFaJOPiHjIo2a5BpvhPWYj288eqU998TmPSAqDbCUzWm6taOb2lhJHukDT+Y3RMPqcLX275Fsp+SJUQEjoMb3eExh7ny8CQDrOvXoDkH3c/M6ic3Gf7Hslh46dz8D/2VOhXIqoObPlSLzniwiMTDBEwB7IRc3Q+r4V6ZnKt8wjKQZpotBA3TlJlEBBj/h5SbWokwMQbTqFkjl7gVe0ase2WfV+cD4qhPZx6CWphPVyWelg+wpDqXOIQdnE8pgri5a9ZkzgPTOrKyCm+EOa9lZAp81tnb2iFhrlkKPSWUW8zLtZzxMECgYEA+sNyF0U9anyxeKxXtlGKKuMHJSnBpZeU6FSvZjTewFH2Sxh3QwZjg6h5BfvTLH1XfNerx3gdpAPJ+EyAZuEibDr47bp+j4CtT27dVolz5XQ5ugOadwzdNZkq6vhuq1aGATmS/mlNE1/pdMEP9F6hi2HYncER6BFOy0xSwMKCnRECgYEAzTNxhvZ0pb2hPKylxHUydkm3Uznq5Zkquv6II6W5aiKvceETHwdRZLoKc+I0kd0/4fBfJI2Jsjexy51ERiG+8y4wVrcrky6NLw6mnXSvnTSQCftbexheJTg9c5dpfKIj+rxtuBeZ3Sj1MJQ6OSBUYu3iTqstO0Rgp/1ofWQJ8GUCgYEAspxzr0+KJ0cZwbI/54S8vT9n33iWjbQiRDnNlScjYij/HQ4YJI1wZF6jlTeBerbskeesWy+bLS/ltA4Jhz3knuKCXBHyA5TL3UBCN1lAS7c1RuE6LIHlLkAi6ap6aV//ou+3W671T0+JobfB/XVJ61WOTQ8wCfQKA5QhfVsOXYECgYEAvzbm3Ysfm6qfazi+p9lGErASov1fhGA8T1AMcJtnsh1sO8Qu20UodaJfRylNL3dqphIltpwl6eq4RTLhgjDEDTvHU6cQdfB1I5qVbDhlxSpL5uFRl91XLXvA18wKQledC3M3Esr7V/loscIOl1knCaD+t6wPVCEdqK0dB2uHT3kCgYEA3p3rlmCmWzkZ/U8jE4087YEkJWV+r86YC63r4YZEqZtfHk4hNchAYke4jYPqkTtmRVZi2C6KuVr5M3ASHmGWorBY0VA9Abd3daniNocZCeMOt4Z7U6MIbqW7KYSrjx8V8HIsdH7HF97ofRuMH6oaz9bFMM6XwrEAMY+zTdH9A4Y="
notify-url
:
'
https://testgoblin.zhengzai.tv/goblin/bracelet/callback'
liquidnet-bus-config/liquidnet-config/liquidnet-service-goblin-test.yml
View file @
d31b13fa
...
...
@@ -16,3 +16,13 @@ liquidnet:
mongodb
:
sslEnabled
:
false
database
:
test_ln_scene
lxpay
:
apps
:
dougong
:
huifu-id
:
'
6666000171841162'
sys-id
:
'
6666000162031620'
product-id
:
'
PAYUN'
sub-app-id
:
'
wx4732efeaa2b08086'
public-key
:
"
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArR8pqWsRMqiunn8uEZGF9AeizJK0vuWjlcNnTbw9Sb96dMVuYu3SRj+Dx4E4SgyEL4CYROou1xwY57kAKEqHdH7o1W41O9jYjXZG38BrtBR+D9Qh9OqGxCZ+e4Gi38XHGg6fn67iXefOqp1kWGd4qc8tIZO1lIDXS19R09D/mESNBMulQdVPyZF7gvd11A+7EEOfRlSOjrtqIoUWV0GIqhLPUtGJk8Uq/d9NLitJyvK3tgz8cvJ4RyK6UpGtRDrqiBiQxbvK9EqMd1sw3zkvM03szSWon4LHFNqvDr6RYfFyFUCvX9UPYmeritENnroEuTBlTFLLb68ed4HZEZDPTQIDAQAB"
private-key
:
"
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDJAOaA1ikJzDL0vUuTyl3/vlHyuSod6/gFLLrSTD6EJkma5Ld34HHu82/5pEojEvbcU113L9j3fUJlpyjX6CFk6j2KjMIuyFxhgrVFi5WT5m74wYohoWNifkQrgwsO3oxI7cewWFu/w7/yCK9dzI4QxasGUKH9iPweI+26IR0DBbOfC9GVudOy2b2xLrGAevEEHdVTNqrQNdlrTzqAH7r3uk8s2vaBZX+O4gyf7eKdHdC4CVSWfYPLO1sA48MxNwI7OExxfGeV+0wmBMGRSoZ5FhWsqZs+f9jGcmfF+uEfAO71PqHjezXYxq7+oWDfDBPCTc5fo9w5v1HV0aZaYOe1AgMBAAECggEBAI4yR98fInse7XF8NOpBwIv6/QhEfAoc9CHdCfFaJOPiHjIo2a5BpvhPWYj288eqU998TmPSAqDbCUzWm6taOb2lhJHukDT+Y3RMPqcLX275Fsp+SJUQEjoMb3eExh7ny8CQDrOvXoDkH3c/M6ic3Gf7Hslh46dz8D/2VOhXIqoObPlSLzniwiMTDBEwB7IRc3Q+r4V6ZnKt8wjKQZpotBA3TlJlEBBj/h5SbWokwMQbTqFkjl7gVe0ase2WfV+cD4qhPZx6CWphPVyWelg+wpDqXOIQdnE8pgri5a9ZkzgPTOrKyCm+EOa9lZAp81tnb2iFhrlkKPSWUW8zLtZzxMECgYEA+sNyF0U9anyxeKxXtlGKKuMHJSnBpZeU6FSvZjTewFH2Sxh3QwZjg6h5BfvTLH1XfNerx3gdpAPJ+EyAZuEibDr47bp+j4CtT27dVolz5XQ5ugOadwzdNZkq6vhuq1aGATmS/mlNE1/pdMEP9F6hi2HYncER6BFOy0xSwMKCnRECgYEAzTNxhvZ0pb2hPKylxHUydkm3Uznq5Zkquv6II6W5aiKvceETHwdRZLoKc+I0kd0/4fBfJI2Jsjexy51ERiG+8y4wVrcrky6NLw6mnXSvnTSQCftbexheJTg9c5dpfKIj+rxtuBeZ3Sj1MJQ6OSBUYu3iTqstO0Rgp/1ofWQJ8GUCgYEAspxzr0+KJ0cZwbI/54S8vT9n33iWjbQiRDnNlScjYij/HQ4YJI1wZF6jlTeBerbskeesWy+bLS/ltA4Jhz3knuKCXBHyA5TL3UBCN1lAS7c1RuE6LIHlLkAi6ap6aV//ou+3W671T0+JobfB/XVJ61WOTQ8wCfQKA5QhfVsOXYECgYEAvzbm3Ysfm6qfazi+p9lGErASov1fhGA8T1AMcJtnsh1sO8Qu20UodaJfRylNL3dqphIltpwl6eq4RTLhgjDEDTvHU6cQdfB1I5qVbDhlxSpL5uFRl91XLXvA18wKQledC3M3Esr7V/loscIOl1knCaD+t6wPVCEdqK0dB2uHT3kCgYEA3p3rlmCmWzkZ/U8jE4087YEkJWV+r86YC63r4YZEqZtfHk4hNchAYke4jYPqkTtmRVZi2C6KuVr5M3ASHmGWorBY0VA9Abd3daniNocZCeMOt4Z7U6MIbqW7KYSrjx8V8HIsdH7HF97ofRuMH6oaz9bFMM6XwrEAMY+zTdH9A4Y="
notify-url
:
'
https://testgoblin.zhengzai.tv/goblin/bracelet/callback'
\ No newline at end of file
liquidnet-bus-config/liquidnet-config/liquidnet-service-goblin.yml
View file @
d31b13fa
...
...
@@ -73,7 +73,7 @@ spring:
autoconfigure
:
exclude
:
-
org.springframework.cloud.bus.BusAutoConfiguration
-
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
#
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
redis
:
queue
:
database
:
${liquidnet.redis.queue.database}
...
...
@@ -102,6 +102,17 @@ spring:
uri
:
mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=200&waitQueueMultiple=100
sslEnabled
:
${liquidnet.mongodb.sslEnabled}
database
:
${liquidnet.mongodb.database}
datasource
:
name
:
${liquidnet.mysql.database-name}
url
:
jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
username
:
${liquidnet.mysql.username}
password
:
${liquidnet.mysql.password}
# type: com.alibaba.druid.pool.DruidDataSource
driver-class-name
:
com.mysql.cj.jdbc.Driver
hikari
:
maximum-pool-size
:
45
minimum-idle
:
8
connection-test-query
:
SELECT 1
# -----------------------------------------------------------
...
...
@@ -134,6 +145,7 @@ global-auth:
-
${liquidnet.info.context}/app/mix/list
-
${liquidnet.info.context}/app/mix/details
-
${liquidnet.info.context}/wdt/**
-
${liquidnet.info.context}/bracelet/callback
oncheck-url-pattern
:
-
# -----------------------------------------------------------
...
...
liquidnet-bus-config/liquidnet-config/liquidnet-service-kylin-dev.yml
View file @
d31b13fa
...
...
@@ -22,3 +22,5 @@ liquidnet:
localUrl
:
${liquidnet.service.kylin.url-pay.localUrl}
adam
:
url
:
${liquidnet.service.adam.url}
feishu
:
bWebhook
:
"
https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
liquidnet-bus-config/liquidnet-config/liquidnet-service-kylin-test.yml
View file @
d31b13fa
...
...
@@ -22,3 +22,5 @@ liquidnet:
localUrl
:
${liquidnet.service.kylin.url-pay.localUrl}
adam
:
url
:
${liquidnet.service.adam.url}
feishu
:
bWebhook
:
"
https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
\ No newline at end of file
liquidnet-bus-config/liquidnet-config/liquidnet-service-kylin-test2.yml
View file @
d31b13fa
...
...
@@ -22,3 +22,5 @@ liquidnet:
localUrl
:
${liquidnet.service.kylin.url-pay.localUrl}
adam
:
url
:
${liquidnet.service.adam.url}
feishu
:
bWebhook
:
"
https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
\ No newline at end of file
liquidnet-bus-config/liquidnet-config/liquidnet-service-kylin-yace.yml
View file @
d31b13fa
...
...
@@ -22,3 +22,5 @@ liquidnet:
localUrl
:
${liquidnet.service.kylin.url-pay.localUrl}
adam
:
url
:
${liquidnet.service.adam.url}
feishu
:
bWebhook
:
"
https://open.feishu.cn/open-apis/bot/v2/hook/6315d096-5947-4bbb-9c34-90808dd91555"
liquidnet-bus-config/liquidnet-config/liquidnet-service-kylin.yml
View file @
d31b13fa
...
...
@@ -73,7 +73,7 @@ spring:
autoconfigure
:
exclude
:
-
org.springframework.cloud.bus.BusAutoConfiguration
-
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
#
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
redis
:
queue
:
database
:
${liquidnet.redis.queue.database}
...
...
@@ -102,6 +102,17 @@ spring:
uri
:
mongodb://${liquidnet.mongodb.user}:${liquidnet.mongodb.pwd}@${liquidnet.mongodb.host}/?authSource=admin&maxPoolSize=200&waitQueueMultiple=100
sslEnabled
:
${liquidnet.mongodb.sslEnabled}
database
:
${liquidnet.mongodb.database}
datasource
:
name
:
${liquidnet.mysql.database-name}
url
:
jdbc:mysql://${liquidnet.mysql.urlHostAndPort}/${liquidnet.mysql.database-name}?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false
username
:
${liquidnet.mysql.username}
password
:
${liquidnet.mysql.password}
# type: com.alibaba.druid.pool.DruidDataSource
driver-class-name
:
com.mysql.cj.jdbc.Driver
hikari
:
maximum-pool-size
:
45
minimum-idle
:
8
connection-test-query
:
SELECT 1
# -----------------------------------------------------------
# -----------------------------------------------------------
...
...
@@ -143,6 +154,9 @@ global-auth:
# 场地摄像头列表
-
${liquidnet.info.context}/camera/list
-
${liquidnet.info.context}/inner/**
# 福袋
-
${liquidnet.info.context}/luckyBag/scope
-
${liquidnet.info.context}/luckyBag/code/**
oncheck-url-pattern
:
-
${liquidnet.info.context}/order/details
-
${liquidnet.info.context}/order/transfer*
...
...
liquidnet-bus-config/liquidnet-config/liquidnet-service-sweet.yml
View file @
d31b13fa
...
...
@@ -128,6 +128,8 @@ global-auth:
-
${liquidnet.info.context}/wechatTemplate/followStatusPhone
# 做积分任务
-
${liquidnet.info.context}/wechatUsers/doTask
# doudou
-
${liquidnet.info.context}/doudou
oncheck-url-pattern
:
# - ${liquidnet.info.context}/**
# -----------------------------------------------------------
...
...
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/entity/GoblinBraceletOrder.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
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
;
import
java.time.LocalDateTime
;
/**
* 手环订单表实体类
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
GoblinBraceletOrder
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 主键ID
*/
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 订单ID
*/
private
String
orderId
;
/**
* 用户ID
*/
private
String
userId
;
/**
* 绑定用户姓名
*/
private
String
bindName
;
/**
* 绑定用户手机号
*/
private
String
bindMobile
;
/**
* 绑定用户身份证号码
*/
private
String
bindIdcard
;
/**
* 请求日期
*/
private
String
reqDate
;
/**
* 商品描述
*/
private
String
goodsDesc
;
/**
* 手环ID
*/
private
String
wristbandId
;
/**
*手环金额
*/
private
BigDecimal
wristbandPrice
;
/**
*充值金额ID
*/
private
String
amountId
;
/**
*充值金额
*/
private
BigDecimal
amountPrice
;
/**
* 请求流水号
*/
private
String
reqSeqId
;
/**
* 全局流水号
*/
private
String
hfSeqId
;
/**
* 交易类型:
* T_JSAPI: 微信公众号支付
* T_MINIAPP: 微信小程序支付
* A_JSAPI: 支付宝JS
* A_NATIVE: 支付宝正扫
* U_NATIVE: 银联正扫
* U_JSAPI: 银联 JS
* D_NATIVE: 数字人民币正扫
* T_H5:微信直连H5支付
* T_APP:微信APP支付
* T_NATIVE:微信正扫
*/
private
String
tradeType
;
/**
* 用户账单上的交易订单号
*/
private
String
outTransId
;
/**
* 用户账单上的商户订单号
*/
private
String
partyOrderId
;
/**
* 支付完成时间 格式yyyyMMddHHmmss
*/
private
String
endTime
;
/**
* 入账时间 格式为yyyyMMdd
*/
private
String
acctDate
;
/**
* 单价
*/
private
BigDecimal
price
;
/**
* 应付价格
*/
private
BigDecimal
priceTotal
;
/**
* 实付价格
*/
private
BigDecimal
priceActual
;
/**
* 退款价格
*/
private
BigDecimal
priceRefund
;
/**
* 退款扣除的手续费金额
*/
private
BigDecimal
refundPriceCharges
;
/**
* 退款数
*/
private
Integer
refundNumber
;
/**
* 支付时间
*/
private
String
timePay
;
/**
* 订单状态:
* 0 待付款
* 1 已付款
* 2 已关闭
* 3 正在退款
* 4 已退款
* 5 待关闭
* 6 部分退款
* 7 退款失败
*/
private
Integer
status
;
/**
* 支付状态:
* 0 未支付
* 1 已支付
* 2 支付失败
*/
private
Integer
payStatus
;
/**
* 迈之的分订单号
*/
private
String
foutTradeNo
;
/**
* 迈之的设备编号
*/
private
String
cardno
;
/**
* 迈之的分订单号
*/
private
Integer
refundStatus
;
/**
* 迈之的设备编号
*/
private
String
refundStatusNote
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 更新时间
*/
private
LocalDateTime
updatedAt
;
/**
* 备注
*/
private
String
comment
;
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/entity/GoblinRechargeAmount.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
entity
;
import
java.math.BigDecimal
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDateTime
;
import
java.io.Serializable
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 充值金额选项表
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
GoblinRechargeAmount
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 金额ID
*/
private
String
amountId
;
/**
* 金额名称
*/
private
String
name
;
/**
* 充值金额
*/
private
BigDecimal
price
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 更新时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/entity/GoblinRechargeWristband.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
entity
;
import
java.math.BigDecimal
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDateTime
;
import
java.io.Serializable
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 手环信息表
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
GoblinRechargeWristband
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 手环ID
*/
private
String
wristbandId
;
/**
* 手环名称
*/
private
String
name
;
/**
* 手环价格
*/
private
BigDecimal
price
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 更新时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/mapper/GoblinBraceletOrderMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.goblin.entity.GoblinBraceletOrder
;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jxl
*/
public
interface
GoblinBraceletOrderMapper
extends
BaseMapper
<
GoblinBraceletOrder
>
{
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/mapper/GoblinRechargeAmountMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
mapper
;
import
com.liquidnet.service.goblin.entity.GoblinRechargeAmount
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
/**
* <p>
* 充值金额选项表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public
interface
GoblinRechargeAmountMapper
extends
BaseMapper
<
GoblinRechargeAmount
>
{
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/java/com/liquidnet/service/goblin/mapper/GoblinRechargeWristbandMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
mapper
;
import
com.liquidnet.service.goblin.entity.GoblinRechargeWristband
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
/**
* <p>
* 手环信息表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
public
interface
GoblinRechargeWristbandMapper
extends
BaseMapper
<
GoblinRechargeWristband
>
{
}
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/resources/GoblinRechargeAmountMapper.xml
0 → 100644
View file @
d31b13fa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.liquidnet.service.goblin.mapper.GoblinRechargeAmountMapper"
>
</mapper>
liquidnet-bus-do/liquidnet-service-goblin-do/src/main/resources/GoblinRechargeWristbandMapper.xml
0 → 100644
View file @
d31b13fa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.liquidnet.service.goblin.mapper.GoblinRechargeWristbandMapper"
>
</mapper>
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/dao/BannerDetailsListDao.java
View file @
d31b13fa
...
...
@@ -41,6 +41,16 @@ public class BannerDetailsListDao implements Serializable {
private
String
updatedAt
;
/**
* 演出ID
*/
private
String
performanceId
;
/**
* 演出名称
*/
private
String
performanceName
;
public
void
setIsOnlineName
(
Integer
isOnline
){
this
.
isOnline
=
isOnline
;
switch
(
isOnline
){
...
...
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinBanners.java
View file @
d31b13fa
...
...
@@ -110,6 +110,16 @@ public class KylinBanners implements Serializable, Cloneable {
*/
private
String
updatedAt
;
/**
* 演出ID
*/
private
String
performanceId
;
/**
* 演出名称
*/
private
String
performanceName
;
private
static
final
KylinBanners
obj
=
new
KylinBanners
();
public
static
KylinBanners
getNew
()
{
...
...
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinBrands.java
0 → 100644
View file @
d31b13fa
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.time.LocalDateTime
;
/**
* 福袋品牌方表
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinBrands
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 品牌ID
*/
private
String
brandId
;
/**
* 品牌名称
*/
private
String
name
;
/**
* 品牌地址
*/
private
String
address
;
/**
* 官网URL
*/
private
String
websiteUrl
;
/**
* 简介
*/
private
String
introduction
;
/**
* 联系人
*/
private
String
contactName
;
/**
* 联系电话
*/
private
String
contactPhone
;
/**
* 1-可用, 0-不可用
*/
private
Integer
state
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 修改时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinLuckyBag.java
0 → 100644
View file @
d31b13fa
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.time.LocalDateTime
;
/**
* 福袋配置表
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinLuckyBag
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 福袋ID
*/
private
String
luckyBagId
;
/**
* 福袋名称
*/
private
String
name
;
/**
* 福袋简介
*/
private
String
introduction
;
/**
* 所属品牌ID
*/
private
String
brandId
;
/**
* 所属演出ID
*/
private
String
performanceId
;
/**
* 所属演出名称
*/
private
String
performanceName
;
/**
* 所属场次ID
*/
private
String
ticketTimesId
;
/**
* 所属票种ID
*/
private
String
ticketsId
;
/**
* 兑换码显示状态 1:兑换码 2:二维码
*/
private
Integer
codeShowType
;
/**
* 状态: 1-可用, 0-不可用
*/
private
Integer
state
;
/**
* 福袋发放时间
*/
private
String
sendTime
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 修改时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinLuckyBagActivity.java
0 → 100644
View file @
d31b13fa
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.time.LocalDateTime
;
/**
* 福袋活动表
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinLuckyBagActivity
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 福袋活动ID
*/
private
String
luckyBagActivityId
;
/**
* 活动名称
*/
private
String
name
;
/**
* 活动简介
*/
private
String
detail
;
/**
* 跳转地址
*/
private
String
targetUrl
;
/**
* 所属演出ID
*/
private
String
performanceId
;
/**
* 状态: 1-可用, 0-不可用
*/
private
Integer
state
;
/**
* 排序(越大越靠前)
*/
private
Integer
sort
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 修改时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinLuckyBagScope.java
0 → 100644
View file @
d31b13fa
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.time.LocalDateTime
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinLuckyBagScope
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 手机号
*/
private
String
mobile
;
/**
* 福袋ID
*/
private
String
luckyBagId
;
/**
* 昵称
*/
private
String
nickName
;
/**
* 真实姓名
*/
private
String
realName
;
/**
* 身份证号码
*/
private
String
idCard
;
/**
* 状态: 1-可用, 0-不可用
*/
private
Integer
state
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 修改时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinRewardCode.java
0 → 100644
View file @
d31b13fa
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.time.LocalDateTime
;
/**
* 兑换码表
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinRewardCode
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 兑换码
*/
private
String
code
;
/**
* 所属福袋ID
*/
private
String
luckyBagId
;
/**
* 状态: 1-可用, 0-不可用
*/
private
Integer
state
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 修改时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinRewardUser.java
0 → 100644
View file @
d31b13fa
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.time.LocalDateTime
;
/**
* 用户领取兑换码表
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
KylinRewardUser
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 用户ID
*/
private
String
uid
;
/**
* 所属福袋ID
*/
private
String
luckyBagId
;
/**
* 订单ID(kylin_order_tickets)
*/
private
String
orderId
;
/**
* 订单详情ID(kylin_order_ticket_entities)
*/
private
String
orderTicketEntitiesId
;
/**
* 兑换码
*/
private
String
code
;
/**
* 状态 0不可用 1可用 2已使用
*/
private
Integer
state
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 修改时间
*/
private
LocalDateTime
updatedAt
;
/**
* 保留字段
*/
private
String
comment
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinBrandsMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinBrands
;
public
interface
KylinBrandsMapper
extends
BaseMapper
<
KylinBrands
>
{
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinLuckyBagActivityMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinLuckyBagActivity
;
public
interface
KylinLuckyBagActivityMapper
extends
BaseMapper
<
KylinLuckyBagActivity
>
{
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinLuckyBagMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinLuckyBag
;
public
interface
KylinLuckyBagMapper
extends
BaseMapper
<
KylinLuckyBag
>
{
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinLuckyBagScopeMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinLuckyBagScope
;
public
interface
KylinLuckyBagScopeMapper
extends
BaseMapper
<
KylinLuckyBagScope
>
{
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinRewardCodeMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinRewardCode
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Select
;
import
org.apache.ibatis.annotations.Update
;
public
interface
KylinRewardCodeMapper
extends
BaseMapper
<
KylinRewardCode
>
{
@Select
(
"SELECT * FROM kylin_reward_code WHERE mid = #{mid}"
)
KylinRewardCode
selectByMid
(
@Param
(
"mid"
)
Long
mid
);
@Update
(
"update kylin_reward_code set state=#{state} where mid=#{mid}"
)
int
updateByMid
(
@Param
(
"mid"
)
Long
mid
,
@Param
(
"state"
)
int
state
);
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinRewardUserMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.kylin.entity.KylinRewardUser
;
public
interface
KylinRewardUserMapper
extends
BaseMapper
<
KylinRewardUser
>
{
}
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/java/com/liquidnet/service/sweet/entity/SweetDoudou.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
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.time.LocalDateTime
;
/**
* <p>
* doudou预约签名CD记录表
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
SweetDoudou
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* doudou_id
*/
private
String
doudouId
;
/**
* user_id
*/
private
String
userId
;
/**
* 观演人姓名
*/
private
String
username
;
/**
* 观演人手机号
*/
private
String
phone
;
/**
* 购买平台
*/
private
String
platform
;
/**
* 购买订单号
*/
private
String
orderCode
;
/**
* 想给doudou说的话
*/
private
String
mark
;
/**
* 状态 1已登记 2未中签 3已中签 4已核销
*/
private
Integer
status
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 更新时间
*/
private
LocalDateTime
updatedAt
;
private
static
final
SweetDoudou
obj
=
new
SweetDoudou
();
public
static
SweetDoudou
getNew
()
{
try
{
return
(
SweetDoudou
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
SweetDoudou
();
}
}
}
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/java/com/liquidnet/service/sweet/entity/SweetDoudouActive.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.time.LocalDateTime
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
SweetDoudouActive
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* active_id
*/
private
String
activeId
;
/**
* 标题
*/
private
String
title
;
/**
* 活动详情
*/
private
String
details
;
/**
* 卡片背景图
*/
private
String
cardImages
;
/**
* 活动详情背景图
*/
private
String
detailImages
;
/**
* 活动详情URL
*/
private
String
targetUrl
;
/**
* 开始时间
*/
private
String
beginAt
;
/**
* 结束时间
*/
private
String
endAt
;
/**
* 排序,越大越靠前
*/
private
Integer
sort
;
/**
* 状态 1可用 0不可用
*/
private
Integer
status
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 更新时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/java/com/liquidnet/service/sweet/entity/SweetDoudouScope.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
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.time.LocalDateTime
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
public
class
SweetDoudouScope
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"mid"
,
type
=
IdType
.
AUTO
)
private
Long
mid
;
/**
* 手机号
*/
private
String
mobile
;
/**
* 昵称
*/
private
String
nickName
;
/**
* 真实姓名
*/
private
String
realName
;
/**
* 身份证号码
*/
private
String
idCard
;
/**
* 状态: 1-可用, 0-不可用
*/
private
Integer
status
;
/**
* 创建时间
*/
private
LocalDateTime
createdAt
;
/**
* 修改时间
*/
private
LocalDateTime
updatedAt
;
}
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/java/com/liquidnet/service/sweet/mapper/SweetDoudouActiveMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.sweet.entity.SweetDoudou
;
import
com.liquidnet.service.sweet.entity.SweetDoudouActive
;
/**
* <p>
* doudou预约签名CD记录表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
public
interface
SweetDoudouActiveMapper
extends
BaseMapper
<
SweetDoudouActive
>
{
}
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/java/com/liquidnet/service/sweet/mapper/SweetDoudouMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
mapper
;
import
com.liquidnet.service.sweet.entity.SweetDoudou
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
/**
* <p>
* doudou预约签名CD记录表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
public
interface
SweetDoudouMapper
extends
BaseMapper
<
SweetDoudou
>
{
}
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/java/com/liquidnet/service/sweet/mapper/SweetDoudouScopeMapper.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.liquidnet.service.sweet.entity.SweetDoudou
;
import
com.liquidnet.service.sweet.entity.SweetDoudouScope
;
/**
* <p>
* doudou预约签名CD记录表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
public
interface
SweetDoudouScopeMapper
extends
BaseMapper
<
SweetDoudouScope
>
{
}
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/resources/com.liquidnet.service.sweet.mapper/SweetDoudouActiveMapper.xml
0 → 100644
View file @
d31b13fa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.liquidnet.service.sweet.mapper.SweetDoudouActiveMapper"
>
</mapper>
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/resources/com.liquidnet.service.sweet.mapper/SweetDoudouMapper.xml
0 → 100644
View file @
d31b13fa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.liquidnet.service.sweet.mapper.SweetDoudouMapper"
>
</mapper>
liquidnet-bus-do/liquidnet-service-sweet-do/src/main/resources/com.liquidnet.service.sweet.mapper/SweetDoudouScopeMapper.xml
0 → 100644
View file @
d31b13fa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.liquidnet.service.sweet.mapper.SweetDoudouScopeMapper"
>
</mapper>
liquidnet-bus-feign/liquidnet-api-feign-goblin/src/main/java/com/liquidnet/service/feign/goblin/task/FeignGoblinTaskClient.java
View file @
d31b13fa
...
...
@@ -22,4 +22,10 @@ public interface FeignGoblinTaskClient {
@GetMapping
(
"rsc/nft/job/mixList"
)
ResponseDto
<
Boolean
>
mixList
();
@GetMapping
(
"/rsc/maizhi/job/getDeviceNumber"
)
ResponseDto
<
Boolean
>
getDeviceNumber
();
@GetMapping
(
"/rsc/maizhi/job/refundRes"
)
ResponseDto
<
Boolean
>
refundRes
();
}
liquidnet-bus-service/liquidnet-service-executor-all/liquidnet-service-executor-main/src/main/java/com/liquidnet/service/executor/main/handler/GoblinTaskHandler.java
View file @
d31b13fa
...
...
@@ -48,4 +48,24 @@ public class GoblinTaskHandler {
XxlJobHelper
.
handleFail
();
}
}
@XxlJob
(
value
=
"sev-goblin:getDeviceNumber"
)
public
void
getDeviceNumber
()
{
try
{
XxlJobHelper
.
handleSuccess
(
"结果:"
+
feignGoblinTaskClient
.
getDeviceNumber
().
getData
());
}
catch
(
Exception
e
)
{
XxlJobHelper
.
log
(
e
);
XxlJobHelper
.
handleFail
();
}
}
@XxlJob
(
value
=
"sev-goblin:refundRes"
)
public
void
refundRes
()
{
try
{
XxlJobHelper
.
handleSuccess
(
"结果:"
+
feignGoblinTaskClient
.
refundRes
().
getData
());
}
catch
(
Exception
e
)
{
XxlJobHelper
.
log
(
e
);
XxlJobHelper
.
handleFail
();
}
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/docu/goblin_recharge.sql
0 → 100644
View file @
d31b13fa
-- 创建手环产品表
CREATE
TABLE
IF
NOT
EXISTS
goblin_recharge_wristband
(
mid
BIGINT
UNSIGNED
AUTO_INCREMENT
PRIMARY
KEY
,
wristband_id
VARCHAR
(
64
)
NOT
NULL
DEFAULT
''
COMMENT
'手环ID'
,
name
VARCHAR
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'手环名称'
,
price
DECIMAL
(
10
,
2
)
NOT
NULL
DEFAULT
0
COMMENT
'手环价格'
,
created_at
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
updated_at
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'手环信息表'
;
-- 创建充值金额表
CREATE
TABLE
IF
NOT
EXISTS
goblin_recharge_amount
(
mid
BIGINT
UNSIGNED
AUTO_INCREMENT
PRIMARY
KEY
,
amount_id
VARCHAR
(
64
)
NOT
NULL
DEFAULT
''
COMMENT
'金额ID'
,
name
VARCHAR
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'金额名称'
,
price
DECIMAL
(
10
,
2
)
NOT
NULL
DEFAULT
0
COMMENT
'充值金额'
,
created_at
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
updated_at
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'充值金额选项表'
;
-- 手环订单表
CREATE
TABLE
goblin_bracelet_order
(
`mid`
int
(
10
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
`order_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'order_id'
,
`user_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户id'
,
`bind_name`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'绑定用户姓名'
,
`bind_mobile`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'绑定用户手机号'
,
`bind_idcard`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'绑定用户身份证号码'
,
`req_date`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'请求日期'
,
`goods_desc`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'商品描述'
,
`wristband_id`
VARCHAR
(
64
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'手环ID'
,
`wristband_price`
DECIMAL
(
10
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'手环金额'
,
`amount_id`
VARCHAR
(
64
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'金额ID'
,
`amount_price`
DECIMAL
(
10
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'充值金额'
,
`req_seq_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'请求流水号'
,
`hf_seq_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'全局流水号'
,
`trade_type`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'交易类型 T_JSAPI: 微信公众号支付 T_MINIAPP: 微信小程序支付 A_JSAPI: 支付宝JS A_NATIVE: 支付宝正扫 U_NATIVE: 银联正扫 U_JSAPI: 银联 JS D_NATIVE: 数字人民币正扫 T_H5:微信直连H5支付 T_APP:微信APP支付 T_NATIVE:微信正扫'
,
`out_trans_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户账单上的交易订单号'
,
`party_order_id`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'用户账单上的商户订单号'
,
`end_time`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'支付完成时间 格式yyyyMMddHHmmss'
,
`acct_date`
varchar
(
20
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'入账时间 格式为yyyyMMdd'
,
`price`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'单价'
,
`price_total`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'应付价格'
,
`price_actual`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'实付价格'
,
`price_refund`
decimal
(
8
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'退款价格'
,
`refund_price_charges`
decimal
(
10
,
2
)
NOT
NULL
DEFAULT
'0.00'
COMMENT
'退款扣除的手续费金额'
,
`refund_number`
int
(
11
)
NOT
NULL
DEFAULT
'0'
COMMENT
'退款数'
,
`time_pay`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'支付时间'
,
`status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'订单状态:0待付款,1已付款,2已关闭,3正在退款,4已退款, 5待关闭 6部分退款'
,
`pay_status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'支付状态:0未支付 1已支付 2支付失败'
,
`fout_trade_no`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'迈之的分订单号'
,
`cardno`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'迈之的设备编号'
,
`refund_status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'0'
COMMENT
'迈之退款审核状态:0待审核 1 审核通过 2 审核驳回'
,
`refund_status_note`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'迈之退款驳回原因'
,
`created_at`
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`updated_at`
timestamp
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
,
`comment`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'comment'
,
PRIMARY
KEY
(
`mid`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'手环订单表'
;
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/pom.xml
View file @
d31b13fa
...
...
@@ -97,6 +97,12 @@
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
</dependency>
<dependency>
<groupId>
com.huifu.bspay.sdk
</groupId>
<artifactId>
dg-java-sdk
</artifactId>
<version>
3.0.27
</version>
</dependency>
</dependencies>
<build>
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/ServiceGoblinApplication.java
View file @
d31b13fa
package
com
.
liquidnet
.
service
;
import
lombok.extern.slf4j.Slf4j
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.SpringApplication
;
...
...
@@ -14,6 +15,7 @@ import java.util.Arrays;
@Slf4j
@EnableFeignClients
@SpringBootApplication
(
scanBasePackages
=
{
"com.liquidnet"
})
@MapperScan
(
basePackages
=
{
"com.liquidnet.service.*.mapper"
})
public
class
ServiceGoblinApplication
implements
CommandLineRunner
{
@Autowired
private
Environment
environment
;
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/config/properties/AppProperties.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
config
.
properties
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
@ConfigurationProperties
(
prefix
=
"liquidnet.lxpay"
)
@Component
@Setter
@Getter
public
class
AppProperties
{
private
Map
<
String
,
AppInfo
>
apps
;
@Data
public
static
class
AppInfo
{
private
String
productId
;
private
String
sysId
;
private
String
huifuId
;
private
String
subAppId
;
private
String
publicKey
;
private
String
privateKey
;
private
String
notifyUrl
;
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/GoblinBraceletOrderController.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
controller
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.codec.annotation.DecryptAndVerify
;
import
com.liquidnet.service.base.codec.vo.EncryptedReq
;
import
com.liquidnet.service.goblin.dto.vo.GoblinBraceletOrderVo
;
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.IGoblinBraceletOrderService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotBlank
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
@Api
(
tags
=
"商城-手环相关"
)
@RestController
@RequestMapping
(
"/bracelet"
)
public
class
GoblinBraceletOrderController
{
@Autowired
private
IGoblinBraceletOrderService
braceLetOrderService
;
@PostMapping
(
"/pre"
)
@ApiOperation
(
"下单(加密)"
)
@DecryptAndVerify
(
decryptedClass
=
GoblinBraceletOrderPayParam
.
class
)
public
ResponseDto
<
GoblinBraceletPayResultVo
>
checkOrder
(
@RequestBody
@Valid
EncryptedReq
<
GoblinBraceletOrderPayParam
>
payParam
)
{
return
braceLetOrderService
.
checkOrder
(
payParam
.
getData
());
}
@PostMapping
(
"/fc7bce6d6c2213b866f76493f92224b8"
)
@ApiOperation
(
"下单(非加密)"
)
public
ResponseDto
<
GoblinBraceletPayResultVo
>
checkOrder
(
@RequestBody
@Valid
GoblinBraceletOrderPayParam
payParam
)
{
return
braceLetOrderService
.
checkOrder
(
payParam
);
}
@GetMapping
(
"/checkPayment"
)
@ApiOperation
(
"查询订单状态"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"orderId"
,
value
=
"订单ID"
,
example
=
"1"
),
})
public
ResponseDto
<
Map
<
String
,
Object
>>
checkOrderResult
(
@RequestParam
(
"orderId"
)
@NotBlank
(
message
=
"订单ID不能为空"
)
String
orderId
)
{
return
braceLetOrderService
.
checkOrderResult
(
orderId
);
}
@GetMapping
(
"/order/list"
)
@ApiOperation
(
"查询订单列表"
)
public
ResponseDto
<
List
<
GoblinBraceletOrderVo
>>
getOrderList
()
{
return
ResponseDto
.
success
(
braceLetOrderService
.
getOrderList
());
}
@PostMapping
(
"/callback"
)
// @ApiOperation("斗拱支付回调")
public
ResponseDto
<
Boolean
>
dougongCallBack
(
@RequestParam
Map
<
String
,
Object
>
params
)
{
log
.
info
(
"dougong-callback: {}."
,
JsonUtils
.
toJson
(
params
));
DougongSyncCallbackparam
dougongSyncCallbackparam
=
new
DougongSyncCallbackparam
();
dougongSyncCallbackparam
.
setRespCode
((
String
)
params
.
get
(
"resp_code"
));
dougongSyncCallbackparam
.
setRespDesc
((
String
)
params
.
get
(
"resp_code"
));
dougongSyncCallbackparam
.
setSign
((
String
)
params
.
get
(
"sign"
));
dougongSyncCallbackparam
.
setRespData
((
String
)
params
.
get
(
"resp_data"
));
return
braceLetOrderService
.
dougongCallBack
(
dougongSyncCallbackparam
);
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/GoblinRechargeAmountController.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
controller
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.vo.GoblinRechargeWristbandVo
;
import
com.liquidnet.service.goblin.dto.vo.MaiZhiAllVo.*
;
import
com.liquidnet.service.goblin.service.IGoblinRechargeWristbandService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
import
java.util.List
;
@Slf4j
@Api
(
tags
=
"充值金额"
)
@RestController
@Validated
@RequestMapping
(
"/recharge"
)
public
class
GoblinRechargeAmountController
{
@Autowired
private
IGoblinRechargeWristbandService
iGoblinRechargeWristbandService
;
@GetMapping
(
"goods/list"
)
@ApiOperation
(
"获得金额列表"
)
public
ResponseDto
<
GoblinRechargeWristbandVo
>
getList
()
{
return
ResponseDto
.
success
(
iGoblinRechargeWristbandService
.
getList
());
}
@PostMapping
(
"auth"
)
@ApiOperation
(
"二要素认证"
)
public
ResponseDto
<
String
>
auth
(
@RequestBody
IdCardParam
param
)
{
CheckIdcardResponse
res
=
iGoblinRechargeWristbandService
.
auth
(
param
);
if
(
null
!=
res
&&
res
.
getErrcode
()
==
200
)
{
return
ResponseDto
.
success
(
res
.
getMessage
());
}
else
{
return
ResponseDto
.
failure
(
res
.
getMsg
());
}
}
/*@PostMapping("order/create")
@ApiOperation("创建订单")
public ResponseDto<String> createOrder(@RequestBody OrderParam param) {
OrderResponse res = iGoblinRechargeWristbandService.createOrder(param);
if (null != res && res.getErrcode() == 200) {
return ResponseDto.success(res.getMsg());
} else {
return ResponseDto.failure(res.getMsg());
}
}*/
/*@PostMapping("order/info")
@ApiOperation("订单查询")
public ResponseDto<List<OrderInfoResponse.OrderList>> getOrder(@RequestBody OrderInfoParam param) {
OrderInfoResponse res = iGoblinRechargeWristbandService.getOrder(param);
if (null != res && res.getErrcode() == 200) {
return ResponseDto.success(res.getOutlist());
} else {
return ResponseDto.failure();
}
}*/
@GetMapping
(
"order/qrcode"
)
@ApiOperation
(
"获取二维码字符串"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"param"
,
required
=
true
,
name
=
"outno"
,
value
=
"分订单号"
),
})
public
ResponseDto
<
String
>
getQrcode
(
@NotBlank
(
message
=
"参数无效:outno"
)
@RequestParam
(
"outno"
)
String
outno
)
{
GenerateDeviceCodeResponse
res
=
iGoblinRechargeWristbandService
.
getQrcode
(
outno
);
if
(
null
!=
res
&&
res
.
getErrcode
()
==
200
)
{
return
ResponseDto
.
success
(
res
.
getQrcode_str
());
}
else
{
return
ResponseDto
.
failure
();
}
}
/*@GetMapping("device/mumber")
@ApiOperation("获取设备编号列表")
@ApiImplicitParams({
@ApiImplicitParam(type = "param", required = true, name = "operationNo", value = "活动号"),
})
public ResponseDto<Boolean> getDeviceNumber(
@NotNull(message = "参数无效") @RequestParam("operationNo") Integer operationNo
) {
Boolean res = iGoblinRechargeWristbandService.getDeviceNumber(operationNo);
if (res) {
return ResponseDto.success();
} else {
return ResponseDto.failure();
}
}*/
@GetMapping
(
"device/balance"
)
@ApiOperation
(
"获取余额"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"param"
,
required
=
true
,
name
=
"cardno"
,
value
=
"设备编号"
),
})
public
ResponseDto
<
BigDecimal
>
getDeviceBalance
(
@NotBlank
(
message
=
"参数无效:cardno"
)
@RequestParam
(
"cardno"
)
String
cardno
)
{
DeviceBalanceResponse
res
=
iGoblinRechargeWristbandService
.
getDeviceBalance
(
cardno
);
if
(
null
!=
res
&&
res
.
getErrcode
()
==
200
)
{
return
ResponseDto
.
success
(
res
.
getMoney
());
}
else
{
return
ResponseDto
.
failure
(
res
.
getMsg
());
}
}
@GetMapping
(
"device/record"
)
@ApiOperation
(
"获取设备记录"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"param"
,
required
=
true
,
name
=
"cardno"
,
value
=
"设备编号"
),
@ApiImplicitParam
(
type
=
"param"
,
required
=
true
,
name
=
"page"
,
value
=
"分页"
),
})
public
ResponseDto
<
DeviceRecordResponse
>
getDeviceRecord
(
@NotBlank
(
message
=
"参数无效:cardno"
)
@RequestParam
(
"cardno"
)
String
cardno
,
@NotNull
(
message
=
"参数无效:page"
)
@RequestParam
(
"page"
)
Integer
page
)
{
DeviceRecordResponse
res
=
iGoblinRechargeWristbandService
.
getDeviceRecord
(
cardno
,
page
);
if
(
null
!=
res
&&
res
.
getErrcode
()
==
200
)
{
return
ResponseDto
.
success
(
res
);
}
else
{
return
ResponseDto
.
failure
(
res
.
getMsg
());
}
}
@GetMapping
(
"order/refund/apply"
)
@ApiOperation
(
"退款申请"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"param"
,
required
=
true
,
name
=
"orderId"
,
value
=
"订单编号"
),
})
public
ResponseDto
<
ChangeDeviceStatusResponse
>
refundApply
(
@NotBlank
(
message
=
"参数无效:orderId"
)
@RequestParam
(
"orderId"
)
String
orderId
)
{
ChangeDeviceStatusResponse
res
=
iGoblinRechargeWristbandService
.
changeDeviceStatus
(
orderId
,
1
);
if
(
null
!=
res
&&
res
.
getErrcode
()
==
200
)
{
return
ResponseDto
.
success
(
res
);
}
else
{
return
ResponseDto
.
failure
(
res
.
getMsg
());
}
}
/*@GetMapping("order/refund/result")
@ApiOperation("退款结果查询")
public ResponseDto<Boolean> refundRes() {
Boolean res = iGoblinRechargeWristbandService.refundRes();
if (res) {
return ResponseDto.success();
} else {
return ResponseDto.failure();
}
}*/
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/Inner/GoblinMaiZhiJobController.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
controller
.
Inner
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.service.IGoblinRechargeWristbandService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@Slf4j
@Api
(
tags
=
"@API:RSC"
)
@RestController
@Validated
@RequestMapping
(
"/rsc/maizhi/job"
)
public
class
GoblinMaiZhiJobController
{
@Autowired
private
IGoblinRechargeWristbandService
iGoblinRechargeWristbandService
;
@GetMapping
(
"getDeviceNumber"
)
@ApiOperation
(
"获取设备编号JOB"
)
public
ResponseDto
<
Boolean
>
getDeviceNumber
()
{
return
ResponseDto
.
success
(
iGoblinRechargeWristbandService
.
getDeviceNumber
(
2
));
}
@GetMapping
(
"refundRes"
)
@ApiOperation
(
"获取设备编号JOB"
)
public
ResponseDto
<
Boolean
>
refundRes
()
{
return
ResponseDto
.
success
(
iGoblinRechargeWristbandService
.
refundRes
());
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinBraceletOrderServiceImpl.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
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.base.SqlMapping
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.goblin.dto.vo.*
;
import
com.liquidnet.service.goblin.entity.GoblinBraceletOrder
;
import
com.liquidnet.service.goblin.enums.OrderStatus
;
import
com.liquidnet.service.goblin.enums.PayStatus
;
import
com.liquidnet.service.goblin.mapper.GoblinBraceletOrderMapper
;
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.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
;
import
com.liquidnet.service.goblin.util.QueueUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Slf4j
@Service
public
class
GoblinBraceletOrderServiceImpl
extends
ServiceImpl
<
GoblinBraceletOrderMapper
,
GoblinBraceletOrder
>
implements
IGoblinBraceletOrderService
{
@Autowired
GoblinRedisUtils
goblinRedisUtils
;
@Autowired
private
QueueUtils
queueUtils
;
@Autowired
private
IGoblinRechargeWristbandService
rechargeWristbandService
;
@Autowired
private
IGoblinDougongPayService
dougongPayService
;
@Autowired
private
IGoblinRechargeWristbandService
iGoblinRechargeWristbandService
;
@Autowired
private
GoblinBraceletOrderMapper
braceletOrderMapper
;
@Override
public
ResponseDto
<
GoblinBraceletPayResultVo
>
checkOrder
(
GoblinBraceletOrderPayParam
payParam
)
{
log
.
info
(
"request param: {}."
,
JsonUtils
.
toJson
(
payParam
));
LambdaQueryWrapper
<
GoblinBraceletOrder
>
queryWrapper
=
new
QueryWrapper
<
GoblinBraceletOrder
>()
.
lambda
()
.
eq
(
GoblinBraceletOrder:
:
getBindIdcard
,
payParam
.
getIdCard
())
.
in
(
GoblinBraceletOrder:
:
getStatus
,
OrderStatus
.
PAID
.
getCode
(),
OrderStatus
.
REFUNDING
.
getCode
(),
OrderStatus
.
PARTIAL_REFUND
.
getCode
());
List
<
GoblinBraceletOrder
>
goblinBraceletOrders
=
braceletOrderMapper
.
selectList
(
queryWrapper
);
if
(!
goblinBraceletOrders
.
isEmpty
())
{
log
.
info
(
"不能重复购买"
);
return
ResponseDto
.
failure
(
"不能重复购买"
);
}
GoblinRechargeWristbandVo
rechargeWristbandVo
=
rechargeWristbandService
.
getList
();
if
(
rechargeWristbandVo
==
null
)
{
log
.
error
(
"查询商品为空"
);
return
ResponseDto
.
failure
(
"下单失败"
);
}
if
(!
rechargeWristbandVo
.
getWristbandId
().
equals
(
payParam
.
getWristbandId
()))
{
log
.
error
(
"下单商品不存在"
);
return
ResponseDto
.
failure
(
"下单商品不存在"
);
}
List
<
GoblinRechargeAmountVo
>
amonutList
=
rechargeWristbandVo
.
getAmonutList
();
if
(
amonutList
.
isEmpty
())
{
log
.
error
(
"充值面额不存在"
);
return
ResponseDto
.
failure
(
"充值面额不存在"
);
}
List
<
GoblinRechargeAmountVo
>
payAmountList
=
amonutList
.
stream
()
.
filter
(
a
->
a
.
getAmountId
().
equals
(
payParam
.
getAmountId
()))
.
collect
(
Collectors
.
toList
());
if
(
payAmountList
.
isEmpty
())
{
log
.
error
(
"充值面额不存在"
);
return
ResponseDto
.
failure
(
"充值面额不存在"
);
}
// 要充值的面额
final
GoblinRechargeAmountVo
payAmountVo
=
payAmountList
.
get
(
0
);
final
String
orderId
=
IDGenerator
.
nextSnowId
();
final
GoblinBraceletOrderVo
orderVo
=
buildRechargeOrder
(
orderId
,
rechargeWristbandVo
.
getWristbandId
(),
rechargeWristbandVo
.
getPrice
(),
payAmountVo
.
getAmountId
(),
payAmountVo
.
getPrice
(),
payParam
);
if
(
orderVo
==
null
)
{
log
.
error
(
"下单失败"
);
return
ResponseDto
.
failure
(
"下单失败"
);
}
// 4. 调用斗拱拉起支付
DougongJsPayData
dougongJsPayData
=
new
DougongJsPayData
();
dougongJsPayData
.
setReqDate
(
orderVo
.
getReqDate
());
dougongJsPayData
.
setReqSeqId
(
orderVo
.
getReqSeqId
());
dougongJsPayData
.
setTradeType
(
orderVo
.
getTradeType
());
dougongJsPayData
.
setGoodsDesc
(
orderVo
.
getGoodsDesc
());
dougongJsPayData
.
setTransAmt
(
orderVo
.
getPriceTotal
().
setScale
(
2
,
RoundingMode
.
HALF_UP
).
toPlainString
());
dougongJsPayData
.
setTimeExpire
(
DateUtil
.
format
(
DateUtil
.
addHour
(
new
Date
(),
2
),
DateUtil
.
Formatter
.
yyyyMMddHHmmssTrim
));
dougongJsPayData
.
setSubOpenid
(
payParam
.
getSubOpenId
());
dougongJsPayData
.
setGoodsDetailList
(
getGoodsDetailList
(
rechargeWristbandVo
.
getWristbandId
(),
rechargeWristbandVo
.
getPrice
(),
rechargeWristbandVo
.
getName
(),
payAmountVo
));
Map
<
String
,
Object
>
dougongResponseMap
=
dougongPayService
.
jsPay
(
dougongJsPayData
);
if
(
null
==
dougongResponseMap
||
dougongResponseMap
.
isEmpty
())
{
log
.
error
(
"拉起下单失败"
);
return
ResponseDto
.
failure
(
"下单失败"
);
}
// 根据响应接口填充参数
orderVo
.
setHfSeqId
((
String
)
dougongResponseMap
.
get
(
"hf_seq_id"
));
orderVo
.
setPartyOrderId
((
String
)
dougongResponseMap
.
get
(
"party_order_id"
));
// 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"
));
LinkedList
<
Object
[]>
sqlDataOrder
=
CollectionUtil
.
linkedListObjectArr
();
sqlDataOrder
.
add
(
new
Object
[]{
orderVo
.
getOrderId
(),
orderVo
.
getUserId
(),
orderVo
.
getBindName
(),
orderVo
.
getBindMobile
(),
orderVo
.
getBindIdcard
(),
orderVo
.
getReqDate
(),
orderVo
.
getGoodsDesc
(),
orderVo
.
getWristbandId
(),
orderVo
.
getWristbandPrice
(),
orderVo
.
getAmountId
(),
orderVo
.
getAmountPrice
(),
orderVo
.
getReqSeqId
(),
orderVo
.
getHfSeqId
(),
orderVo
.
getTradeType
(),
orderVo
.
getPartyOrderId
(),
orderVo
.
getPrice
(),
orderVo
.
getPriceTotal
(),
orderVo
.
getPriceRefund
(),
orderVo
.
getRefundPriceCharges
(),
orderVo
.
getRefundNumber
(),
orderVo
.
getStatus
(),
orderVo
.
getPayStatus
(),
orderVo
.
getCreatedAt
(),
orderVo
.
getUpdatedAt
()
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_GOODS
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlDataOrder
)
);
// 6. 响应数据
GoblinBraceletPayResultVo
resultVo
=
GoblinBraceletPayResultVo
.
getNew
();
resultVo
.
setOrderId
(
orderVo
.
getOrderId
());
resultVo
.
setPrice
(
orderVo
.
getPriceTotal
());
resultVo
.
setPayInfo
(
dougongResponseMap
.
get
(
"pay_info"
));
return
ResponseDto
.
success
(
resultVo
);
}
private
List
<
DougongRequestParam
.
WxDataGoodsDetail
>
getGoodsDetailList
(
String
wristbandId
,
BigDecimal
wristbandPrice
,
String
wristbandName
,
GoblinRechargeAmountVo
payAmountVo
)
{
List
<
DougongRequestParam
.
WxDataGoodsDetail
>
goodsDetailList
=
new
ArrayList
<>();
goodsDetailList
.
add
(
new
DougongRequestParam
.
WxDataGoodsDetail
(
wristbandId
,
wristbandName
,
wristbandPrice
.
toPlainString
(),
1
));
goodsDetailList
.
add
(
new
DougongRequestParam
.
WxDataGoodsDetail
(
payAmountVo
.
getAmountId
(),
payAmountVo
.
getName
(),
payAmountVo
.
getPrice
().
toPlainString
(),
1
));
return
goodsDetailList
;
}
/**
* @param orderId 手环订单ID
* @param wristbandId 手环ID
* @param wristbandPrice 手环金额
* @param amountId 充值金额ID
* @param amountPrice 充值金额
* @param payParam
* @return
*/
private
GoblinBraceletOrderVo
buildRechargeOrder
(
String
orderId
,
String
wristbandId
,
BigDecimal
wristbandPrice
,
String
amountId
,
BigDecimal
amountPrice
,
GoblinBraceletOrderPayParam
payParam
)
{
BigDecimal
totalAmount
=
BigDecimal
.
ZERO
.
add
(
wristbandPrice
).
add
(
amountPrice
);
final
String
uid
=
CurrentUtil
.
getCurrentUid
();
log
.
info
(
"用户{}需要付款金额: {}."
,
uid
,
totalAmount
.
toPlainString
());
GoblinBraceletOrderVo
braceletOrderVo
=
new
GoblinBraceletOrderVo
();
braceletOrderVo
.
setOrderId
(
orderId
);
braceletOrderVo
.
setUserId
(
uid
);
braceletOrderVo
.
setBindName
(
payParam
.
getName
());
braceletOrderVo
.
setBindMobile
(
payParam
.
getMobile
());
braceletOrderVo
.
setBindIdcard
(
payParam
.
getIdCard
());
braceletOrderVo
.
setReqDate
(
DateUtil
.
getNowTime
(
"yyyyMMdd"
));
braceletOrderVo
.
setGoodsDesc
(
getGoodsDesc
());
braceletOrderVo
.
setWristbandId
(
wristbandId
);
braceletOrderVo
.
setWristbandPrice
(
wristbandPrice
);
braceletOrderVo
.
setAmountId
(
amountId
);
braceletOrderVo
.
setAmountPrice
(
amountPrice
);
braceletOrderVo
.
setReqSeqId
(
IDGenerator
.
nextSnowId
());
braceletOrderVo
.
setTradeType
(
"T_MINIAPP"
);
braceletOrderVo
.
setPrice
(
totalAmount
);
braceletOrderVo
.
setPriceTotal
(
totalAmount
);
braceletOrderVo
.
setPriceRefund
(
BigDecimal
.
ZERO
);
braceletOrderVo
.
setRefundPriceCharges
(
BigDecimal
.
ZERO
);
braceletOrderVo
.
setRefundNumber
(
0
);
braceletOrderVo
.
setStatus
(
OrderStatus
.
PENDING_PAYMENT
.
getCode
());
braceletOrderVo
.
setPayStatus
(
PayStatus
.
NOT_PAID
.
getCode
());
braceletOrderVo
.
setCreatedAt
(
LocalDateTime
.
now
());
braceletOrderVo
.
setUpdatedAt
(
LocalDateTime
.
now
());
return
braceletOrderVo
;
}
/**
* 获取商品描述
*
* @return
*/
private
String
getGoodsDesc
()
{
return
"手环充值"
;
}
@Override
public
ResponseDto
<
Map
<
String
,
Object
>>
checkOrderResult
(
String
orderId
)
{
final
String
uid
=
CurrentUtil
.
getCurrentUid
();
GoblinBraceletOrderVo
braceletOrderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
if
(
braceletOrderVo
==
null
)
{
log
.
error
(
"订单不存在"
);
return
ResponseDto
.
failure
(
"订单不存在"
);
}
if
(!
uid
.
equals
(
braceletOrderVo
.
getUserId
()))
{
log
.
error
(
"暂无权限"
);
return
ResponseDto
.
failure
(
"暂无权限"
);
}
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"status"
,
braceletOrderVo
.
getPayStatus
());
map
.
put
(
"outno"
,
braceletOrderVo
.
getFoutTradeNo
());
return
ResponseDto
.
success
(
map
);
}
@Override
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
.
getOrDefault
(
"acct_date"
,
callbackRespDataMap
.
get
(
"end_time"
)));
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"
)))
{
// 斗拱返回成功
orderVo
.
setStatus
(
OrderStatus
.
PAID
.
getCode
());
orderVo
.
setPayStatus
(
PayStatus
.
PAID
.
getCode
());
// 去迈之下单
MaiZhiAllVo
.
OrderParam
orderParam
=
MaiZhiAllVo
.
OrderParam
.
getNew
();
orderParam
.
setOperationNo
(
"2"
);
orderParam
.
setOut_trade_no
(
orderVo
.
getPartyOrderId
());
orderParam
.
setDgoid
(
orderVo
.
getHfSeqId
());
orderParam
.
setReceipt_amount
(
orderVo
.
getPriceTotal
());
orderParam
.
setTotal
(
1
);
orderParam
.
setPayTime
(
orderVo
.
getEndTime
());
List
<
MaiZhiAllVo
.
OrderParam
.
User
>
userList
=
new
ArrayList
<>();
MaiZhiAllVo
.
OrderParam
.
User
user
=
MaiZhiAllVo
.
OrderParam
.
User
.
getNew
();
user
.
setIdcard
(
orderVo
.
getBindIdcard
());
user
.
setName
(
orderVo
.
getBindName
());
user
.
setPhone
(
orderVo
.
getBindMobile
());
user
.
setMoney
(
orderVo
.
getAmountPrice
());
userList
.
add
(
user
);
orderParam
.
setUserList
(
userList
);
iGoblinRechargeWristbandService
.
createOrder
(
orderParam
,
orderId
);
}
else
{
// 斗拱返回失败
// orderVo.setStatus(OrderStatus.PAID.getCode());
orderVo
.
setPayStatus
(
PayStatus
.
PAYMENT_FAILED
.
getCode
());
}
// 更新redis
GoblinBraceletOrderVo
orderVo1
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
orderVo
.
setFoutTradeNo
(
orderVo1
.
getFoutTradeNo
());
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
.
getStatus
(),
orderVo
.
getPayStatus
(),
orderVo
.
getUpdatedAt
(),
orderVo
.
getOrderId
())
);
return
ResponseDto
.
success
(
Boolean
.
TRUE
);
}
catch
(
Exception
e
)
{
log
.
error
(
"error"
,
e
);
return
ResponseDto
.
failure
();
}
}
@Override
public
List
<
GoblinBraceletOrderVo
>
getOrderList
()
{
final
String
uid
=
CurrentUtil
.
getCurrentUid
();
LambdaQueryWrapper
<
GoblinBraceletOrder
>
queryWrapper
=
new
QueryWrapper
<
GoblinBraceletOrder
>()
.
lambda
()
.
eq
(
GoblinBraceletOrder:
:
getUserId
,
uid
)
.
in
(
GoblinBraceletOrder:
:
getStatus
,
OrderStatus
.
PAID
.
getCode
(),
OrderStatus
.
REFUNDING
.
getCode
(),
OrderStatus
.
REFUNDED
.
getCode
())
.
orderByDesc
(
GoblinBraceletOrder:
:
getCreatedAt
);
List
<
GoblinBraceletOrder
>
goblinBraceletOrders
=
braceletOrderMapper
.
selectList
(
queryWrapper
);
if
(
goblinBraceletOrders
.
isEmpty
())
{
return
Collections
.
emptyList
();
}
return
goblinBraceletOrders
.
stream
()
.
map
(
m
->
GoblinBraceletOrderVo
.
getNew
().
copy
(
m
))
.
collect
(
Collectors
.
toList
());
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinDougongPayServiceImpl.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.huifu.bspay.sdk.opps.core.BasePay
;
import
com.huifu.bspay.sdk.opps.core.config.MerConfig
;
import
com.huifu.bspay.sdk.opps.core.net.BasePayRequest
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
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
;
import
javax.annotation.PostConstruct
;
import
java.util.Map
;
@Slf4j
@Service
public
class
GoblinDougongPayServiceImpl
implements
IGoblinDougongPayService
{
private
final
AppProperties
.
AppInfo
appInfo
;
public
GoblinDougongPayServiceImpl
(
AppProperties
appProperties
)
{
this
.
appInfo
=
appProperties
.
getApps
().
get
(
"dougong"
);
if
(
this
.
appInfo
==
null
)
{
throw
new
IllegalArgumentException
(
"找不到应用配置"
);
}
}
@PostConstruct
public
void
init
()
{
MerConfig
merConfig
=
new
MerConfig
();
merConfig
.
setProcutId
(
appInfo
.
getProductId
());
merConfig
.
setSysId
(
appInfo
.
getSysId
());
merConfig
.
setRsaPrivateKey
(
appInfo
.
getPrivateKey
());
merConfig
.
setRsaPublicKey
(
appInfo
.
getPublicKey
());
try
{
BasePay
.
initWithMerConfig
(
merConfig
);
}
catch
(
Exception
e
)
{
log
.
error
(
"初始化支付配置失败"
,
e
);
throw
new
RuntimeException
(
"初始化支付配置失败"
,
e
);
}
}
@Override
public
Map
<
String
,
Object
>
jsPay
(
DougongJsPayData
data
)
{
DougongRequestParam
requestParam
=
buildDougongRequestParam
(
data
);
log
.
info
(
"request param: {}."
,
JsonUtils
.
toJson
(
requestParam
));
if
(
requestParam
==
null
)
{
log
.
error
(
"构建下单参数失败"
);
return
null
;
}
try
{
Map
<
String
,
Object
>
map
=
JsonUtils
.
fromJson
(
JsonUtils
.
toJson
(
requestParam
),
Map
.
class
);
//3. 发起API调用
Map
<
String
,
Object
>
response
=
BasePayRequest
.
requestBasePay
(
"v3/trade/payment/jspay"
,
map
,
null
,
false
);
log
.
info
(
"response: {}."
,
JsonUtils
.
toJson
(
response
));
if
(
response
!=
null
&&
"00000100"
.
equals
(
response
.
get
(
"resp_code"
))
&&
"P"
.
equals
(
response
.
get
(
"trans_stat"
))){
return
response
;
}
}
catch
(
Exception
e
)
{
log
.
error
(
"error"
,
e
);
}
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
;
}
DougongRequestParam
requestParam
=
new
DougongRequestParam
();
requestParam
.
setReqDate
(
data
.
getReqDate
());
requestParam
.
setReqSeqId
(
data
.
getReqSeqId
());
requestParam
.
setHuifuId
(
appInfo
.
getHuifuId
());
requestParam
.
setGoodsDesc
(
data
.
getGoodsDesc
());
requestParam
.
setTradeType
(
data
.
getTradeType
());
requestParam
.
setTransAmt
(
data
.
getTransAmt
());
requestParam
.
setTimeExpire
(
data
.
getTimeExpire
());
requestParam
.
setWxData
(
buildWxData
(
data
));
requestParam
.
setNotifyUrl
(
appInfo
.
getNotifyUrl
());
return
requestParam
;
}
private
String
buildWxData
(
DougongJsPayData
data
)
{
DougongRequestParam
.
WxData
wxData
=
new
DougongRequestParam
.
WxData
();
wxData
.
setSubAppid
(
appInfo
.
getSubAppId
());
wxData
.
setSubOpenid
(
data
.
getSubOpenid
());
wxData
.
setBody
(
data
.
getGoodsDesc
());
wxData
.
setDetail
(
buildWxDataDetail
(
data
));
return
JsonUtils
.
toJson
(
wxData
);
}
private
DougongRequestParam
.
WxDataDetail
buildWxDataDetail
(
DougongJsPayData
data
)
{
DougongRequestParam
.
WxDataDetail
wxDataDetail
=
new
DougongRequestParam
.
WxDataDetail
();
wxDataDetail
.
setCostPrice
(
data
.
getTransAmt
());
wxDataDetail
.
setGoodsDetail
(
data
.
getGoodsDetailList
());
return
wxDataDetail
;
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinRechargeAmountServiceImpl.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.liquidnet.service.goblin.entity.GoblinRechargeAmount
;
import
com.liquidnet.service.goblin.mapper.GoblinRechargeAmountMapper
;
import
com.liquidnet.service.goblin.service.IGoblinRechargeAmountService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 充值金额选项表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
@Service
public
class
GoblinRechargeAmountServiceImpl
extends
ServiceImpl
<
GoblinRechargeAmountMapper
,
GoblinRechargeAmount
>
implements
IGoblinRechargeAmountService
{
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinRechargeWristbandServiceImpl.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.goblin.dto.vo.GoblinBraceletOrderVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinRechargeAmountVo
;
import
com.liquidnet.service.goblin.dto.vo.GoblinRechargeWristbandVo
;
import
com.liquidnet.service.goblin.dto.vo.MaiZhiAllVo.*
;
import
com.liquidnet.service.goblin.entity.GoblinBraceletOrder
;
import
com.liquidnet.service.goblin.entity.GoblinRechargeAmount
;
import
com.liquidnet.service.goblin.entity.GoblinRechargeWristband
;
import
com.liquidnet.service.goblin.mapper.GoblinRechargeAmountMapper
;
import
com.liquidnet.service.goblin.mapper.GoblinRechargeWristbandMapper
;
import
com.liquidnet.service.goblin.service.IGoblinBraceletOrderService
;
import
com.liquidnet.service.goblin.service.IGoblinRechargeWristbandService
;
import
com.liquidnet.service.goblin.util.GoblinRedisUtils
;
import
com.liquidnet.service.goblin.util.QueueUtils
;
import
com.liquidnet.service.goblin.util.ThirdMaiZhiUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.LinkedList
;
import
java.util.List
;
/**
* <p>
* 手环信息表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2025-07-03
*/
@Slf4j
@Service
public
class
GoblinRechargeWristbandServiceImpl
extends
ServiceImpl
<
GoblinRechargeWristbandMapper
,
GoblinRechargeWristband
>
implements
IGoblinRechargeWristbandService
{
@Autowired
GoblinRedisUtils
goblinRedisUtils
;
@Autowired
private
QueueUtils
queueUtils
;
@Autowired
ThirdMaiZhiUtils
thirdMaiZhiUtils
;
@Autowired
private
GoblinRechargeAmountMapper
rechargeAmountMapper
;
@Autowired
private
GoblinRechargeWristbandMapper
rechargeWristbandMapper
;
@Autowired
private
IGoblinBraceletOrderService
iGoblinBraceletOrderService
;
@Override
public
GoblinRechargeWristbandVo
getList
()
{
GoblinRechargeWristbandVo
result
=
goblinRedisUtils
.
getRechargeWristbandVo
();
if
(
result
==
null
)
{
// 从数据库中查询数据
List
<
GoblinRechargeWristband
>
rechargeWristbands
=
rechargeWristbandMapper
.
selectList
(
null
);
List
<
GoblinRechargeAmount
>
rechargeAmounts
=
rechargeAmountMapper
.
selectList
(
null
);
// 组合数据
if
(!
CollectionUtils
.
isEmpty
(
rechargeAmounts
)
&&
!
CollectionUtils
.
isEmpty
(
rechargeWristbands
))
{
GoblinRechargeWristbandVo
wristbandVo
=
GoblinRechargeWristbandVo
.
getNew
();
wristbandVo
.
setWristbandId
(
rechargeWristbands
.
get
(
0
).
getWristbandId
());
wristbandVo
.
setName
(
rechargeWristbands
.
get
(
0
).
getName
());
wristbandVo
.
setPrice
(
rechargeWristbands
.
get
(
0
).
getPrice
());
List
<
GoblinRechargeAmountVo
>
list
=
new
ArrayList
<>();
for
(
GoblinRechargeAmount
amount
:
rechargeAmounts
)
{
GoblinRechargeAmountVo
amountVo
=
GoblinRechargeAmountVo
.
getNew
();
amountVo
.
setAmountId
(
amount
.
getAmountId
());
amountVo
.
setName
(
amount
.
getName
());
amountVo
.
setPrice
(
amount
.
getPrice
());
list
.
add
(
amountVo
);
}
wristbandVo
.
setAmonutList
(
list
);
goblinRedisUtils
.
setRechargeWristbandVo
(
wristbandVo
);
return
wristbandVo
;
}
}
return
result
;
}
@Override
public
CheckIdcardResponse
auth
(
IdCardParam
param
)
{
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
return
thirdMaiZhiUtils
.
checkIdcard
(
accessToken
,
param
.
getIdcard
(),
param
.
getName
());
}
return
null
;
}
@Override
public
OrderResponse
createOrder
(
OrderParam
param
,
String
orderId
)
{
log
.
info
(
"createOrder 参数:{}"
,
param
);
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
OrderResponse
addOrder
=
thirdMaiZhiUtils
.
addOrder
(
accessToken
,
param
);
log
.
info
(
"createOrder 迈之结果:{}"
,
addOrder
);
if
(
addOrder
!=
null
&&
addOrder
.
getErrcode
()
==
200
)
{
OrderInfoParam
orderInfoParam
=
OrderInfoParam
.
getNew
();
List
<
String
>
orderList
=
new
ArrayList
<>();
orderList
.
add
(
param
.
getOut_trade_no
());
orderInfoParam
.
setOrderList
(
orderList
);
OrderInfoResponse
order
=
this
.
getOrder
(
orderInfoParam
,
orderId
);
return
addOrder
;
}
else
{
log
.
info
(
"createOrder 迈之结果400 msg:{}"
,
addOrder
.
getMsg
());
}
}
return
null
;
}
@Override
public
OrderInfoResponse
getOrder
(
OrderInfoParam
param
,
String
orderId
)
{
log
.
info
(
"getOrder 参数:{}"
,
param
);
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
OrderInfoResponse
order
=
thirdMaiZhiUtils
.
getOrder
(
accessToken
,
param
);
log
.
info
(
"getOrder 结果:{}"
,
order
);
if
(
order
!=
null
&&
order
.
getErrcode
()
==
200
)
{
List
<
OrderInfoResponse
.
OrderList
>
outlist
=
order
.
getOutlist
();
OrderInfoResponse
.
OrderList
orderList
=
outlist
.
get
(
0
);
List
<
OrderInfoResponse
.
OrderList
.
UserOrder
>
userOrder
=
orderList
.
getUser_order
();
String
foutTradeNo
=
userOrder
.
get
(
0
).
getFout_trade_no
();
GoblinBraceletOrderVo
orderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
orderVo
.
setFoutTradeNo
(
foutTradeNo
);
goblinRedisUtils
.
setBraceletOrderVo
(
orderVo
);
goblinRedisUtils
.
setOrderIdByFoutTradeNo
(
foutTradeNo
,
orderId
);
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
sqls
.
add
(
SqlMapping
.
get
(
"goblin_bracelet_order_update_fout_trade_no"
));
LinkedList
<
Object
[]>
sqlDataOrder
=
CollectionUtil
.
linkedListObjectArr
();
sqlDataOrder
.
add
(
new
Object
[]{
foutTradeNo
,
LocalDateTime
.
now
(),
orderId
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_NFT_ORDER
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlDataOrder
)
);
}
else
{
log
.
info
(
"getOrder 结果400 msg:{}"
,
order
);
}
}
return
null
;
}
@Override
public
GenerateDeviceCodeResponse
getQrcode
(
String
outno
)
{
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
return
thirdMaiZhiUtils
.
generateDeviceCode
(
accessToken
,
outno
);
}
return
null
;
}
@Override
public
Boolean
getDeviceNumber
(
Integer
operationNo
)
{
String
accessToken
=
this
.
getAccessToken
();
String
endtime
=
goblinRedisUtils
.
getDeviceNumberEndTime
(
operationNo
);
if
(
null
!=
endtime
)
{
Instant
instant
=
Instant
.
EPOCH
;
long
timestamp
=
instant
.
toEpochMilli
();
endtime
=
String
.
valueOf
(
timestamp
);
}
long
timestamp
=
Instant
.
now
().
toEpochMilli
();
if
(
null
!=
accessToken
)
{
DeviceNumberResponse
res
=
thirdMaiZhiUtils
.
getDeviceNumber
(
accessToken
,
operationNo
,
endtime
,
String
.
valueOf
(
timestamp
));
if
(
null
!=
res
&&
res
.
getErrcode
()
==
200
)
{
for
(
DeviceNumberResponse
.
NumberList
info
:
res
.
getList
())
{
String
orderId
=
goblinRedisUtils
.
getOrderIdByFoutTradeNo
(
info
.
getFout_trade_no
());
if
(
null
!=
orderId
)
{
GoblinBraceletOrderVo
orderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
if
(
null
!=
orderVo
)
{
orderVo
.
setCardno
(
info
.
getCardno
());
goblinRedisUtils
.
setBraceletOrderVo
(
orderVo
);
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
sqls
.
add
(
SqlMapping
.
get
(
"goblin_bracelet_order_update_cardno"
));
LinkedList
<
Object
[]>
sqlDataOrder
=
CollectionUtil
.
linkedListObjectArr
();
sqlDataOrder
.
add
(
new
Object
[]{
info
.
getCardno
(),
LocalDateTime
.
now
(),
orderId
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_NFT_ORDER
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlDataOrder
)
);
}
}
}
goblinRedisUtils
.
setDeviceNumberEndTime
(
operationNo
,
String
.
valueOf
(
timestamp
));
return
true
;
}
}
return
false
;
}
@Override
public
DeviceBalanceResponse
getDeviceBalance
(
String
cardno
)
{
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
return
thirdMaiZhiUtils
.
getDeviceBalance
(
accessToken
,
cardno
);
}
return
null
;
}
@Override
public
DeviceRecordResponse
getDeviceRecord
(
String
cardno
,
Integer
page
)
{
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
return
thirdMaiZhiUtils
.
getDeviceRecord
(
accessToken
,
cardno
,
page
);
}
return
null
;
}
@Override
public
ChangeDeviceStatusResponse
changeDeviceStatus
(
String
orderId
,
int
type
)
{
GoblinBraceletOrderVo
orderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
String
cardno
=
orderVo
.
getCardno
();
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
log
.
info
(
"changeDeviceStatus 参数 cardno:{}, type:{}"
,
cardno
,
type
);
ChangeDeviceStatusResponse
response
=
thirdMaiZhiUtils
.
changeDeviceStatus
(
accessToken
,
cardno
,
type
);
log
.
info
(
"changeDeviceStatus 结果:{}"
,
response
);
if
(
response
.
getErrcode
()
==
200
)
{
orderVo
.
setStatus
(
3
);
orderVo
.
setRefundStatus
(
0
);
goblinRedisUtils
.
setBraceletOrderVo
(
orderVo
);
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
sqls
.
add
(
SqlMapping
.
get
(
"goblin_bracelet_order_update_refund"
));
LinkedList
<
Object
[]>
sqlDataOrder
=
CollectionUtil
.
linkedListObjectArr
();
sqlDataOrder
.
add
(
new
Object
[]{
orderVo
.
getStatus
(),
orderVo
.
getRefundStatus
(),
""
,
LocalDateTime
.
now
(),
orderId
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_NFT_ORDER
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlDataOrder
)
);
}
return
response
;
}
else
{
ChangeDeviceStatusResponse
response
=
ChangeDeviceStatusResponse
.
getNew
();
response
.
setErrcode
(
400
);
response
.
setMsg
(
"token获取错误"
);
return
response
;
}
}
@Override
public
Boolean
refundRes
()
{
String
accessToken
=
this
.
getAccessToken
();
if
(
null
!=
accessToken
)
{
List
<
GoblinBraceletOrder
>
list
=
iGoblinBraceletOrderService
.
list
(
Wrappers
.
lambdaQuery
(
GoblinBraceletOrder
.
class
).
eq
(
GoblinBraceletOrder:
:
getStatus
,
3
));
for
(
GoblinBraceletOrder
order
:
list
)
{
String
cardno
=
order
.
getCardno
();
String
orderId
=
order
.
getOrderId
();
if
(
null
!=
cardno
&&
!
cardno
.
isEmpty
())
{
ChangeDeviceStatusResponse
res
=
thirdMaiZhiUtils
.
refundRes
(
accessToken
,
cardno
);
if
(
null
!=
res
&&
res
.
getErrcode
()
==
200
)
{
GoblinBraceletOrderVo
orderVo
=
goblinRedisUtils
.
getBraceletOrderVo
(
orderId
);
if
(
res
.
getStatus
()
==
1
)
{
orderVo
.
setStatus
(
4
);
orderVo
.
setRefundStatus
(
1
);
orderVo
.
setRefundStatusNote
(
""
);
}
else
if
(
res
.
getStatus
()
==
2
)
{
orderVo
.
setStatus
(
7
);
orderVo
.
setRefundStatus
(
2
);
orderVo
.
setRefundStatusNote
(
res
.
getNote
());
}
goblinRedisUtils
.
setBraceletOrderVo
(
orderVo
);
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
sqls
.
add
(
SqlMapping
.
get
(
"goblin_bracelet_order_update_refund"
));
LinkedList
<
Object
[]>
sqlDataOrder
=
CollectionUtil
.
linkedListObjectArr
();
sqlDataOrder
.
add
(
new
Object
[]{
orderVo
.
getStatus
(),
orderVo
.
getRefundStatus
(),
orderVo
.
getRefundStatusNote
(),
LocalDateTime
.
now
()
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_NFT_ORDER
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlDataOrder
)
);
}
}
}
return
true
;
}
else
{
return
false
;
}
}
private
String
getAccessToken
()
{
String
token
=
goblinRedisUtils
.
getMaiZhiAccessToken
();
if
(
null
==
token
)
{
AuthResponse
response
=
thirdMaiZhiUtils
.
login
(
"CM250001"
,
"95b42275318c6df2d78c43525c2126e7"
,
"380e8acd181abef8c6253721b05a54a1"
);
if
(
response
.
getErrcode
()
==
200
)
{
token
=
response
.
getData
().
getAccessToken
();
goblinRedisUtils
.
setMaiZhiAccessToken
(
token
,
response
.
getData
().
getExpire
()
-
200
);
}
}
return
token
;
}
}
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/DougongSignUtils.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
util
;
import
lombok.extern.slf4j.Slf4j
;
import
java.security.KeyFactory
;
import
java.security.PrivateKey
;
import
java.security.PublicKey
;
import
java.security.Signature
;
import
java.security.spec.PKCS8EncodedKeySpec
;
import
java.security.spec.X509EncodedKeySpec
;
import
java.util.Base64
;
@Slf4j
public
class
DougongSignUtils
{
/**
* RSA私钥签名:签名方式SHA256WithRSA
* @param data 待签名字符串
* @param privateKeyBase64 私钥(Base64编码)
* @return 签名byte[]
* @throws Exception
*/
public
static
String
sign
(
String
data
,
String
privateKeyBase64
)
{
// Base64 --> Key
try
{
byte
[]
bytes
=
Base64
.
getDecoder
().
decode
(
privateKeyBase64
);
PKCS8EncodedKeySpec
keySpec
=
new
PKCS8EncodedKeySpec
(
bytes
);
KeyFactory
keyFactory
;
keyFactory
=
KeyFactory
.
getInstance
(
"RSA"
);
PrivateKey
privateKey
=
keyFactory
.
generatePrivate
(
keySpec
);
// Sign
Signature
signature
=
Signature
.
getInstance
(
"SHA256WithRSA"
);
signature
.
initSign
(
privateKey
);
signature
.
update
(
data
.
getBytes
(
"UTF-8"
));
return
Base64
.
getEncoder
().
encodeToString
(
signature
.
sign
());
}
catch
(
Exception
e
)
{
return
null
;
}
}
/**
* 使用汇付RSA公钥验签
* @param data 待签名字符串
* @param publicKeyBase64 公钥(Base64编码)
* @return 验签结果
* @throws Exception
*/
public
static
boolean
verify
(
String
data
,
String
publicKeyBase64
,
String
sign
)
{
// Base64 --> Key
try
{
byte
[]
bytes
=
Base64
.
getDecoder
().
decode
(
publicKeyBase64
);
X509EncodedKeySpec
keySpec
=
new
X509EncodedKeySpec
(
bytes
);
KeyFactory
keyFactory
;
keyFactory
=
KeyFactory
.
getInstance
(
"RSA"
);
PublicKey
publicKey
=
keyFactory
.
generatePublic
(
keySpec
);
// verify
Signature
signature
=
Signature
.
getInstance
(
"SHA256WithRSA"
);
signature
.
initVerify
(
publicKey
);
signature
.
update
(
data
.
getBytes
(
"UTF-8"
));
return
signature
.
verify
(
Base64
.
getDecoder
().
decode
(
sign
));
}
catch
(
Exception
e
)
{
log
.
error
(
"Exception"
,
e
);
return
false
;
}
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/GoblinRedisUtils.java
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
util
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.node.ObjectNode
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
...
...
@@ -8,6 +10,7 @@ import com.liquidnet.commons.lang.util.JsonUtils;
import
com.liquidnet.commons.lang.util.RandomUtil
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.constant.RedisKeyExpireConst
;
import
com.liquidnet.service.galaxy.constant.GalaxyEnum
;
import
com.liquidnet.service.goblin.constant.GoblinRedisConst
;
import
com.liquidnet.service.goblin.constant.GoblinStatusConst
;
...
...
@@ -17,9 +20,11 @@ import com.liquidnet.service.goblin.dto.GoblinUserSafeConfigDto;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo
;
import
com.liquidnet.service.goblin.dto.manage.vo.GoblinMgtCategorySpecVo
;
import
com.liquidnet.service.goblin.dto.vo.*
;
import
com.liquidnet.service.goblin.entity.GoblinBraceletOrder
;
import
com.liquidnet.service.goblin.entity.GoblinFrontBanner
;
import
com.liquidnet.service.goblin.entity.GoblinFrontHotWord
;
import
com.liquidnet.service.goblin.entity.GoblinFrontNavigation
;
import
com.liquidnet.service.goblin.mapper.GoblinBraceletOrderMapper
;
import
com.liquidnet.service.goblin.service.impl.inner.GoblinNftJobServiceImpl
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -48,6 +53,8 @@ public class GoblinRedisUtils {
GoblinMongoUtils
goblinMongoUtils
;
@Autowired
GoblinNftJobServiceImpl
goblinNftJobService
;
@Autowired
private
GoblinBraceletOrderMapper
braceletOrderMapper
;
@Value
(
"${liquidnet.secret.passwd-salt}"
)
private
String
passwdSalt
;
...
...
@@ -2923,6 +2930,124 @@ public class GoblinRedisUtils {
return
(
int
)
redisUtil
.
rightPush
(
rdk
,
orderId
);
}
public
GoblinRechargeWristbandVo
getRechargeWristbandVo
()
{
Object
obj
=
redisUtil
.
get
(
GoblinRedisConst
.
GOBLIN_RECHARGE_WRISTBAND
);
if
(
obj
==
null
)
{
return
null
;
}
else
{
return
(
GoblinRechargeWristbandVo
)
obj
;
}
}
public
void
setRechargeWristbandVo
(
GoblinRechargeWristbandVo
vo
)
{
String
rdk
=
GoblinRedisConst
.
GOBLIN_RECHARGE_WRISTBAND
;
redisUtil
.
set
(
rdk
,
vo
);
}
public
void
setMaiZhiAccessToken
(
String
token
,
int
time
)
{
String
rdk
=
GoblinRedisConst
.
GOBLIN_RECHARGE_MAIZHI_TOKEN
;
redisUtil
.
set
(
rdk
,
token
,
time
);
}
public
String
getMaiZhiAccessToken
()
{
Object
obj
=
redisUtil
.
get
(
GoblinRedisConst
.
GOBLIN_RECHARGE_MAIZHI_TOKEN
);
if
(
obj
==
null
)
{
return
null
;
}
else
{
return
(
String
)
obj
;
}
}
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 orderId 手环订单ID
*/
public
String
getBraceletRelatedOrderVo
(
String
reqSeqId
){
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_RELATED_ORDER
.
concat
(
reqSeqId
);
Object
obj
=
redisUtil
.
get
(
key
);
if
(
obj
==
null
)
{
// 从数据库查询
LambdaQueryWrapper
<
GoblinBraceletOrder
>
lambdaed
=
new
QueryWrapper
<
GoblinBraceletOrder
>()
.
lambda
().
eq
(
GoblinBraceletOrder:
:
getReqSeqId
,
reqSeqId
);
List
<
GoblinBraceletOrder
>
goblinBraceletOrders
=
braceletOrderMapper
.
selectList
(
lambdaed
);
if
(
goblinBraceletOrders
.
isEmpty
())
{
return
""
;
}
GoblinBraceletOrder
goblinBraceletOrder
=
goblinBraceletOrders
.
get
(
0
);
String
orderId
=
goblinBraceletOrder
.
getOrderId
();
setBraceletRelatedOrderVo
(
goblinBraceletOrder
.
getReqSeqId
(),
orderId
);
return
orderId
;
}
else
{
return
(
String
)
obj
;
}
}
public
void
setBraceletOrderVo
(
GoblinBraceletOrderVo
orderVo
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_ORDERID
.
concat
(
orderVo
.
getOrderId
());
redisUtil
.
set
(
key
,
orderVo
,
RedisKeyExpireConst
.
GOBLIN_BRACELET_USER_EXPIRE
);
}
/**
* 获取手环订单信息
* @param orderId
* @return
*/
public
GoblinBraceletOrderVo
getBraceletOrderVo
(
String
orderId
){
String
key
=
GoblinRedisConst
.
GOBLIN_BRACELET_ORDERID
.
concat
(
orderId
);
Object
obj
=
redisUtil
.
get
(
key
);
if
(
obj
==
null
)
{
// 从数据库查询
LambdaQueryWrapper
<
GoblinBraceletOrder
>
queryWrapper
=
new
QueryWrapper
<
GoblinBraceletOrder
>().
lambda
()
.
eq
(
GoblinBraceletOrder:
:
getOrderId
,
orderId
);
List
<
GoblinBraceletOrder
>
goblinBraceletOrders
=
braceletOrderMapper
.
selectList
(
queryWrapper
);
if
(
goblinBraceletOrders
.
isEmpty
())
{
return
null
;
}
GoblinBraceletOrderVo
orderVo
=
GoblinBraceletOrderVo
.
getNew
().
copy
(
goblinBraceletOrders
.
get
(
0
));
setBraceletOrderVo
(
orderVo
);
return
orderVo
;
}
else
{
return
(
GoblinBraceletOrderVo
)
obj
;
}
}
public
String
getDeviceNumberEndTime
(
Integer
operationNo
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_RECHARGE_DEVICE_NUMBER_ENDTIME
.
concat
(
String
.
valueOf
(
operationNo
));
Object
obj
=
redisUtil
.
get
(
key
);
if
(
obj
==
null
)
{
return
null
;
}
else
{
return
(
String
)
obj
;
}
}
public
void
setDeviceNumberEndTime
(
Integer
operationNo
,
String
endTime
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_RECHARGE_DEVICE_NUMBER_ENDTIME
.
concat
(
String
.
valueOf
(
operationNo
));
redisUtil
.
set
(
key
,
endTime
);
}
public
String
getOrderIdByFoutTradeNo
(
String
foutTradeNo
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_RECHARGE_FOUT_TRADE_NO
.
concat
(
foutTradeNo
);
Object
obj
=
redisUtil
.
get
(
key
);
if
(
obj
==
null
)
{
return
null
;
}
else
{
return
(
String
)
obj
;
}
}
public
void
setOrderIdByFoutTradeNo
(
String
foutTradeNo
,
String
orderId
)
{
String
key
=
GoblinRedisConst
.
GOBLIN_RECHARGE_FOUT_TRADE_NO
.
concat
(
foutTradeNo
);
redisUtil
.
set
(
key
,
orderId
);
}
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/util/ThirdMaiZhiUtils.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
util
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.goblin.dto.vo.MaiZhiAllVo.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.http.*
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.util.UriComponentsBuilder
;
@Slf4j
@Component
public
class
ThirdMaiZhiUtils
{
private
static
final
RestTemplate
restTemplate
=
new
RestTemplate
();
public
AuthResponse
login
(
String
appid
,
String
appSecret
,
String
auth
)
{
try
{
String
url
=
"https://www.mz-cx.com/home/openapi/auth"
;
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"Authorization"
,
auth
);
// 创建 AuthParam 参数
AuthParam
param
=
new
AuthParam
();
param
.
setAppid
(
appid
);
param
.
setAppSecret
(
appSecret
);
// 创建 HttpEntity 封装请求体和请求头
HttpEntity
<
AuthParam
>
request
=
new
HttpEntity
<>(
param
,
headers
);
// 发起 POST 请求
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
POST
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
AuthResponse
.
class
);
}
else
{
throw
new
Exception
(
"Login API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
CheckIdcardResponse
checkIdcard
(
String
accessToken
,
String
idcard
,
String
aname
)
{
try
{
String
url
=
"https://www.mz-cx.com/home/openapi/check_idcard"
;
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
// 创建 AuthParam 参数
IdCardParam
param
=
new
IdCardParam
();
param
.
setName
(
aname
);
param
.
setIdcard
(
idcard
);
// 创建 HttpEntity 封装请求体和请求头
HttpEntity
<
IdCardParam
>
request
=
new
HttpEntity
<>(
param
,
headers
);
// 发起 POST 请求
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
POST
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
CheckIdcardResponse
.
class
);
}
else
{
throw
new
Exception
(
"checkIdcard API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
OrderResponse
addOrder
(
String
accessToken
,
OrderParam
param
)
{
try
{
String
url
=
"https://www.mz-cx.com/home/openapi/ordercomplete"
;
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
// 创建 HttpEntity 封装请求体和请求头
HttpEntity
<
OrderParam
>
request
=
new
HttpEntity
<>(
param
,
headers
);
// 发起 POST 请求
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
POST
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
OrderResponse
.
class
);
}
else
{
throw
new
Exception
(
"addOrder API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
OrderInfoResponse
getOrder
(
String
accessToken
,
OrderInfoParam
param
)
{
try
{
String
url
=
"https://www.mz-cx.com/home/openapi/orderinquiry"
;
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
// 创建 HttpEntity 封装请求体和请求头
HttpEntity
<
OrderInfoParam
>
request
=
new
HttpEntity
<>(
param
,
headers
);
// 发起 POST 请求
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
POST
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
OrderInfoResponse
.
class
);
}
else
{
throw
new
Exception
(
"getOrder API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
GenerateDeviceCodeResponse
generateDeviceCode
(
String
accessToken
,
String
outno
)
{
try
{
String
url
=
String
.
format
(
"https://www.mz-cx.com/home/openapi/get_ma?outno=%s"
,
outno
);
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
HttpEntity
<
Void
>
request
=
new
HttpEntity
<>(
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
GET
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
GenerateDeviceCodeResponse
.
class
);
}
else
{
throw
new
Exception
(
"generateDeviceCode API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
DeviceNumberResponse
getDeviceNumber
(
String
accessToken
,
Integer
operationNo
,
String
starttime
,
String
endtime
)
{
try
{
String
url
=
"https://www.mz-cx.com/home/openapi/get_ordercardno"
;
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
UriComponentsBuilder
builder
=
UriComponentsBuilder
.
fromHttpUrl
(
url
)
.
queryParam
(
"operationNo"
,
operationNo
)
.
queryParam
(
"starttime"
,
starttime
)
.
queryParam
(
"endtime"
,
endtime
);
HttpEntity
<
Void
>
request
=
new
HttpEntity
<>(
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
builder
.
toUriString
(),
HttpMethod
.
GET
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
DeviceNumberResponse
.
class
);
}
else
{
throw
new
Exception
(
"getDeviceNumber API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
DeviceBalanceResponse
getDeviceBalance
(
String
accessToken
,
String
cardno
)
{
try
{
String
url
=
String
.
format
(
"https://www.mz-cx.com/home/openapi/get_cardmoney?cardno=%s"
,
cardno
);
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
HttpEntity
<
Void
>
request
=
new
HttpEntity
<>(
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
GET
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
DeviceBalanceResponse
.
class
);
}
else
{
throw
new
Exception
(
"getDeviceBalance API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
DeviceRecordResponse
getDeviceRecord
(
String
accessToken
,
String
cardno
,
Integer
page
)
{
try
{
String
url
=
String
.
format
(
"https://www.mz-cx.com/home/openapi/get_cardlist?cardno=%s&page=%s"
,
cardno
,
page
);
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
HttpEntity
<
Void
>
request
=
new
HttpEntity
<>(
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
GET
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
DeviceRecordResponse
.
class
);
}
else
{
throw
new
Exception
(
"getDeviceRecord API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
ChangeDeviceStatusResponse
changeDeviceStatus
(
String
accessToken
,
String
cardno
,
int
type
)
{
try
{
String
url
=
"https://www.mz-cx.com/home/openapi/upd_cardtype"
;
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
UriComponentsBuilder
builder
=
UriComponentsBuilder
.
fromHttpUrl
(
url
)
.
queryParam
(
"cardno"
,
cardno
)
.
queryParam
(
"type"
,
type
);
HttpEntity
<
Void
>
request
=
new
HttpEntity
<>(
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
builder
.
toUriString
(),
HttpMethod
.
GET
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
ChangeDeviceStatusResponse
.
class
);
}
else
{
throw
new
Exception
(
"changeDeviceStatus API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
public
ChangeDeviceStatusResponse
refundRes
(
String
accessToken
,
String
cardno
)
{
try
{
String
url
=
"https://www.mz-cx.com/home/openapi/get_cardtui"
;
// 创建请求头并设置 Authorization
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
set
(
"access-token"
,
accessToken
);
UriComponentsBuilder
builder
=
UriComponentsBuilder
.
fromHttpUrl
(
url
)
.
queryParam
(
"cardno"
,
cardno
);
HttpEntity
<
Void
>
request
=
new
HttpEntity
<>(
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
exchange
(
builder
.
toUriString
(),
HttpMethod
.
GET
,
request
,
String
.
class
);
// 处理响应
if
(
response
.
getStatusCode
()
==
HttpStatus
.
OK
)
{
return
JsonUtils
.
fromJson
(
response
.
getBody
(),
ChangeDeviceStatusResponse
.
class
);
}
else
{
throw
new
Exception
(
"refundRes API failed with status: "
+
response
.
getStatusCode
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/resources/sqlmap.properties
View file @
d31b13fa
...
...
@@ -195,3 +195,9 @@ goblin_sku.stock=UPDATE goblin_goods_sku SET sku_stock = ? , stock = ?, updated_
candy_user_coupon.update_apply_refund
=
UPDATE candy_user_coupon SET state=?,operator=?,updated_at=? WHERE ucoupon_id=?
#----
#----
# ---- \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`, `wristband_id`, `wristband_price`, `amount_id`, `amount_price`, `req_seq_id`, `hf_seq_id`, `trade_type`, `party_order_id`, `price`, `price_total`, `price_refund`, `refund_price_charges`, `refund_number`, `status`, `pay_status`, `created_at`, `updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
gpblin_bracelet_order_update
=
update goblin_bracelet_order set out_trans_id=?, end_time=?, acct_date=?, price_actual=?, time_pay=?, status=?, pay_status=?, updated_at=? where order_id=?
goblin_bracelet_order_update_cardno
=
UPDATE goblin_bracelet_order SET cardno=?,updated_at=? WHERE order_id=?
goblin_bracelet_order_update_fout_trade_no
=
UPDATE goblin_bracelet_order SET fout_trade_no=?,updated_at=? WHERE order_id=?
goblin_bracelet_order_update_refund
=
UPDATE goblin_bracelet_order SET status=?,refund_status=?,refund_status_note=?,updated_at=? WHERE order_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 @
d31b13fa
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
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
goblin
.
test
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.service.goblin.param.dougong.DougongJsPayData
;
import
com.liquidnet.service.goblin.param.dougong.DougongRequestParam
;
import
com.liquidnet.service.goblin.service.IGoblinDougongPayService
;
import
lombok.extern.slf4j.Slf4j
;
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.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringBootTest
public
class
GoblinDougongPayServiceImplTest
{
@Autowired
private
IGoblinDougongPayService
goblinDougongPayService
;
private
List
<
DougongRequestParam
.
WxDataGoodsDetail
>
getWxDataGoodsDetails
()
{
HashMap
<
String
,
Object
>
goods1
=
new
HashMap
<>();
goods1
.
put
(
"id"
,
"1"
);
goods1
.
put
(
"name"
,
"手环"
);
goods1
.
put
(
"price"
,
"1"
);
goods1
.
put
(
"number"
,
1
);
HashMap
<
String
,
Object
>
goods2
=
new
HashMap
<>();
goods2
.
put
(
"id"
,
"2"
);
goods2
.
put
(
"name"
,
"面额充值50元"
);
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
=
"20250708"
;
// 交易类型
String
tradeType
=
"T_MINIAPP"
;
DougongRequestParam
requestParam
=
new
DougongRequestParam
();
requestParam
.
setHuifuId
(
"6666000109133323"
);
//TODO 配置
requestParam
.
setTimeExpire
(
"20250718235959"
);
//TODO 在计算
requestParam
.
setNotifyUrl
(
"http://www.baidu.com"
);
//TODO 配置
DougongJsPayData
dougongJsPayData
=
new
DougongJsPayData
();
dougongJsPayData
.
setReqDate
(
reqDate
);
dougongJsPayData
.
setReqSeqId
(
IDGenerator
.
nextSnowId
());
dougongJsPayData
.
setGoodsDesc
(
goodsDesc
);
dougongJsPayData
.
setTradeType
(
tradeType
);
dougongJsPayData
.
setTransAmt
(
totalAmt
.
toString
());
dougongJsPayData
.
setTimeExpire
(
"20250718235959"
);
//TODO 在计算
dougongJsPayData
.
setSubOpenid
(
"o8jhotzittQSetZ-N0Yj4Hz91Rqc"
);
//TODO 前端带过来
dougongJsPayData
.
setGoodsDetailList
(
getWxDataGoodsDetails
());
System
.
out
.
println
(
goblinDougongPayService
.
jsPay
(
dougongJsPayData
));
}
}
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/ServiceKylinApplication.java
View file @
d31b13fa
package
com
.
liquidnet
.
service
;
import
lombok.extern.slf4j.Slf4j
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.SpringApplication
;
...
...
@@ -16,6 +17,7 @@ import java.util.Arrays;
@Slf4j
@EnableFeignClients
@SpringBootApplication
(
scanBasePackages
=
{
"com.liquidnet"
})
@MapperScan
(
basePackages
=
{
"com.liquidnet.service.*.mapper"
})
public
class
ServiceKylinApplication
implements
CommandLineRunner
{
@Autowired
private
Environment
environment
;
...
...
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/controller/KylinBannersController.java
View file @
d31b13fa
...
...
@@ -36,17 +36,19 @@ public class KylinBannersController {
@GetMapping
(
""
)
@ApiOperation
(
"banner列表"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"position"
,
value
=
"展示位置 1首页 3周边 5积分商城 6YB 8视频"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"position"
,
value
=
"展示位置 1首页 3周边 5积分商城 6YB 8视频
10福袋
"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"provinceName"
,
value
=
"城市名称"
),
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"marketId"
,
value
=
"活动id"
),
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"performanceId"
,
value
=
"演出id"
),
})
public
ResponseDto
<
List
<
KylinBanners
>>
blist
(
@RequestParam
()
String
position
,
@RequestParam
(
value
=
"marketId"
,
required
=
false
)
String
marketId
,
@RequestParam
(
defaultValue
=
""
)
String
provinceName
@RequestParam
(
defaultValue
=
""
)
String
provinceName
,
@RequestParam
(
value
=
"performanceId"
,
required
=
false
)
String
performanceId
)
{
try
{
List
<
KylinBanners
>
result
=
bannersServiceImpl
.
blist
(
position
,
provinceName
,
marketId
);
List
<
KylinBanners
>
result
=
bannersServiceImpl
.
blist
(
position
,
provinceName
,
marketId
,
performanceId
);
return
ResponseDto
.
success
(
result
);
}
catch
(
Exception
e
)
{
log
.
error
(
"banner列表Error"
,
e
);
...
...
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/controller/KylinLuckyBagController.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
controller
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagCodeDetailVo
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagScopeVo
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo
;
import
com.liquidnet.service.kylin.service.IKylinLuckyBagService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
@Api
(
tags
=
"前端-获取福袋相关"
)
@RestController
@RequestMapping
(
"/luckyBag"
)
@Slf4j
public
class
KylinLuckyBagController
{
@Autowired
private
IKylinLuckyBagService
luckyBagService
;
@GetMapping
(
""
)
@ApiOperation
(
"获取福袋权益列表"
)
public
ResponseDto
<
KylinLuckyBagVo
>
getLuckyBagByOrderId
(
@RequestParam
(
value
=
"orderId"
)
String
orderId
)
{
return
luckyBagService
.
getLuckyBagByOrderId
(
orderId
);
}
@GetMapping
(
"/scope"
)
@ApiOperation
(
"获取验码福袋列表"
)
public
ResponseDto
<
List
<
KylinLuckyBagScopeVo
>>
getLuckyBagListScope
(
@RequestParam
(
value
=
"mobile"
)
String
mobile
){
return
luckyBagService
.
getLuckyBagListScope
(
mobile
);
}
@ApiOperation
(
"兑换码详情"
)
@GetMapping
(
"/code/detail"
)
public
ResponseDto
<
KylinLuckyBagCodeDetailVo
>
getCodeDetail
(
@RequestParam
(
value
=
"mobile"
)
String
mobile
,
@RequestParam
(
value
=
"code"
)
String
code
,
@RequestParam
(
value
=
"luckyBagId"
)
String
luckyBagId
){
return
luckyBagService
.
getCodeDetail
(
mobile
,
code
,
luckyBagId
);
}
@GetMapping
(
"/code/consume"
)
@ApiOperation
(
"兑换码核销"
)
public
ResponseDto
<
Boolean
>
consumeCode
(
@RequestParam
(
value
=
"mobile"
)
String
mobile
,
@RequestParam
(
value
=
"code"
)
String
code
,
@RequestParam
(
value
=
"luckyBagId"
)
String
luckyBagId
){
return
luckyBagService
.
consumeCode
(
mobile
,
code
,
luckyBagId
);
}
}
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/BannersServiceImpl.java
View file @
d31b13fa
...
...
@@ -3,8 +3,8 @@ package com.liquidnet.service.kylin.service.impl;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.service.kylin.constant.KylinRedisConst
;
import
com.liquidnet.service.kylin.dto.vo.KylinBannersVo
;
import
com.liquidnet.service.kylin.entity.KylinBanners
;
import
com.liquidnet.service.kylin.service.admin.IKylinBannersService
;
import
com.liquidnet.service.kylin.utils.ObjectUtil
;
...
...
@@ -36,7 +36,7 @@ public class BannersServiceImpl implements IKylinBannersService {
@Autowired
RedisUtil
redisUtil
;
public
List
<
KylinBanners
>
blist
(
String
position
,
String
provinceName
,
String
marketId
)
{
public
List
<
KylinBanners
>
blist
(
String
position
,
String
provinceName
,
String
marketId
,
String
performanceId
)
{
String
nowTime
=
DateUtil
.
getNowTime
();
Object
ListObj
=
redisUtil
.
get
(
KylinRedisConst
.
ADMIN_BANNER_LIST
);
List
<
KylinBanners
>
list
=
ObjectUtil
.
getKylinBannerListArrayList
();
...
...
@@ -61,6 +61,14 @@ public class BannersServiceImpl implements IKylinBannersService {
}
}
// 查询指定演出
if
(
StringUtil
.
isNotBlank
(
performanceId
))
{
if
(!
performanceId
.
equals
(
bannerInfo
.
getPerformanceId
()))
{
itBannerList
.
remove
();
continue
;
}
}
// list
List
<
String
>
pList
=
bannerInfo
.
getPositionList
();
Boolean
pis
=
false
;
...
...
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/FeishuBotServiceImpl.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
service
.
impl
;
import
com.liquidnet.commons.lang.util.HttpUtil
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.kylin.service.IFeishuBotService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.Map
;
@Service
@Slf4j
public
class
FeishuBotServiceImpl
implements
IFeishuBotService
{
@Value
(
"${liquidnet.feishu.bWebhook}"
)
private
String
bWebhook
;
@Override
public
void
sendTextMessage
(
String
text
)
{
HashMap
<
String
,
Object
>
textMap
=
new
HashMap
<>();
textMap
.
put
(
"text"
,
text
);
Map
<
String
,
Object
>
bodyMap
=
new
HashMap
<>();
bodyMap
.
put
(
"msg_type"
,
"text"
);
bodyMap
.
put
(
"content"
,
textMap
);
try
{
HttpUtil
.
postJson
(
bWebhook
,
JsonUtils
.
toJson
(
bodyMap
));
}
catch
(
Exception
e
){
log
.
error
(
"error."
,
e
);
}
}
}
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/KylinLuckyBagServiceImpl.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.kylin.constant.KylinRedisConst
;
import
com.liquidnet.service.kylin.constant.LuckyBagStatusEnum
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagCodeDetailVo
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagScopeVo
;
import
com.liquidnet.service.kylin.dto.vo.KylinLuckyBagVo
;
import
com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo
;
import
com.liquidnet.service.kylin.dto.vo.returns.OrderDetailsVo
;
import
com.liquidnet.service.kylin.entity.*
;
import
com.liquidnet.service.kylin.mapper.KylinLuckyBagMapper
;
import
com.liquidnet.service.kylin.mapper.KylinLuckyBagScopeMapper
;
import
com.liquidnet.service.kylin.mapper.KylinRewardCodeMapper
;
import
com.liquidnet.service.kylin.mapper.KylinRewardUserMapper
;
import
com.liquidnet.service.kylin.service.IFeishuBotService
;
import
com.liquidnet.service.kylin.service.IKylinLuckyBagService
;
import
com.liquidnet.service.kylin.service.IKylinOrderTicketsService
;
import
com.liquidnet.service.kylin.utils.DataUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
@Service
public
class
KylinLuckyBagServiceImpl
implements
IKylinLuckyBagService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
KylinLuckyBagServiceImpl
.
class
);
@Autowired
private
DataUtils
dataUtils
;
@Autowired
RedisUtil
redisUtil
;
@Autowired
IKylinOrderTicketsService
orderTicketsService
;
@Autowired
private
IFeishuBotService
iFeishuBotService
;
@Autowired
private
KylinRewardCodeMapper
kylinRewardCodeMapper
;
@Autowired
private
KylinRewardUserMapper
kylinRewardUserMapper
;
@Autowired
private
KylinLuckyBagScopeMapper
kylinLuckyBagScopeMapper
;
@Autowired
private
KylinLuckyBagMapper
kylinLuckyBagMapper
;
@Override
public
ResponseDto
<
KylinLuckyBagVo
>
getLuckyBagByOrderId
(
String
orderId
)
{
//1. 首先校验用户权限
// OrderDetailsVo vo = orderTicketsService.orderDetails(orderId);
final
KylinOrderTicketVo
orderTicketVo
=
dataUtils
.
getOrderTicketVo
(
orderId
);
final
String
uid
=
CurrentUtil
.
getCurrentUid
();
if
(
orderTicketVo
==
null
)
{
log
.
error
(
"[getLuckyBagByOrderId] 未查询到订单, orderId: {}, uid: {}."
,
orderId
,
uid
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20024"
));
}
if
(!
orderTicketVo
.
getUserId
().
equals
(
uid
))
{
log
.
error
(
"[getLuckyBagByOrderId] 无权查看该订单, orderId: {}, uid: {}."
,
orderId
,
uid
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
log
.
info
(
"[getLuckyBagByOrderId] 获取福袋详情, orderId: {}, uid: {}."
,
orderId
,
uid
);
// 判断订单状态
if
(
isEligibleForWelfare
(
orderTicketVo
))
{
// 2. 订单关联的演出ID
List
<
KylinLuckyBagVo
.
LuckyBagActivityVo
>
activityVos
=
getLuckyBagActivityVos
(
orderTicketVo
.
getPerformanceId
());
//3. 再查询满足的权益
List
<
KylinLuckyBagVo
.
LuckyBagVo
>
luckyBagVos
=
getLuckyBagVos
(
orderTicketVo
);
if
(
activityVos
.
isEmpty
())
{
return
ResponseDto
.
success
(
KylinLuckyBagVo
.
of
(
luckyBagVos
,
null
));
}
else
{
return
ResponseDto
.
success
(
KylinLuckyBagVo
.
of
(
luckyBagVos
,
activityVos
.
get
(
0
)));
}
}
else
{
log
.
info
(
"[getLuckyBagByOrderId] 该订单状态不满足权益要求, orderId: {}, uid: {}, status: {}, payStatus: {}."
,
orderId
,
uid
,
orderTicketVo
.
getStatus
(),
orderTicketVo
.
getPayStatus
());
return
ResponseDto
.
success
(
KylinLuckyBagVo
.
ofEmpty
());
}
}
@Override
public
ResponseDto
<
List
<
KylinLuckyBagScopeVo
>>
getLuckyBagListScope
(
String
mobile
)
{
if
(
StringUtil
.
isBlank
(
mobile
))
{
log
.
info
(
"[getLuckyBagListScope] 手机号为空"
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20004"
));
}
LambdaQueryWrapper
<
KylinLuckyBagScope
>
queryWrapper
=
new
QueryWrapper
<
KylinLuckyBagScope
>()
.
lambda
()
.
eq
(
KylinLuckyBagScope:
:
getMobile
,
mobile
)
.
eq
(
KylinLuckyBagScope:
:
getState
,
LuckyBagStatusEnum
.
AVAILABLE_STATUS_AVAILABLE
.
getValue
());
List
<
KylinLuckyBagScope
>
kylinLuckyBagScopes
=
kylinLuckyBagScopeMapper
.
selectList
(
queryWrapper
);
if
(
kylinLuckyBagScopes
.
isEmpty
())
{
log
.
info
(
"[getLuckyBagListScope] 暂无验码权限, mobile: {}."
,
mobile
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
// 查询福袋列表
List
<
KylinLuckyBag
>
luckyBagList
=
dataUtils
.
getKylinLuckyBagList
();
if
(
luckyBagList
.
isEmpty
())
{
log
.
info
(
"[getLuckyBagListScope] 获取福袋列表为空."
);
return
ResponseDto
.
success
();
}
// 该手机号可以核验的福袋ID列表
Set
<
String
>
collected
=
kylinLuckyBagScopes
.
stream
()
.
map
(
KylinLuckyBagScope:
:
getLuckyBagId
)
.
collect
(
Collectors
.
toSet
());
return
ResponseDto
.
success
(
luckyBagList
.
stream
()
.
filter
(
l
->
collected
.
contains
(
l
.
getLuckyBagId
()))
.
map
(
l
->
{
KylinLuckyBagScopeVo
vo
=
new
KylinLuckyBagScopeVo
();
vo
.
setLuckyBagId
(
l
.
getLuckyBagId
());
vo
.
setName
(
l
.
getName
());
vo
.
setIntroduction
(
l
.
getIntroduction
());
vo
.
setPerformanceId
(
l
.
getPerformanceId
());
vo
.
setPerformanceName
(
l
.
getPerformanceName
());
return
vo
;
})
.
collect
(
Collectors
.
toList
()));
}
@Override
public
ResponseDto
<
KylinLuckyBagCodeDetailVo
>
getCodeDetail
(
String
authMobile
,
String
code
,
String
luckyBagId
)
{
if
(!
checkScopeByMobile
(
authMobile
,
luckyBagId
))
{
log
.
info
(
"暂无验码权限, mobile: {}, luckyBagId: {}."
,
authMobile
,
luckyBagId
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
LambdaQueryWrapper
<
KylinRewardUser
>
queryWrapper
=
new
QueryWrapper
<
KylinRewardUser
>()
.
lambda
()
.
eq
(
KylinRewardUser:
:
getCode
,
code
)
.
eq
(
KylinRewardUser:
:
getLuckyBagId
,
luckyBagId
);
KylinRewardUser
rewardUser
=
kylinRewardUserMapper
.
selectOne
(
queryWrapper
);
if
(
rewardUser
==
null
)
{
log
.
error
(
"兑换码或福袋不存在, code: {}, luckyBagId: {}."
,
code
,
luckyBagId
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20800"
));
}
KylinOrderTicketVo
orderTicketVo
=
dataUtils
.
getOrderTicketVo
(
rewardUser
.
getOrderId
());
if
(
orderTicketVo
==
null
)
{
log
.
error
(
"订单详情为空, orderId: {}."
,
rewardUser
.
getOrderId
());
iFeishuBotService
.
sendTextMessage
(
"订单不存在, orderId: "
+
rewardUser
.
getOrderId
());
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20801"
));
}
return
ResponseDto
.
success
(
buildCodeDetailVo
(
rewardUser
,
orderTicketVo
));
}
@Override
public
ResponseDto
<
Boolean
>
consumeCode
(
String
authMobile
,
String
code
,
String
luckyBagId
)
{
if
(!
checkScopeByMobile
(
authMobile
,
luckyBagId
))
{
log
.
info
(
"暂无验码权限, mobile: {}, luckyBagId: {}."
,
authMobile
,
luckyBagId
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
LambdaQueryWrapper
<
KylinRewardUser
>
queryWrapper
=
new
QueryWrapper
<
KylinRewardUser
>()
.
lambda
()
.
eq
(
KylinRewardUser:
:
getCode
,
code
)
.
eq
(
KylinRewardUser:
:
getLuckyBagId
,
luckyBagId
);
KylinRewardUser
rewardUser
=
kylinRewardUserMapper
.
selectOne
(
queryWrapper
);
if
(
rewardUser
==
null
)
{
log
.
error
(
"兑换码或福袋不存在, code: {}, luckyBagId: {}."
,
code
,
luckyBagId
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20800"
));
}
if
(
LuckyBagStatusEnum
.
AVAILABLE_STATUS_RECEIVED
.
getValue
().
equals
(
rewardUser
.
getState
()))
{
log
.
info
(
"兑换码被使用, code: {}, luckyBagId: {}."
,
code
,
luckyBagId
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20802"
));
}
rewardUser
.
setState
(
LuckyBagStatusEnum
.
AVAILABLE_STATUS_RECEIVED
.
getValue
());
rewardUser
.
setComment
(
authMobile
);
rewardUser
.
setUpdatedAt
(
LocalDateTime
.
now
());
int
updateById
=
kylinRewardUserMapper
.
updateById
(
rewardUser
);
log
.
info
(
"核销兑换码: {}."
,
updateById
>
0
);
return
ResponseDto
.
success
(
updateById
>
0
);
}
private
KylinLuckyBagCodeDetailVo
buildCodeDetailVo
(
KylinRewardUser
rewardUser
,
KylinOrderTicketVo
orderTicketVo
)
{
KylinLuckyBagCodeDetailVo
detailVo
=
new
KylinLuckyBagCodeDetailVo
();
detailVo
.
setLuckyBagId
(
rewardUser
.
getLuckyBagId
());
KylinLuckyBag
luckyBag
=
getLuckyBagById
(
rewardUser
.
getLuckyBagId
());
if
(
luckyBag
!=
null
)
{
detailVo
.
setLuckyBagName
(
luckyBag
.
getName
());
}
detailVo
.
setCode
(
rewardUser
.
getCode
());
detailVo
.
setUseStatus
(
rewardUser
.
getState
());
detailVo
.
setCreatedAt
(
rewardUser
.
getCreatedAt
());
detailVo
.
setUpdatedAt
(
rewardUser
.
getUpdatedAt
());
detailVo
.
setUserInfo
(
getUserInfo
(
orderTicketVo
));
detailVo
.
setOrderInfo
(
getOrderInfo
(
orderTicketVo
));
detailVo
.
setOperator
(
getOperator
(
rewardUser
.
getComment
(),
rewardUser
.
getLuckyBagId
()));
return
detailVo
;
}
/**
* 根据福袋ID获取福袋信息
*
* @param luckyBagId
* @return
*/
private
KylinLuckyBag
getLuckyBagById
(
String
luckyBagId
)
{
LambdaQueryWrapper
<
KylinLuckyBag
>
wrapper
=
new
QueryWrapper
<
KylinLuckyBag
>().
lambda
()
.
eq
(
KylinLuckyBag:
:
getLuckyBagId
,
luckyBagId
);
return
kylinLuckyBagMapper
.
selectOne
(
wrapper
);
}
/**
* 获取用户信息
*
* @param orderTicketVo
* @return
*/
private
KylinLuckyBagCodeDetailVo
.
UserInfo
getUserInfo
(
KylinOrderTicketVo
orderTicketVo
)
{
if
(
orderTicketVo
==
null
)
{
return
null
;
}
KylinLuckyBagCodeDetailVo
.
UserInfo
userInfo
=
new
KylinLuckyBagCodeDetailVo
.
UserInfo
();
userInfo
.
setUid
(
orderTicketVo
.
getUserId
());
userInfo
.
setUserName
(
orderTicketVo
.
getUserName
());
userInfo
.
setUserMobile
(
orderTicketVo
.
getUserMobile
());
return
userInfo
;
}
/**
* 获取订单信息
*
* @param orderTicketVo
* @return
*/
private
KylinLuckyBagCodeDetailVo
.
OrderInfo
getOrderInfo
(
KylinOrderTicketVo
orderTicketVo
)
{
if
(
orderTicketVo
==
null
)
{
return
null
;
}
KylinLuckyBagCodeDetailVo
.
OrderInfo
orderInfo
=
new
KylinLuckyBagCodeDetailVo
.
OrderInfo
();
orderInfo
.
setOrderId
(
orderTicketVo
.
getOrderTicketsId
());
orderInfo
.
setOrderCode
(
orderTicketVo
.
getOrderCode
());
orderInfo
.
setPerformanceTitle
(
orderTicketVo
.
getPerformanceTitle
());
orderInfo
.
setTicketTitle
(
orderTicketVo
.
getTicketTitle
());
orderInfo
.
setNumber
(
orderTicketVo
.
getNumber
());
orderInfo
.
setRefundNumber
(
orderTicketVo
.
getRefundNumber
());
orderInfo
.
setCreatedAt
(
orderTicketVo
.
getCreatedAt
());
orderInfo
.
setUseStart
(
orderTicketVo
.
getUseStart
());
return
orderInfo
;
}
/**
* 获取核验人信息
*
* @return
*/
private
KylinLuckyBagCodeDetailVo
.
Operator
getOperator
(
String
mobile
,
String
luckyBagId
)
{
if
(
StringUtil
.
isBlank
(
mobile
))
{
return
null
;
}
LambdaQueryWrapper
<
KylinLuckyBagScope
>
queryWrapper
=
new
QueryWrapper
<
KylinLuckyBagScope
>().
lambda
()
.
eq
(
KylinLuckyBagScope:
:
getMobile
,
mobile
)
.
eq
(
KylinLuckyBagScope:
:
getLuckyBagId
,
luckyBagId
);
KylinLuckyBagScope
luckyBagScope
=
kylinLuckyBagScopeMapper
.
selectOne
(
queryWrapper
);
if
(
luckyBagScope
==
null
)
{
return
null
;
}
return
new
KylinLuckyBagCodeDetailVo
.
Operator
(
luckyBagScope
.
getMobile
(),
luckyBagScope
.
getNickName
());
}
/**
* 获取福袋列表
*
* @param orderTicketVo
* @return
*/
private
List
<
KylinLuckyBagVo
.
LuckyBagVo
>
getLuckyBagVos
(
KylinOrderTicketVo
orderTicketVo
)
{
final
String
performanceId
=
orderTicketVo
.
getPerformanceId
();
final
String
orderId
=
orderTicketVo
.
getOrderTicketsId
();
final
String
uid
=
orderTicketVo
.
getUserId
();
List
<
KylinLuckyBag
>
luckyBagList
=
dataUtils
.
getKylinLuckyBagList
();
if
(
luckyBagList
.
isEmpty
())
{
log
.
info
(
"[getLuckyBagVos] 获取福袋列表为空."
);
return
Collections
.
emptyList
();
}
// 筛选出 performanceId 为 "abc" 的 KylinLuckyBag 对象
List
<
KylinLuckyBag
>
filteredList
=
luckyBagList
.
stream
()
.
filter
(
luckyBag
->
performanceId
.
equals
(
luckyBag
.
getPerformanceId
()))
.
collect
(
Collectors
.
toList
());
List
<
KylinLuckyBagVo
.
LuckyBagVo
>
activityVos
=
new
ArrayList
<>(
filteredList
.
size
());
filteredList
.
forEach
(
l
->
{
KylinLuckyBagVo
.
LuckyBagVo
luckyBagVo
=
new
KylinLuckyBagVo
.
LuckyBagVo
();
luckyBagVo
.
setLuckyBagId
(
l
.
getLuckyBagId
());
luckyBagVo
.
setName
(
l
.
getName
());
luckyBagVo
.
setIntroduction
(
l
.
getIntroduction
());
luckyBagVo
.
setCodeShowType
(
l
.
getCodeShowType
());
final
String
sendTime
=
l
.
getSendTime
();
final
String
nowTime
=
DateUtil
.
getNowTime
();
// 判断发放时间
if
(
null
!=
sendTime
&&
!
sendTime
.
isEmpty
())
{
if
(
DateUtil
.
compareStrDay
(
nowTime
,
sendTime
)
>=
0
)
{
// 当前时间小于发放时间 还未开始呢
// 查询数据库获取兑换码
List
<
KylinRewardUser
>
kylinRewardUserList
=
dataUtils
.
getKylinRewardUserList
(
orderId
,
uid
,
l
.
getLuckyBagId
());
if
(
kylinRewardUserList
.
isEmpty
())
{
// 根据购买数量来分配兑换码
log
.
info
(
"[getLuckyBagVos] 福袋[{}]已到发放时间,但未给用户分配兑换码, uid: {}, orderId: {}."
,
l
.
getName
(),
uid
,
orderId
);
kylinRewardUserList
=
getRandomRewardCode
(
orderTicketVo
,
l
.
getLuckyBagId
());
}
List
<
KylinLuckyBagVo
.
RewardCodeVo
>
codeVoList
=
kylinRewardUserList
.
stream
().
map
(
k
->
{
KylinLuckyBagVo
.
RewardCodeVo
rewardCodeVo
=
new
KylinLuckyBagVo
.
RewardCodeVo
();
rewardCodeVo
.
setUseStatus
(
k
.
getState
());
rewardCodeVo
.
setCode
(
k
.
getCode
());
return
rewardCodeVo
;
}).
collect
(
Collectors
.
toList
());
luckyBagVo
.
setRewardCodeVoList
(
codeVoList
);
luckyBagVo
.
setStatus
(
kylinRewardUserList
.
isEmpty
()
?
LuckyBagStatusEnum
.
UNLOCK_STATUS_NOT_UNLOCKED
.
getValue
()
:
LuckyBagStatusEnum
.
UNLOCK_STATUS_UNLOCKED
.
getValue
());
}
else
{
log
.
info
(
"[getLuckyBagVos] 福袋[{}]未到发放时间."
,
l
.
getName
());
luckyBagVo
.
setStatus
(
LuckyBagStatusEnum
.
UNLOCK_STATUS_NOT_UNLOCKED
.
getValue
());
luckyBagVo
.
setRewardCodeVoList
(
Collections
.
emptyList
());
}
}
activityVos
.
add
(
luckyBagVo
);
});
return
activityVos
;
}
/**
* 分配兑换码
*
* @param orderTicketVo
* @return
*/
private
List
<
KylinRewardUser
>
getRandomRewardCode
(
KylinOrderTicketVo
orderTicketVo
,
String
luckyBagId
)
{
final
int
limitTotal
=
orderTicketVo
.
getNumber
()
-
orderTicketVo
.
getRefundNumber
();
if
(
limitTotal
<=
0
)
{
log
.
error
(
"[getRandomRewardCode] 用户订单购买数量错误, orderId: {}."
,
orderTicketVo
.
getOrderTicketsId
());
return
Collections
.
emptyList
();
}
final
String
lockKey
=
KylinRedisConst
.
LUCKY_BAG_CODE_LOCK
+
luckyBagId
;
boolean
locked
=
redisUtil
.
lock
(
lockKey
,
1
,
30
);
if
(!
locked
)
{
log
.
info
(
"[getRandomRewardCode] 未获取到分布式锁."
);
return
Collections
.
emptyList
();
}
LambdaQueryWrapper
<
KylinRewardCode
>
lambdaQueryWrapper
=
new
QueryWrapper
<
KylinRewardCode
>().
lambda
()
.
eq
(
KylinRewardCode:
:
getLuckyBagId
,
luckyBagId
)
.
eq
(
KylinRewardCode:
:
getState
,
LuckyBagStatusEnum
.
AVAILABLE_STATUS_AVAILABLE
.
getValue
())
.
last
(
true
,
" limit "
+
limitTotal
);
//2. 搜索未分配的兑换码
List
<
KylinRewardCode
>
rewardCodes
=
kylinRewardCodeMapper
.
selectList
(
lambdaQueryWrapper
);
if
(
rewardCodes
.
size
()
<
limitTotal
)
{
log
.
error
(
"[getRandomRewardCode] 兑换码不足, luckyBagId: {}, need total: {}."
,
luckyBagId
,
limitTotal
);
// 报警
String
msg
=
String
.
format
(
"福袋ID [%s] 兑换码不足,请及时补充."
,
luckyBagId
);
iFeishuBotService
.
sendTextMessage
(
msg
);
return
Collections
.
emptyList
();
}
//3. 写入
List
<
KylinRewardUser
>
rewardUsers
=
new
ArrayList
<>(
limitTotal
);
try
{
for
(
int
i
=
0
;
i
<
rewardCodes
.
size
();
i
++)
{
KylinRewardCode
lockedRewardCode
=
rewardCodes
.
get
(
i
);
KylinRewardUser
rewardUser
=
buildRewardUser
(
orderTicketVo
.
getUserId
(),
orderTicketVo
.
getOrderTicketsId
(),
luckyBagId
,
orderTicketVo
.
getEntitiesVoList
().
get
(
i
).
getOrderTicketEntitiesId
(),
lockedRewardCode
.
getCode
());
int
inserted
=
kylinRewardUserMapper
.
insert
(
rewardUser
);
if
(
inserted
>
0
)
{
// 将兑换码状态更新为已领取
int
updateResult
=
kylinRewardCodeMapper
.
updateByMid
(
lockedRewardCode
.
getMid
(),
LuckyBagStatusEnum
.
AVAILABLE_STATUS_UNAVAILABLE
.
getValue
());
if
(
updateResult
<=
0
)
{
log
.
error
(
"[getRandomRewardCode] 修改兑换码状态失败, luckyBagId: {}, orderId: {}, code: {}."
,
luckyBagId
,
orderTicketVo
.
getOrderTicketsId
(),
lockedRewardCode
.
getCode
());
// 报警
String
msg
=
String
.
format
(
"修改兑换码状态失败:福袋ID: [%s], 用户ID: [%s], 订单ID: [%s], code: [%s]。"
,
luckyBagId
,
orderTicketVo
.
getUserId
(),
orderTicketVo
.
getOrderTicketsId
(),
lockedRewardCode
.
getCode
());
iFeishuBotService
.
sendTextMessage
(
msg
);
}
else
{
log
.
info
(
"[getRandomRewardCode] 兑换码分配成功, luckyBagId: {}, orderId: {}, code: {}."
,
luckyBagId
,
orderTicketVo
.
getOrderTicketsId
(),
lockedRewardCode
.
getCode
());
rewardUsers
.
add
(
rewardUser
);
}
}
}
return
rewardUsers
;
}
catch
(
Exception
e
)
{
log
.
error
(
"error"
,
e
);
// 报警
iFeishuBotService
.
sendTextMessage
(
"error: "
+
e
.
getMessage
());
return
Collections
.
emptyList
();
}
finally
{
redisUtil
.
uLock
(
lockKey
);
}
}
private
KylinRewardUser
buildRewardUser
(
String
uid
,
String
orderId
,
String
luckyBagId
,
String
orderTicketEntitiesId
,
String
code
)
{
KylinRewardUser
user
=
new
KylinRewardUser
();
user
.
setUid
(
uid
);
user
.
setLuckyBagId
(
luckyBagId
);
user
.
setOrderId
(
orderId
);
user
.
setOrderTicketEntitiesId
(
orderTicketEntitiesId
);
user
.
setCode
(
code
);
user
.
setState
(
LuckyBagStatusEnum
.
AVAILABLE_STATUS_AVAILABLE
.
getValue
());
user
.
setCreatedAt
(
LocalDateTime
.
now
());
// user.setUpdatedAt(LocalDateTime.now());
return
user
;
}
/**
* 获取福袋活动列表
*
* @param performanceId
* @return
*/
private
List
<
KylinLuckyBagVo
.
LuckyBagActivityVo
>
getLuckyBagActivityVos
(
String
performanceId
)
{
List
<
KylinLuckyBagVo
.
LuckyBagActivityVo
>
activityVos
=
new
ArrayList
<>();
//2. 先查询活动
List
<
KylinLuckyBagActivity
>
luckyBagActivityList
=
dataUtils
.
getKylinLuckyBagActivityList
();
luckyBagActivityList
.
forEach
(
l
->
{
if
(
l
.
getPerformanceId
().
equals
(
performanceId
))
{
activityVos
.
add
(
new
KylinLuckyBagVo
.
LuckyBagActivityVo
(
l
.
getLuckyBagActivityId
(),
l
.
getName
(),
l
.
getDetail
(),
l
.
getTargetUrl
()));
}
});
return
activityVos
;
}
/**
* 校验手机号是否有权限验码
*
* @param mobile
* @param luckyBagId
* @return
*/
private
boolean
checkScopeByMobile
(
String
mobile
,
String
luckyBagId
)
{
if
(
StringUtil
.
isBlank
(
mobile
))
{
log
.
info
(
"mobile is blank."
);
return
false
;
}
LambdaQueryWrapper
<
KylinLuckyBagScope
>
queryWrapper
=
new
QueryWrapper
<
KylinLuckyBagScope
>().
lambda
()
.
eq
(
KylinLuckyBagScope:
:
getMobile
,
mobile
)
.
eq
(
KylinLuckyBagScope:
:
getLuckyBagId
,
luckyBagId
)
.
eq
(
KylinLuckyBagScope:
:
getState
,
LuckyBagStatusEnum
.
AVAILABLE_STATUS_AVAILABLE
.
getValue
());
KylinLuckyBagScope
kylinLuckyBagScope
=
kylinLuckyBagScopeMapper
.
selectOne
(
queryWrapper
);
return
kylinLuckyBagScope
!=
null
;
}
/**
* 判断是否满足发放福利条件
*
* @param orderTicketVo 订单票务信息对象
* @return 是否满足条件
*/
private
boolean
isEligibleForWelfare
(
KylinOrderTicketVo
orderTicketVo
)
{
if
(
orderTicketVo
==
null
)
{
log
.
info
(
"[isEligibleForWelfare] 订单信息为空."
);
return
false
;
}
Integer
status
=
orderTicketVo
.
getStatus
();
Integer
payStatus
=
orderTicketVo
.
getPayStatus
();
Integer
number
=
orderTicketVo
.
getNumber
();
Integer
refundNumber
=
orderTicketVo
.
getRefundNumber
();
log
.
info
(
"[isEligibleForWelfare] 订单信息, status: {}, payStatus: {}, number: {}, refundNumber: {}."
,
status
,
payStatus
,
number
,
refundNumber
);
return
(
status
!=
null
&&
(
status
.
equals
(
1
)
||
status
.
equals
(
6
)))
&&
(
payStatus
!=
null
&&
payStatus
.
equals
(
1
))
&&
(
number
!=
null
&&
refundNumber
!=
null
&&
(
number
-
refundNumber
)
>
0
);
}
}
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/KylinOrderTicketsRefundServiceImpl.java
View file @
d31b13fa
...
...
@@ -213,7 +213,8 @@ public class KylinOrderTicketsRefundServiceImpl {
LocalDateTime
refundOpenDate
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceVo
.
getRefundOpenTime
());
LocalDateTime
refundCloseDate
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceVo
.
getRefundCloseTime
());
if
(
LocalDateTime
.
now
().
isAfter
(
refundOpenDate
)
&&
LocalDateTime
.
now
().
isBefore
(
refundCloseDate
)
&&
ticketVo
.
getCounts
()
==
1
)
{
//&& ticketVo.getCounts() == 1
)
{
}
else
{
return
ResponseDto
.
failure
(
"暂不支持退款"
);
...
...
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/service/impl/KylinOrderTicketsServiceImpl.java
View file @
d31b13fa
...
...
@@ -311,7 +311,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
LocalDateTime
refundOpenDate
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceVo
.
getRefundOpenTime
());
LocalDateTime
refundCloseDate
=
DateUtil
.
Formatter
.
yyyyMMddHHmmss
.
parse
(
performanceVo
.
getRefundCloseTime
());
if
(
LocalDateTime
.
now
().
isAfter
(
refundOpenDate
)
&&
LocalDateTime
.
now
().
isBefore
(
refundCloseDate
)
&&
ticketVo
.
getCounts
()
==
1
&&
lockPrice
.
compareTo
(
orderTicketVo
.
getPriceActual
())
!=
0
&&
lockPrice
.
compareTo
(
orderTicketVo
.
getPriceActual
())
!=
0
&&
(
orderTicketVo
.
getStatus
().
equals
(
1
)
||
orderTicketVo
.
getStatus
().
equals
(
3
)
||
orderTicketVo
.
getStatus
().
equals
(
6
))
&&
(
orderTicketVo
.
getTransferStatus
().
equals
(
0
)
||
orderTicketVo
.
getTransferStatus
().
equals
(
5
)))
{
vo
.
setIsCanRefund
(
1
);
...
...
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/utils/DataUtils.java
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
kylin
.
utils
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.liquidnet.common.cache.redis.util.RedisUtil
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.DateUtil
;
import
com.liquidnet.service.adam.constant.AdamRedisConst
;
import
com.liquidnet.service.adam.dto.vo.AdamMemberVo
;
import
com.liquidnet.service.adam.dto.vo.AdamUserMemberVo
;
import
com.liquidnet.service.base.constant.RedisKeyExpireConst
;
import
com.liquidnet.service.goblin.constant.GoblinRedisConst
;
...
...
@@ -12,6 +13,7 @@ import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import
com.liquidnet.service.goblin.dto.vo.*
;
import
com.liquidnet.service.kylin.constant.KylinRedisConst
;
import
com.liquidnet.service.kylin.constant.KylinTableStatusConst
;
import
com.liquidnet.service.kylin.constant.LuckyBagStatusEnum
;
import
com.liquidnet.service.kylin.dao.KylinTicketActive
;
import
com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo
;
import
com.liquidnet.service.kylin.dto.vo.KylinPerformanceSubscribeUpushVo
;
...
...
@@ -26,9 +28,10 @@ import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketExpressModuleVo;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo
;
import
com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo
;
import
com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo
;
import
com.liquidnet.service.kylin.dto.vo.returns.NoticeKylinPerformanceVo
;
import
com.liquidnet.service.kylin.entity.KylinOrderCoupons
;
import
com.liquidnet.service.kylin.entity.KylinRecommendActive
;
import
com.liquidnet.service.kylin.entity.*
;
import
com.liquidnet.service.kylin.mapper.KylinLuckyBagActivityMapper
;
import
com.liquidnet.service.kylin.mapper.KylinLuckyBagMapper
;
import
com.liquidnet.service.kylin.mapper.KylinRewardUserMapper
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.PageRequest
;
...
...
@@ -56,6 +59,12 @@ public class DataUtils {
private
RedisUtil
redisUtil
;
@Autowired
GoblinRedisUtils
goblinRedisUtils
;
@Autowired
private
KylinLuckyBagActivityMapper
kylinLuckyBagActivityMapper
;
@Autowired
private
KylinLuckyBagMapper
kylinLuckyBagMapper
;
@Autowired
private
KylinRewardUserMapper
kylinRewardUserMapper
;
/**
...
...
@@ -1603,4 +1612,82 @@ public class DataUtils {
KylinTicketPartnerVo
.
class
,
KylinTicketPartnerVo
.
class
.
getSimpleName
());
}
/**
* 获取福袋活动列表
* @return
*/
public
List
<
KylinLuckyBagActivity
>
getKylinLuckyBagActivityList
(){
String
redisKey
=
KylinRedisConst
.
LUCKY_BAG_ACTIVITY
;
Object
obj
=
redisUtil
.
get
(
redisKey
);
if
(
obj
==
null
)
{
// 从数据库查询 状态为可用的
LambdaQueryWrapper
<
KylinLuckyBagActivity
>
lambdaQueryWrapper
=
new
QueryWrapper
<
KylinLuckyBagActivity
>()
.
lambda
()
.
eq
(
KylinLuckyBagActivity:
:
getState
,
LuckyBagStatusEnum
.
AVAILABLE_STATUS_AVAILABLE
.
getValue
())
.
orderByDesc
(
KylinLuckyBagActivity:
:
getSort
);
List
<
KylinLuckyBagActivity
>
bagActivities
=
kylinLuckyBagActivityMapper
.
selectList
(
lambdaQueryWrapper
);
setKylinLuckyBagActivityList
(
bagActivities
);
return
bagActivities
;
}
else
{
return
(
List
<
KylinLuckyBagActivity
>)
obj
;
}
}
public
void
setKylinLuckyBagActivityList
(
List
<
KylinLuckyBagActivity
>
activities
){
String
redisKey
=
KylinRedisConst
.
LUCKY_BAG_ACTIVITY
;
redisUtil
.
set
(
redisKey
,
activities
,
RedisKeyExpireConst
.
KYLIN_LUCKY_BAG_ACTIVITY_EXPIRE
);
}
public
void
delKylinLuckyBagActivityList
(){
String
redisKey
=
KylinRedisConst
.
LUCKY_BAG_ACTIVITY
;
redisUtil
.
del
(
redisKey
);
}
/**
* 获取福袋列表
* @return
*/
public
List
<
KylinLuckyBag
>
getKylinLuckyBagList
(){
String
redisKey
=
KylinRedisConst
.
LUCKY_BAG
;
Object
obj
=
redisUtil
.
get
(
redisKey
);
if
(
obj
==
null
)
{
// 从数据库查询 状态为可用的
LambdaQueryWrapper
<
KylinLuckyBag
>
lambdaQueryWrapper
=
new
QueryWrapper
<
KylinLuckyBag
>()
.
lambda
()
.
eq
(
KylinLuckyBag:
:
getState
,
LuckyBagStatusEnum
.
AVAILABLE_STATUS_AVAILABLE
.
getValue
());
List
<
KylinLuckyBag
>
bagActivities
=
kylinLuckyBagMapper
.
selectList
(
lambdaQueryWrapper
);
setKylinLuckyBagList
(
bagActivities
);
return
bagActivities
;
}
else
{
return
(
List
<
KylinLuckyBag
>)
obj
;
}
}
public
void
setKylinLuckyBagList
(
List
<
KylinLuckyBag
>
activities
){
String
redisKey
=
KylinRedisConst
.
LUCKY_BAG
;
redisUtil
.
set
(
redisKey
,
activities
,
RedisKeyExpireConst
.
KYLIN_LUCKY_BAG_EXPIRE
);
}
public
void
delKylinLuckyBagList
(){
String
redisKey
=
KylinRedisConst
.
LUCKY_BAG
;
redisUtil
.
del
(
redisKey
);
}
/**
* 获取用户领取兑换码
*
* @param orderId
* @param uid
* @return
*/
public
List
<
KylinRewardUser
>
getKylinRewardUserList
(
String
orderId
,
String
uid
,
String
luckyBagId
)
{
LambdaQueryWrapper
<
KylinRewardUser
>
lambdaQueryWrapper
=
new
QueryWrapper
<
KylinRewardUser
>().
lambda
()
.
eq
(
KylinRewardUser:
:
getUid
,
uid
)
.
eq
(
KylinRewardUser:
:
getOrderId
,
orderId
)
.
eq
(
KylinRewardUser:
:
getLuckyBagId
,
luckyBagId
);
return
kylinRewardUserMapper
.
selectList
(
lambdaQueryWrapper
);
}
}
liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/resources/errors.properties
View file @
d31b13fa
40001
=
登录信息有误
40002
=
账号已在另一台设备登录
40003
=
登录已过期
# ------------------------ 4
开头错误码作系统保留
40001
=
\u
767B
\u
5F55
\u
4FE1
\u
606F
\u6709\u
8BEF
40002
=
\u
8D26
\u
53F7
\u
5DF2
\u5728\u
53E6
\u
4E00
\u
53F0
\u
8BBE
\u5907\u
767B
\u
5F55
40003
=
\u
767B
\u
5F55
\u
5DF2
\u
8FC7
\u
671F
# ------------------------ 4
\u5F00\u5934\u9519\u8BEF\u7801\u4F5C\u7CFB\u7EDF\u4FDD\u7559
#APP ERROR
20001
=
验证码发送失败
20002
=
验证码错误,请重新输入
20003
=
无权查看
20004
=
参数错误
20005
=
手机号获取失败,请更换登录方式
20006
=
第三方账号未注册
20007
=
数量错误
20008
=
无权购买
20009
=
非会员用户暂不可购买
20010
=
当前不可购买
20011
=
未开始售卖
20012
=
售卖已结束
20013
=
已超过快递票截止时间
20014
=
快递票未填写收货地址
20015
=
入场人数量错误
20016
=
库存不足
20017
=
年龄不符合
20018
=
下单失败
20019
=
申请失败
20020
=
当前状态不可撤回
20021
=
退款金额不能为
0
20022
=
申请金额不得小于
0
20023
=
请求频繁
20024
=
订单不存在
20025
=
订单已支付
20026
=
订单已关闭
20028
=
订单已失效
20027
=
您已支付请刷新再试
20029
=
未选择支付方式
20030
=
查看失败
20001
=
\u
9A8C
\u
8BC1
\u7801\u
53D1
\u9001\u5931\u
8D25
20002
=
\u
9A8C
\u
8BC1
\u7801\u9519\u
8BEF
\u
FF0C
\u
8BF7
\u
91CD
\u
65B0
\u
8F93
\u5165
20003
=
\u
65E0
\u6743\u
67E5
\u
770B
20004
=
\u
53C2
\u6570\u9519\u
8BEF
20005
=
\u
624B
\u
673A
\u
53F7
\u
83B7
\u
53D6
\u5931\u
8D25
\u
FF0C
\u
8BF7
\u
66F4
\u6362\u
767B
\u
5F55
\u
65B9
\u
5F0F
20006
=
\u
7B2C
\u
4E09
\u
65B9
\u
8D26
\u
53F7
\u
672A
\u
6CE8
\u
518C
20007
=
\u6570\u
91CF
\u9519\u
8BEF
20008
=
\u
65E0
\u6743\u
8D2D
\u
4E70
20009
=
\u
975E
\u
4F1A
\u5458\u7528\u6237\u6682\u
4E0D
\u
53EF
\u
8D2D
\u
4E70
20010
=
\u
5F53
\u
524D
\u
4E0D
\u
53EF
\u
8D2D
\u
4E70
20011
=
\u
672A
\u
5F00
\u
59CB
\u
552E
\u5356
20012
=
\u
552E
\u5356\u
5DF2
\u
7ED3
\u
675F
20013
=
\u
5DF2
\u
8D85
\u
8FC7
\u
5FEB
\u9012\u7968\u
622A
\u
6B62
\u
65F6
\u
95F4
20014
=
\u
5FEB
\u9012\u7968\u
672A
\u
586B
\u5199\u6536\u
8D27
\u5730\u5740
20015
=
\u5165\u
573A
\u
4EBA
\u6570\u
91CF
\u9519\u
8BEF
20016
=
\u
5E93
\u
5B58
\u
4E0D
\u
8DB3
20017
=
\u
5E74
\u
9F84
\u
4E0D
\u
7B26
\u5408
20018
=
\u
4E0B
\u5355\u5931\u
8D25
20019
=
\u7533\u
8BF7
\u5931\u
8D25
20020
=
\u
5F53
\u
524D
\u
72B6
\u6001\u
4E0D
\u
53EF
\u
64A4
\u
56DE
20021
=
\u9000\u
6B3E
\u
91D1
\u
989D
\u
4E0D
\u
80FD
\u
4E3A
0
20022
=
\u7533\u
8BF7
\u
91D1
\u
989D
\u
4E0D
\u
5F97
\u
5C0F
\u
4E8E
0
20023
=
\u
8BF7
\u
6C42
\u9891\u
7E41
20024
=
\u
8BA2
\u5355\u
4E0D
\u
5B58
\u5728
20025
=
\u
8BA2
\u5355\u
5DF2
\u
652F
\u
4ED8
20026
=
\u
8BA2
\u5355\u
5DF2
\u5173\u
95ED
20028
=
\u
8BA2
\u5355\u
5DF2
\u5931\u6548
20027
=
\u
60A8
\u
5DF2
\u
652F
\u
4ED8
\u
8BF7
\u5237\u
65B0
\u
518D
\u
8BD5
20029
=
\u
672A
\u9009\u
62E9
\u
652F
\u
4ED8
\u
65B9
\u
5F0F
20030
=
\u
67E5
\u
770B
\u5931\u
8D25
#APP JDM
20201
=
#
专业版
APP
20601
=
账号不存在
20602
=
密码错误
#
\u4E13\u4E1A\u7248
APP
20601
=
\u
8D26
\u
53F7
\u
4E0D
\u
5B58
\u5728
20602
=
\u
5BC6
\u7801\u9519\u
8BEF
20603
=
20604
=
20605
=
20606
=
当前账号无关联演出数据
20607
=
当前账号未关联当前演出
20608
=
当前演出还未开放下载
# 演出
20700
=
演出详情获取失败
20701
=
巡演获取失败
20702
=
获取演出场次票种失败
20703
=
获取支付前详情失败
20606
=
\u
5F53
\u
524D
\u
8D26
\u
53F7
\u
65E0
\u5173\u8054\u
6F14
\u
51FA
\u6570\u
636E
20607
=
\u
5F53
\u
524D
\u
8D26
\u
53F7
\u
672A
\u5173\u8054\u
5F53
\u
524D
\u
6F14
\u
51FA
20608
=
\u
5F53
\u
524D
\u
6F14
\u
51FA
\u
8FD8
\u
672A
\u
5F00
\u
653E
\u
4E0B
\u
8F7D
# \u6F14\u51FA
20700
=
\u
6F14
\u
51FA
\u
8BE6
\u
60C5
\u
83B7
\u
53D6
\u5931\u
8D25
20701
=
\u
5DE1
\u
6F14
\u
83B7
\u
53D6
\u5931\u
8D25
20702
=
\u
83B7
\u
53D6
\u
6F14
\u
51FA
\u
573A
\u
6B21
\u7968\u
79CD
\u5931\u
8D25
20703
=
\u
83B7
\u
53D6
\u
652F
\u
4ED8
\u
524D
\u
8BE6
\u
60C5
\u5931\u
8D25
#\u798F\u888B
20800
=
\u5151\u6362\u7801\u
65E0
\u6548
20801
=
\u
8BA2
\u5355\u
4E0D
\u
5B58
\u5728
20802
=
\u5151\u6362\u7801\u
5DF2
\u
88AB
\u
4F7F
\u7528
liquidnet-bus-service/liquidnet-service-order/liquidnet-service-order-impl/src/main/java/com/liquidnet/service/order/service/impl/KylinOrderTicketsServiceImpl.java
View file @
d31b13fa
...
...
@@ -255,10 +255,18 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
}
// 获取限购 实名
int
ticketLimit
=
ticketData
.
getLimitCount
();
//普通票种限购
int
ticketLimit
=
1
;
int
ticketMemberLimit
=
ticketData
.
getLimitCountMember
();
//会员票种限购
int
ticketIdCount
=
ticketData
.
getIdCount
();
//实名票种限购
int
performanceLimit
=
performanceData
.
getLimitCount
();
//普通演出限购
int
performanceLimit
=
1
;
if
(
isPay
)
{
performanceLimit
=
performanceData
.
getLimitCount
();
//普通演出限购
ticketLimit
=
ticketData
.
getLimitCount
();
//普通票种限购
}
else
{
performanceLimit
=
10000
;
//兑换不限制演出限购
ticketLimit
=
10000
;
//兑换不限制票种限购
}
int
performanceMemberLimit
=
1
;
//会员演出限购
int
performanceIdCount
=
performanceData
.
getIdCount
();
//实名演出限购
int
isTrueName
=
ticketData
.
getIsTrueName
();
//是否演出实名
...
...
liquidnet-bus-service/liquidnet-service-sweet/docu/db_20250604_doudou.sql
0 → 100644
View file @
d31b13fa
-- 20250604 doudou预约签名CD记录表
drop
TABLE
if
exists
`sweet_doudou`
;
CREATE
TABLE
`sweet_doudou`
(
`mid`
bigint
unsigned
NOT
NULL
AUTO_INCREMENT
,
`doudou_id`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'doudou_id'
,
`user_id`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'user_id'
,
`username`
varchar
(
255
)
NOT
NULL
DEFAULT
''
COMMENT
'观演人姓名'
,
`phone`
varchar
(
11
)
NOT
NULL
DEFAULT
''
COMMENT
'观演人手机号'
,
`platform`
varchar
(
100
)
NOT
NULL
DEFAULT
''
COMMENT
'购买平台'
,
`order_code`
varchar
(
100
)
NOT
NULL
DEFAULT
''
COMMENT
'购买订单号'
,
`mark`
varchar
(
512
)
DEFAULT
''
COMMENT
'想给doudou说的话'
,
`status`
tinyint
NOT
NULL
DEFAULT
1
COMMENT
'状态 1已登记 2未中签 3已中签 4已核销'
,
`created_at`
datetime
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`updated_at`
datetime
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`mid`
),
KEY
`sweet_doudou_id`
(
`doudou_id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
utf8mb4
COLLATE
utf8mb4_unicode_ci
ROW_FORMAT
=
DYNAMIC
COMMENT
'doudou预约签名CD记录表'
;
alter
table
sweet_doudou
add
active_id
varchar
(
100
)
default
''
not
null
comment
'活动id'
after
order_code
;
alter
table
sweet_doudou
add
img_url
varchar
(
255
)
default
''
not
null
comment
'订单截图 url'
after
active_id
;
-- 20250604 doudou预约签名核验权限表
drop
TABLE
if
exists
`sweet_doudou_scope`
;
CREATE
TABLE
`sweet_doudou_scope`
(
`mid`
bigint
unsigned
NOT
NULL
AUTO_INCREMENT
,
`mobile`
varchar
(
50
)
NOT
NULL
COMMENT
'核验人手机号'
,
`nick_name`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'昵称'
,
`real_name`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'真实姓名'
,
`id_card`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'身份证号码'
,
`status`
tinyint
NOT
NULL
DEFAULT
1
COMMENT
'状态 0 不可用 1可用'
,
`created_at`
datetime
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`updated_at`
datetime
NULL
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`mid`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
utf8mb4
COLLATE
utf8mb4_unicode_ci
ROW_FORMAT
=
DYNAMIC
COMMENT
'doudou预约签名核验权限表'
;
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-sweet/docu/db_20250626_doudouV2.sql
0 → 100644
View file @
d31b13fa
drop
TABLE
if
exists
`sweet_doudou_active`
;
CREATE
TABLE
`sweet_doudou_active`
(
`mid`
bigint
(
20
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
`active_id`
varchar
(
255
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'active_id'
,
`title`
varchar
(
255
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'标题'
,
`details`
varchar
(
1000
)
COLLATE
utf8mb4_unicode_ci
default
''
COMMENT
'活动详情/兑换说明'
,
`card_images`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'卡片背景图'
,
`detail_images`
varchar
(
255
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'活动详情背景图'
,
`target_url`
varchar
(
255
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'活动详情URL'
,
`begin_at`
varchar
(
100
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'开始时间'
,
`end_at`
varchar
(
100
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
COMMENT
'结束时间'
,
`sort`
tinyint
(
4
)
NOT
NULL
DEFAULT
'1'
COMMENT
'排序,越大越靠前'
,
`status`
tinyint
(
4
)
NOT
NULL
DEFAULT
'1'
COMMENT
'状态 1可用 0不可用'
,
`created_at`
datetime
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`updated_at`
datetime
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`mid`
),
UNIQUE
KEY
`active_id_ind`
(
`active_id`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
ROW_FORMAT
=
DYNAMIC
COMMENT
=
'doudou活动表'
;
\ No newline at end of file
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/controller/SweetDoudouController.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
controller
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.sweet.param.SweetDouDouCheckParam
;
import
com.liquidnet.service.sweet.param.SweetDouDouParam
;
import
com.liquidnet.service.sweet.service.ISweetDoudouService
;
import
com.liquidnet.service.sweet.vo.SweetDouDouActiveVo
;
import
com.liquidnet.service.sweet.vo.SweetDouDouVo
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.validation.Valid
;
import
java.util.List
;
/**
* <p>
* doudou预约签名CD记录表 前端控制器
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
@Api
(
tags
=
"活动-doudou"
)
@RestController
@RequestMapping
(
"/doudou"
)
public
class
SweetDoudouController
{
@Autowired
private
ISweetDoudouService
iSweetDoudouService
;
@GetMapping
(
"/active/list"
)
@ApiOperation
(
"获取活动列表"
)
public
ResponseDto
<
List
<
SweetDouDouActiveVo
>>
getActiveList
()
{
return
iSweetDoudouService
.
getActiveList
();
}
@GetMapping
(
"/active/detail"
)
@ApiOperation
(
"获取活动详情"
)
public
ResponseDto
<
SweetDouDouActiveVo
>
getActiveDetail
(
@RequestParam
(
value
=
"activeId"
)
String
activeId
){
return
iSweetDoudouService
.
getActiveDetail
(
activeId
);
}
@GetMapping
(
""
)
@ApiOperation
(
"获取用户预约详情"
)
public
ResponseDto
<
SweetDouDouVo
>
info
(
@RequestParam
(
value
=
"activeId"
)
String
activeId
)
{
return
iSweetDoudouService
.
info
(
activeId
);
}
@PostMapping
(
""
)
@ApiOperation
(
"预约"
)
public
ResponseDto
<
SweetDouDouVo
>
create
(
@Valid
@RequestBody
SweetDouDouParam
param
)
{
return
iSweetDoudouService
.
create
(
param
);
}
// ################################## 二维码核销 ###############################################
@PostMapping
(
"/detail"
)
@ApiOperation
(
"核验-码详情"
)
public
ResponseDto
<
SweetDouDouVo
>
detail
(
@Valid
@RequestBody
SweetDouDouCheckParam
param
)
{
return
iSweetDoudouService
.
detail
(
param
);
}
@PostMapping
(
"/check"
)
@ApiOperation
(
"核销"
)
public
ResponseDto
check
(
@Valid
@RequestBody
SweetDouDouCheckParam
param
)
{
return
iSweetDoudouService
.
check
(
param
);
}
@PostMapping
(
"/winning/upload"
)
@ApiOperation
(
"中签上传"
)
public
ResponseDto
<
Boolean
>
winningUpload
(
@RequestPart
(
value
=
"file"
)
MultipartFile
file
)
{
return
ResponseDto
.
success
(
iSweetDoudouService
.
winningUpload
(
file
));
}
}
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/service/impl/SweetDoudouServiceImpl.java
0 → 100644
View file @
d31b13fa
package
com
.
liquidnet
.
service
.
sweet
.
service
.
impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.commons.lang.util.StringUtil
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.sweet.entity.SweetDoudou
;
import
com.liquidnet.service.sweet.entity.SweetDoudouActive
;
import
com.liquidnet.service.sweet.mapper.SweetDoudouMapper
;
import
com.liquidnet.service.sweet.param.SweetDouDouCheckParam
;
import
com.liquidnet.service.sweet.param.SweetDouDouParam
;
import
com.liquidnet.service.sweet.service.ISweetDoudouService
;
import
com.liquidnet.service.sweet.utils.QueueUtils
;
import
com.liquidnet.service.sweet.utils.RedisDataUtils
;
import
com.liquidnet.service.sweet.vo.SweetDouDouActiveVo
;
import
com.liquidnet.service.sweet.vo.SweetDouDouScopeVo
;
import
com.liquidnet.service.sweet.vo.SweetDouDouVo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.ss.usermodel.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.InputStream
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* <p>
* doudou预约签名CD记录表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2025-06-04
*/
@Slf4j
@Service
public
class
SweetDoudouServiceImpl
extends
ServiceImpl
<
SweetDoudouMapper
,
SweetDoudou
>
implements
ISweetDoudouService
{
@Autowired
private
RedisDataUtils
redisDataUtils
;
@Autowired
QueueUtils
queueUtils
;
@Override
public
ResponseDto
<
SweetDouDouVo
>
info
(
String
activeId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
SweetDouDouVo
vo
=
redisDataUtils
.
getSweetDouDou
(
uid
,
activeId
);
return
ResponseDto
.
success
(
vo
);
}
@Override
public
ResponseDto
<
SweetDouDouVo
>
create
(
SweetDouDouParam
param
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
SweetDouDouVo
vo
=
redisDataUtils
.
getSweetDouDou
(
uid
,
param
.
getActiveId
());
if
(
null
!=
vo
)
{
return
ResponseDto
.
failure
(
"您已经预约过啦~"
);
}
String
nextSnowId
=
IDGenerator
.
nextSnowId
();
String
username
=
param
.
getUsername
();
String
phone
=
param
.
getPhone
();
String
activeId
=
param
.
getActiveId
();
String
imgUrl
=
param
.
getImgUrl
();
String
mark
=
param
.
getMark
();
SweetDouDouVo
entityVo
=
SweetDouDouVo
.
getNew
();
entityVo
.
setDoudouId
(
nextSnowId
);
entityVo
.
setUsername
(
username
);
entityVo
.
setPhone
(
phone
);
entityVo
.
setActiveId
(
activeId
);
entityVo
.
setImgUrl
(
imgUrl
);
entityVo
.
setMark
(
mark
);
entityVo
.
setUserId
(
uid
);
entityVo
.
setStatus
(
1
);
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"sweet_doudou.insert"
));
sqlsDataA
.
add
(
new
Object
[]{
nextSnowId
,
uid
,
username
,
phone
,
activeId
,
imgUrl
,
mark
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_ANSWER_INSERT
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
redisDataUtils
.
setSweetDouDou
(
entityVo
);
return
ResponseDto
.
success
(
entityVo
);
}
@Override
public
ResponseDto
check
(
SweetDouDouCheckParam
param
)
{
if
(!
checkScope
(
param
.
getAuthMobile
()))
{
log
.
info
(
"无权核验, authMoible: {}"
,
param
.
getAuthMobile
());
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
SweetDouDouVo
vo
=
redisDataUtils
.
getSweetDouDou
(
param
.
getUserId
(),
param
.
getActiveId
());
if
(
null
==
vo
)
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90091"
));
}
if
(!
vo
.
getDoudouId
().
equals
(
param
.
getDoudouId
()))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90095"
));
}
// 判断状态
if
(
vo
.
getStatus
().
equals
(
1
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90092"
));
}
else
if
(
vo
.
getStatus
().
equals
(
2
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90093"
));
}
else
if
(
vo
.
getStatus
().
equals
(
4
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90094"
));
}
vo
.
setStatus
(
4
);
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"sweet_doudou.update"
));
sqlsDataA
.
add
(
new
Object
[]{
vo
.
getStatus
(),
LocalDateTime
.
now
(),
vo
.
getDoudouId
()
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_ANSWER_INSERT
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
redisDataUtils
.
setSweetDouDou
(
vo
);
return
ResponseDto
.
success
();
}
@Override
public
ResponseDto
<
SweetDouDouVo
>
detail
(
SweetDouDouCheckParam
param
)
{
if
(!
checkScope
(
param
.
getAuthMobile
()))
{
log
.
info
(
"无权核验, authMoible: {}"
,
param
.
getAuthMobile
());
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
SweetDouDouVo
vo
=
redisDataUtils
.
getSweetDouDou
(
param
.
getUserId
(),
param
.
getActiveId
());
if
(
vo
==
null
)
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90091"
));
}
if
(!
vo
.
getDoudouId
().
equals
(
param
.
getDoudouId
()))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90095"
));
}
List
<
SweetDoudouActive
>
sweetDoudouActiveList
=
redisDataUtils
.
getSweetDouDouActive
();
if
(
sweetDoudouActiveList
.
isEmpty
()){
log
.
info
(
"暂无活动"
);
return
ResponseDto
.
success
(
vo
);
}
List
<
SweetDoudouActive
>
sweetDoudouActives
=
sweetDoudouActiveList
.
stream
()
.
filter
(
s
->
s
.
getActiveId
().
equals
(
param
.
getActiveId
()))
.
collect
(
Collectors
.
toList
());
if
(!
sweetDoudouActives
.
isEmpty
())
{
vo
.
setActiveTitle
(
sweetDoudouActives
.
get
(
0
).
getTitle
());
}
return
ResponseDto
.
success
(
vo
);
}
@Override
public
boolean
winningUpload
(
MultipartFile
file
)
{
List
<
SweetDouDouVo
>
fileSweetDouDouVos
=
getSweetDouDouVoListByFile
(
file
);
if
(
fileSweetDouDouVos
.
isEmpty
())
{
log
.
error
(
"文件是空的"
);
return
false
;
}
for
(
SweetDouDouVo
fileDouDouVo
:
fileSweetDouDouVos
)
{
SweetDouDouVo
vo
=
redisDataUtils
.
getSweetDouDou
(
fileDouDouVo
.
getUserId
(),
fileDouDouVo
.
getActiveId
());
if
(
vo
!=
null
)
{
vo
.
setStatus
(
fileDouDouVo
.
getStatus
());
redisDataUtils
.
setSweetDouDou
(
vo
);
log
.
info
(
"更新Redis成功"
);
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"sweet_doudou.update"
));
sqlsDataA
.
add
(
new
Object
[]{
fileDouDouVo
.
getStatus
(),
LocalDateTime
.
now
(),
vo
.
getDoudouId
()
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_ANSWER_INSERT
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
log
.
info
(
"更新MySQL消息发送成功"
);
}
}
return
true
;
}
@Override
public
ResponseDto
<
List
<
SweetDouDouActiveVo
>>
getActiveList
()
{
final
String
uid
=
CurrentUtil
.
getCurrentUid
();
if
(
StringUtil
.
isBlank
(
uid
)){
log
.
error
(
"用户未登录"
);
return
ResponseDto
.
success
();
}
// 1. 获取活动列表,并设置进行状态
List
<
SweetDoudouActive
>
sweetDoudouActiveList
=
redisDataUtils
.
getSweetDouDouActive
();
if
(
sweetDoudouActiveList
.
isEmpty
()){
log
.
info
(
"暂无活动"
);
return
ResponseDto
.
success
();
}
List
<
SweetDouDouActiveVo
>
sweetDouDouActiveVos
=
new
ArrayList
<>(
sweetDoudouActiveList
.
size
());
for
(
SweetDoudouActive
doudouActive
:
sweetDoudouActiveList
)
{
SweetDouDouActiveVo
douDouActiveVo
=
getSweetDouDouActiveVo
(
doudouActive
);
if
(
douDouActiveVo
==
null
)
continue
;
sweetDouDouActiveVos
.
add
(
douDouActiveVo
);
}
return
ResponseDto
.
success
(
sweetDouDouActiveVos
);
}
private
SweetDouDouActiveVo
getSweetDouDouActiveVo
(
SweetDoudouActive
doudouActive
)
{
// 1. 判断活动是否已经开始或结束
Integer
activeStatus
=
checkActiveStatus
(
doudouActive
.
getBeginAt
(),
doudouActive
.
getEndAt
());
if
(
activeStatus
.
equals
(
1
)){
log
.
info
(
"活动未开始, activeId: {}, title: {}."
,
doudouActive
.
getActiveId
(),
doudouActive
.
getTitle
());
return
null
;
}
SweetDouDouActiveVo
douDouActiveVo
=
SweetDouDouActiveVo
.
getNew
().
copy
(
doudouActive
);
douDouActiveVo
.
setActiveStatus
(
activeStatus
);
final
String
uid
=
CurrentUtil
.
getCurrentUid
();
if
(
StringUtil
.
isBlank
(
uid
)){
douDouActiveVo
.
setStatus
(
0
);
}
else
{
SweetDouDouVo
sweetDouDou
=
redisDataUtils
.
getSweetDouDou
(
uid
,
doudouActive
.
getActiveId
());
if
(
sweetDouDou
==
null
)
{
douDouActiveVo
.
setStatus
(
0
);
}
else
{
douDouActiveVo
.
setStatus
(
sweetDouDou
.
getStatus
());
douDouActiveVo
.
setUserId
(
sweetDouDou
.
getUserId
());
douDouActiveVo
.
setDoudouId
(
sweetDouDou
.
getDoudouId
());
}
}
return
douDouActiveVo
;
}
public
Integer
checkActiveStatus
(
String
beginAt
,
String
endAt
)
{
final
String
nowTime
=
com
.
liquidnet
.
commons
.
lang
.
util
.
DateUtil
.
getNowTime
();
if
(
null
!=
beginAt
&&
null
!=
endAt
&&
!
beginAt
.
isEmpty
()
&&
!
endAt
.
isEmpty
())
{
if
(
com
.
liquidnet
.
commons
.
lang
.
util
.
DateUtil
.
compareStrDay
(
nowTime
,
beginAt
)
<
0
)
{
// 当前时间小雨开始时间 还未开始呢
// 未开始
return
1
;
}
else
if
(
com
.
liquidnet
.
commons
.
lang
.
util
.
DateUtil
.
compareStrDay
(
endAt
,
nowTime
)
<
0
)
{
// 解释时间大于当前时间 已过期
// 已结束
return
3
;
}
else
{
// 进行中
return
2
;
}
}
return
3
;
}
@Override
public
ResponseDto
<
SweetDouDouActiveVo
>
getActiveDetail
(
String
activeId
)
{
List
<
SweetDoudouActive
>
sweetDoudouActiveList
=
redisDataUtils
.
getSweetDouDouActive
();
if
(
sweetDoudouActiveList
.
isEmpty
()){
log
.
info
(
"暂无活动"
);
return
ResponseDto
.
success
();
}
List
<
SweetDoudouActive
>
sweetDoudouActives
=
sweetDoudouActiveList
.
stream
()
.
filter
(
s
->
s
.
getActiveId
().
equals
(
activeId
))
.
collect
(
Collectors
.
toList
());
if
(
sweetDoudouActives
.
isEmpty
())
{
log
.
info
(
"暂无活动"
);
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"90096"
));
}
return
ResponseDto
.
success
(
getSweetDouDouActiveVo
(
sweetDoudouActives
.
get
(
0
)));
}
private
List
<
SweetDouDouVo
>
getSweetDouDouVoListByFile
(
MultipartFile
file
)
{
// 1. 验证文件类型
if
(!
isExcelFile
(
file
))
{
log
.
error
(
"请上传excel文件"
);
return
Collections
.
emptyList
();
}
ArrayList
<
SweetDouDouVo
>
sweetDouDouVos
=
new
ArrayList
<>();
try
(
InputStream
inputStream
=
file
.
getInputStream
();
Workbook
workbook
=
WorkbookFactory
.
create
(
inputStream
))
{
Sheet
sheet
=
workbook
.
getSheetAt
(
0
);
// 获取第一个工作表
Iterator
<
Row
>
rowIterator
=
sheet
.
iterator
();
// 跳过列名行
if
(
rowIterator
.
hasNext
())
rowIterator
.
next
();
// 2. 处理数据行
while
(
rowIterator
.
hasNext
())
{
Row
row
=
rowIterator
.
next
();
if
(
isRowEmpty
(
row
))
continue
;
// 跳过空行
SweetDouDouVo
vo
=
SweetDouDouVo
.
getNew
();
vo
.
setDoudouId
(
getStringValue
(
row
.
getCell
(
0
)));
vo
.
setUserId
(
getStringValue
(
row
.
getCell
(
1
)));
vo
.
setActiveId
(
getStringValue
(
row
.
getCell
(
2
)));
vo
.
setUsername
(
getStringValue
(
row
.
getCell
(
3
)));
vo
.
setPhone
(
getStringValue
(
row
.
getCell
(
4
)));
vo
.
setImgUrl
(
getStringValue
(
row
.
getCell
(
5
)));
String
cell7
=
getStringValue
(
row
.
getCell
(
6
));
vo
.
setStatus
(
cell7
.
equals
(
"1"
)
?
3
:
2
);
sweetDouDouVos
.
add
(
vo
);
}
return
sweetDouDouVos
;
}
catch
(
Exception
e
)
{
log
.
error
(
"error"
,
e
);
return
Collections
.
emptyList
();
}
}
// 辅助方法实现
private
boolean
isExcelFile
(
MultipartFile
file
)
{
String
fileName
=
file
.
getOriginalFilename
();
return
fileName
!=
null
&&
(
fileName
.
endsWith
(
".xls"
)
||
fileName
.
endsWith
(
".xlsx"
));
}
private
boolean
isRowEmpty
(
Row
row
)
{
for
(
int
i
=
0
;
i
<
7
;
i
++)
{
Cell
cell
=
row
.
getCell
(
i
,
Row
.
MissingCellPolicy
.
CREATE_NULL_AS_BLANK
);
if
(
cell
!=
null
&&
cell
.
getCellType
()
!=
CellType
.
BLANK
)
{
return
false
;
}
}
return
true
;
}
private
String
getStringValue
(
Cell
cell
)
{
if
(
cell
==
null
)
return
""
;
switch
(
cell
.
getCellType
())
{
case
STRING:
return
cell
.
getStringCellValue
().
trim
();
case
NUMERIC:
return
String
.
valueOf
((
int
)
cell
.
getNumericCellValue
());
case
BOOLEAN:
return
String
.
valueOf
(
cell
.
getBooleanCellValue
());
default
:
return
""
;
}
}
private
boolean
checkScope
(
String
authMobile
)
{
SweetDouDouScopeVo
sweetDouDouScopeVo
=
redisDataUtils
.
getSweetDouDouScopeVo
(
authMobile
);
return
sweetDouDouScopeVo
!=
null
;
}
}
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/utils/RedisDataUtils.java
View file @
d31b13fa
...
...
@@ -59,6 +59,11 @@ public class RedisDataUtils {
private
SweetArtistsMapper
sweetArtistsMapper
;
@Autowired
private
SweetIntegralActivityDrawMapper
sweetIntegralActivityDrawMapper
;
@Autowired
private
SweetDoudouScopeMapper
sweetDoudouScopeMapper
;
@Autowired
private
SweetDoudouActiveMapper
sweetDoudouActiveMapper
;
@Autowired
@Lazy
private
FeignSlimeApiClient
feignSlimeApiClient
;
...
...
@@ -458,6 +463,39 @@ public class RedisDataUtils {
redisUtil
.
set
(
redisKey
,
sweetAnswerVo
);
}
// doudou
public
void
setSweetDouDou
(
SweetDouDouVo
vo
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_DOUDOU_USER
.
concat
(
vo
.
getUserId
()).
concat
(
":activeId:"
+
vo
.
getActiveId
());
redisUtil
.
set
(
redisKey
,
vo
);
}
public
SweetDouDouVo
getSweetDouDou
(
String
uid
,
String
activeId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_DOUDOU_USER
.
concat
(
uid
).
concat
(
":activeId:"
+
activeId
);
return
(
SweetDouDouVo
)
redisUtil
.
get
(
redisKey
);
}
public
SweetDouDouScopeVo
getSweetDouDouScopeVo
(
String
mobile
){
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_DOUDOU_SCOPE_MOBILE
.
concat
(
mobile
);
SweetDouDouScopeVo
scopeVo
=
(
SweetDouDouScopeVo
)
redisUtil
.
get
(
redisKey
);
if
(
scopeVo
==
null
)
{
// 从MySQL查询
LambdaQueryWrapper
<
SweetDoudouScope
>
lambda
=
new
QueryWrapper
<
SweetDoudouScope
>()
.
lambda
().
eq
(
SweetDoudouScope:
:
getMobile
,
mobile
)
.
eq
(
SweetDoudouScope:
:
getStatus
,
1
);
SweetDoudouScope
scope
=
sweetDoudouScopeMapper
.
selectOne
(
lambda
);
if
(
scope
!=
null
)
{
scopeVo
=
new
SweetDouDouScopeVo
().
copy
(
scope
);
setSweetDouDouScopeVo
(
scopeVo
);
}
}
return
scopeVo
;
}
public
void
setSweetDouDouScopeVo
(
SweetDouDouScopeVo
sweetDouDouScopeVo
){
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_DOUDOU_SCOPE_MOBILE
.
concat
(
sweetDouDouScopeVo
.
getMobile
());
redisUtil
.
set
(
redisKey
,
sweetDouDouScopeVo
,
RedisKeyExpireConst
.
SWEET_DOUDOU_SCOPE_MOBILE_EXPIRE
);
}
//草莓音乐节活动海报相关
public
void
setSweetMusician
(
SweetStrawberryParam
sweetStrawberry
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_STRAWBERRY_POSTER
.
concat
(
sweetStrawberry
.
getUnionId
());
...
...
@@ -931,4 +969,27 @@ public class RedisDataUtils {
}
}
public
List
<
SweetDoudouActive
>
getSweetDouDouActive
()
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_DOUDOU_ACTIVE
;
Object
obj
=
redisUtil
.
get
(
redisKey
);
if
(
obj
==
null
)
{
LambdaQueryWrapper
<
SweetDoudouActive
>
queryWrapper
=
new
QueryWrapper
<
SweetDoudouActive
>()
.
lambda
()
.
eq
(
SweetDoudouActive:
:
getStatus
,
1
)
.
orderByDesc
(
SweetDoudouActive:
:
getSort
);
List
<
SweetDoudouActive
>
doudouActives
=
sweetDoudouActiveMapper
.
selectList
(
queryWrapper
);
if
(
doudouActives
.
isEmpty
())
{
return
Collections
.
emptyList
();
}
setSweetDouDouActive
(
doudouActives
);
return
doudouActives
;
}
else
{
return
(
List
<
SweetDoudouActive
>)
obj
;
}
}
public
void
setSweetDouDouActive
(
List
<
SweetDoudouActive
>
activeList
){
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_DOUDOU_ACTIVE
;
redisUtil
.
set
(
redisKey
,
activeList
,
RedisKeyExpireConst
.
SWEET_DOUDOU_ACTIVE_EXPIRE
);
}
}
liquidnet-bus-service/liquidnet-service-sweet/src/main/resources/errors.properties
View file @
d31b13fa
40001
=
登录信息有误
40002
=
账号已在另一台设备登录
40003
=
登录已过期
# 特殊状态码
90081
=
获取用户信息失败
90082
=
您的积分账户余额不足!
20003
=
\u
65E0
\u6743\u6838\u
9A8C
40001
=
\u
767B
\u
5F55
\u
4FE1
\u
606F
\u6709\u
8BEF
40002
=
\u
8D26
\u
53F7
\u
5DF2
\u5728\u
53E6
\u
4E00
\u
53F0
\u
8BBE
\u5907\u
767B
\u
5F55
40003
=
\u
767B
\u
5F55
\u
5DF2
\u
8FC7
\u
671F
# \u7279\u6B8A\u72B6\u6001\u7801
90081
=
\u
83B7
\u
53D6
\u7528\u6237\u
4FE1
\u
606F
\u5931\u
8D25
90082
=
\u
60A8
\u7684\u
79EF
\u5206\u
8D26
\u6237\u
4F59
\u
989D
\u
4E0D
\u
8DB3
\u
FF01
90091
=
\u
672A
\u
67E5
\u
8BE2
\u5230\u9884\u
7EA6
\u
8BB0
\u
5F55
90092
=
\u
672A
\u5230\u
89E3
\u9501\u
65F6
\u
95F4
90093
=
\u
60A8
\u
672A
\u
4E2D
\u
7B7E
90094
=
\u
5DF2
\u
88AB
\u6838\u9500
90095
=
\u
4E8C
\u
7EF4
\u7801\u
65E0
\u6548
90096
=
\u
672A
\u
67E5
\u
8BE2
\u5230\u
8BE5
\u
6D3B
\u
52A8
liquidnet-bus-service/liquidnet-service-sweet/src/main/resources/sqlmap.properties
View file @
d31b13fa
kylin_order_ticket_entities.updateStatusByStation
=
UPDATE kylin_order_ticket_entities SET `status`=?,check_client=?,updated_at=? WHERE order_ticket_entities_id=? # ------------------------缺票登记(不用考虑并发)---------------------------- kylin_lack_register.insert=INSERT INTO `kylin_lack_registers`(`lack_registers_id` ,`performance_id` ,`ticket_id` ,`user_id` ,`user_name` ,`user_mobile` ,`send_status` ,`ip_address` ,`created_at`)VALUES(? ,? ,? ,? ,? ,? ,? ,? ,?); # ------------------------支付回调---------------------------- kylin_order_ticket.synPay=UPDATE kylin_order_tickets SET payment_type = ? ,pay_code = ? , time_pay = ?, qr_code = ? , updated_at = ? WHERE order_tickets_id = ? and (updated_at <= ? or created_at = ?) kylin_order_ticket_status.synPay=UPDATE kylin_order_ticket_status SET `status` = ?,pay_status = ?,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?) kylin_order_ticket_relation.synPay=UPDATE kylin_order_ticket_relations SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?) kylin_order_ticket_entities.synPay=UPDATE kylin_order_ticket_entities SET is_payment = ?,updated_at = ?,sys_damai = 1 WHERE order_id = ? and (updated_at <= ? or created_at = ?) # ------------------------用户关系---------------------------- sweet_user_relation.insert=INSERT INTO sweet_user_relation (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?) sweet_user_relation.delete=DELETE FROM sweet_user_relation WHERE user_id = ? and target_id = ? and manual_id = ? and type = ? sweet_user_relation_mdsk.insert=INSERT INTO sweet_user_relation_mdsk (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?) sweet_user_relation_mdsk.delete=DELETE FROM sweet_user_relation_mdsk WHERE user_id = ? and target_id = ? and manual_id = ? and type = ? sweet_user_relation_five.insert=INSERT INTO sweet_user_relation_five (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?) sweet_user_relation_five.delete=DELETE FROM sweet_user_relation_five WHERE user_id = ? and target_id = ? and manual_id = ? and type = ? # ------------------------抽奖---------------------------- sweet_luck_draw.insert=INSERT INTO sweet_luck_draw (mobile,union_id,luck_draw_num,prize,prize_all,status,created_at) VALUES (?,?,?,?,?,1,?) # --------------------------答案-------------------------- sweet_answer.insert=INSERT INTO sweet_answer (answer_id,phone,answer_json,img_url) VALUES (?,?,?,?) # --------------------------提醒记录-------------------------- sweet_remind.insert=INSERT INTO sweet_remind (remind_id,openId,unionId,performancesId) VALUES (?,?,?,?) sweet_applet_sub_msg.insert=INSERT INTO sweet_applet_sub_msg (msg_id,open_id,union_id,user_id,template_id,target_id,applet_type,activity_type) VALUES (?,?,?,?,?,?,?,?) # --------------------------用户投票记录-------------------------- sweet_city_vote.insert=INSERT INTO sweet_city_vote (vote_id,phone,openId,unionId,type,city_code,city_name,day_time) VALUES (?,?,?,?,?,?,?,?) sweet_city_vote_stat.insert=INSERT INTO sweet_city_vote_stat (stat_id,city_code,city_name,vote_num,type) VALUES (?,?,?,?,?) sweet_city_vote_stat.update=UPDATE sweet_city_vote_stat SET vote_num = IFNULL(vote_num, 0) + 1, updated_at = ? WHERE city_code = ? AND type = ? # --------------------------防疫答题-------------------------- sweet_antigenic_question.insert=INSERT INTO sweet_antigenic_question (question_id,type,openId,unionId,nickname,address,phone,urgent_phone,keyword1,keyword11,keyword2,keyword3,keyword4,keyword5,keyword6,keyword7) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) # ------------------------积分抽奖---------------------------- sweet_integral_activity_draw.insert=INSERT INTO sweet_integral_activity_draw (draw_id,integral_activity_id,activity_num,prize_id,prize_title,prize_type,prize_type_num,user_id,nickname,receiving_status) VALUES (?,?,?,?,?,?,?,?,?,?) sweet_integral_activity_draw.update=UPDATE sweet_integral_activity_draw SET receiving_addresses_id = ?, receiving_name = ?, receiving_phone = ?, receiving_address = ?, receiving_province = ?, receiving_city = ?, receiving_county = ?, updated_at = ? WHERE draw_id = ? sweet_integral_activity_draw.updateStatus=UPDATE sweet_integral_activity_draw SET receiving_status = ?, relation_id = ?, updated_at = ? WHERE draw_id = ? sweet_integral_activity_draw.get_coupon=INSERT INTO candy_mgt_coupon (mcoupon_id, coupon_id, `state`, event_amt, event_type, event_limit, event_at, `operator`, created_at) VALUES (?, ?, 0, ?, 2, ?, ?, ?, ?) # --------------------------小程序登录记录用户解密后信息-------------------------- sweet_applet_users.insert=INSERT INTO sweet_applet_users (applet_user_id,user_id,open_id,union_id,phone_number,pure_phone_number,country_code,type) VALUES (?,?,?,?,?,?,?,?) # --------------------------微信用户信息表公众号-------------------------- sweet_wechat_users.insert=INSERT INTO sweet_wechat_users (wechat_user_id,type,open_id,union_id,nickname,sex_desc,sex,head_img_url,language,country,province,city,subscribe_time,subscribe_scene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) sweet_wechat_users.delete=DELETE FROM sweet_wechat_users WHERE union_id = ? and type = ? sweet_wechat_users.update=UPDATE sweet_wechat_users SET is_cancel = ?, updated_at = ? WHERE union_id = ? AND type = ? AND is_cancel = 1 #---------------------------音乐节活动海报-------------------------------- sweet_strawberry_poster_user=INSERT INTO sweet_strawberry_poster(open_id,poster_id,union_id,nickname,city_name,city_code,custom_text,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?) sweet_strawberry_poster_Musician=INSERT INTO sweet_strawberry_poster_lineup(lineup_id,poster_id,lineup_num,musician_name,created_at,updated_at) VALUES (?,?,?,?,?,?) #---------------------------猫登天空-------------------------------- sweet_wechat_maodeng.insert=INSERT INTO sweet_wechat_maodeng(mao_id,user_id,text_msg,pic_url,img_url,created_at) VALUES (?,?,?,?,?,?) sweet_wechat_maodeng.text.update=UPDATE sweet_wechat_maodeng SET text_msg=? WHERE user_id=? AND mao_id=? sweet_wechat_maodeng.img.update=UPDATE sweet_wechat_maodeng SET img_url=? WHERE user_id=? AND mao_id=? # --------------------------数字藏品预约活动-------------------------- sweet_collection_reservation.insert=INSERT INTO sweet_collection_reservation (reservation_id,nickname,mobile,mailbox,enterprise_name,title,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?) # --------------------------YB??-------------------------- sweet_yb_enroll.insert=INSERT INTO sweet_yb_enroll (enroll_id,contact_tell,contact_wechat,nickname,style,img_url,audio_url,universities,city_name,activity_id,age) VALUES (?,?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
kylin_order_ticket_entities.updateStatusByStation
=
UPDATE kylin_order_ticket_entities SET `status`=?,check_client=?,updated_at=? WHERE order_ticket_entities_id=? # ------------------------
\u
7F3A
\u7968\u
767B
\u
8BB0(
\u
4E0D
\u7528\u8003\u8651\u
5E76
\u
53D1)---------------------------- kylin_lack_register.insert=INSERT INTO `kylin_lack_registers`(`lack_registers_id` ,`performance_id` ,`ticket_id` ,`user_id` ,`user_name` ,`user_mobile` ,`send_status` ,`ip_address` ,`created_at`)VALUES(? ,? ,? ,? ,? ,? ,? ,? ,?); # ------------------------
\u
652F
\u
4ED8
\u
56DE
\u
8C03---------------------------- kylin_order_ticket.synPay=UPDATE kylin_order_tickets SET payment_type = ? ,pay_code = ? , time_pay = ?, qr_code = ? , updated_at = ? WHERE order_tickets_id = ? and (updated_at <= ? or created_at = ?) kylin_order_ticket_status.synPay=UPDATE kylin_order_ticket_status SET `status` = ?,pay_status = ?,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?) kylin_order_ticket_relation.synPay=UPDATE kylin_order_ticket_relations SET updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?) kylin_order_ticket_entities.synPay=UPDATE kylin_order_ticket_entities SET is_payment = ?,updated_at = ?,sys_damai = 1 WHERE order_id = ? and (updated_at <= ? or created_at = ?) # ------------------------
\u7528\u6237\u5173\u
7CFB---------------------------- sweet_user_relation.insert=INSERT INTO sweet_user_relation (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?) sweet_user_relation.delete=DELETE FROM sweet_user_relation WHERE user_id = ? and target_id = ? and manual_id = ? and type = ? sweet_user_relation_mdsk.insert=INSERT INTO sweet_user_relation_mdsk (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?) sweet_user_relation_mdsk.delete=DELETE FROM sweet_user_relation_mdsk WHERE user_id = ? and target_id = ? and manual_id = ? and type = ? sweet_user_relation_five.insert=INSERT INTO sweet_user_relation_five (user_id,type,target_id,manual_id,status,created_at) VALUES (?,?,?,?,1,?) sweet_user_relation_five.delete=DELETE FROM sweet_user_relation_five WHERE user_id = ? and target_id = ? and manual_id = ? and type = ? # ------------------------
\u
62BD
\u5956
---------------------------- sweet_luck_draw.insert=INSERT INTO sweet_luck_draw (mobile,union_id,luck_draw_num,prize,prize_all,status,created_at) VALUES (?,?,?,?,?,1,?) # --------------------------
\u
7B54
\u6848
-------------------------- sweet_answer.insert=INSERT INTO sweet_answer (answer_id,phone,answer_json,img_url) VALUES (?,?,?,?) sweet_doudou.insert=INSERT INTO sweet_doudou (doudou_id,user_id,username,phone,active_id,img_url,mark) VALUES (?,?,?,?,?,?,?) sweet_doudou.update=UPDATE sweet_doudou SET STATUS = ?, updated_at = ? WHERE doudou_id = ? # --------------------------
\u
63D0
\u9192\u
8BB0
\u
5F55-------------------------- sweet_remind.insert=INSERT INTO sweet_remind (remind_id,openId,unionId,performancesId) VALUES (?,?,?,?) sweet_applet_sub_msg.insert=INSERT INTO sweet_applet_sub_msg (msg_id,open_id,union_id,user_id,template_id,target_id,applet_type,activity_type) VALUES (?,?,?,?,?,?,?,?) # --------------------------
\u7528\u6237\u6295\u7968\u
8BB0
\u
5F55-------------------------- sweet_city_vote.insert=INSERT INTO sweet_city_vote (vote_id,phone,openId,unionId,type,city_code,city_name,day_time) VALUES (?,?,?,?,?,?,?,?) sweet_city_vote_stat.insert=INSERT INTO sweet_city_vote_stat (stat_id,city_code,city_name,vote_num,type) VALUES (?,?,?,?,?) sweet_city_vote_stat.update=UPDATE sweet_city_vote_stat SET vote_num = IFNULL(vote_num, 0) + 1, updated_at = ? WHERE city_code = ? AND type = ? # --------------------------
\u9632\u
75AB
\u
7B54
\u9898
-------------------------- sweet_antigenic_question.insert=INSERT INTO sweet_antigenic_question (question_id,type,openId,unionId,nickname,address,phone,urgent_phone,keyword1,keyword11,keyword2,keyword3,keyword4,keyword5,keyword6,keyword7) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) # ------------------------
\u
79EF
\u5206\u
62BD
\u5956
---------------------------- sweet_integral_activity_draw.insert=INSERT INTO sweet_integral_activity_draw (draw_id,integral_activity_id,activity_num,prize_id,prize_title,prize_type,prize_type_num,user_id,nickname,receiving_status) VALUES (?,?,?,?,?,?,?,?,?,?) sweet_integral_activity_draw.update=UPDATE sweet_integral_activity_draw SET receiving_addresses_id = ?, receiving_name = ?, receiving_phone = ?, receiving_address = ?, receiving_province = ?, receiving_city = ?, receiving_county = ?, updated_at = ? WHERE draw_id = ? sweet_integral_activity_draw.updateStatus=UPDATE sweet_integral_activity_draw SET receiving_status = ?, relation_id = ?, updated_at = ? WHERE draw_id = ? sweet_integral_activity_draw.get_coupon=INSERT INTO candy_mgt_coupon (mcoupon_id, coupon_id, `state`, event_amt, event_type, event_limit, event_at, `operator`, created_at) VALUES (?, ?, 0, ?, 2, ?, ?, ?, ?) # --------------------------
\u
5C0F
\u
7A0B
\u
5E8F
\u
767B
\u
5F55
\u
8BB0
\u
5F55
\u7528\u6237\u
89E3
\u
5BC6
\u
540E
\u
4FE1
\u
606F-------------------------- sweet_applet_users.insert=INSERT INTO sweet_applet_users (applet_user_id,user_id,open_id,union_id,phone_number,pure_phone_number,country_code,type) VALUES (?,?,?,?,?,?,?,?) # --------------------------
\u
5FAE
\u
4FE1
\u7528\u6237\u
4FE1
\u
606F
\u8868\u
516C
\u
4F17
\u
53F7-------------------------- sweet_wechat_users.insert=INSERT INTO sweet_wechat_users (wechat_user_id,type,open_id,union_id,nickname,sex_desc,sex,head_img_url,language,country,province,city,subscribe_time,subscribe_scene) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) sweet_wechat_users.delete=DELETE FROM sweet_wechat_users WHERE union_id = ? and type = ? sweet_wechat_users.update=UPDATE sweet_wechat_users SET is_cancel = ?, updated_at = ? WHERE union_id = ? AND type = ? AND is_cancel = 1 #---------------------------
\u
97F3
\u
4E50
\u8282\u
6D3B
\u
52A8
\u
6D77
\u
62A5-------------------------------- sweet_strawberry_poster_user=INSERT INTO sweet_strawberry_poster(open_id,poster_id,union_id,nickname,city_name,city_code,custom_text,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?) sweet_strawberry_poster_Musician=INSERT INTO sweet_strawberry_poster_lineup(lineup_id,poster_id,lineup_num,musician_name,created_at,updated_at) VALUES (?,?,?,?,?,?) #---------------------------
\u
732B
\u
767B
\u5929\u
7A7A-------------------------------- sweet_wechat_maodeng.insert=INSERT INTO sweet_wechat_maodeng(mao_id,user_id,text_msg,pic_url,img_url,created_at) VALUES (?,?,?,?,?,?) sweet_wechat_maodeng.text.update=UPDATE sweet_wechat_maodeng SET text_msg=? WHERE user_id=? AND mao_id=? sweet_wechat_maodeng.img.update=UPDATE sweet_wechat_maodeng SET img_url=? WHERE user_id=? AND mao_id=? # --------------------------
\u6570\u
5B57
\u
85CF
\u
54C1
\u9884\u
7EA6
\u
6D3B
\u
52A8-------------------------- sweet_collection_reservation.insert=INSERT INTO sweet_collection_reservation (reservation_id,nickname,mobile,mailbox,enterprise_name,title,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?) # --------------------------YB??-------------------------- sweet_yb_enroll.insert=INSERT INTO sweet_yb_enroll (enroll_id,contact_tell,contact_wechat,nickname,style,img_url,audio_url,universities,city_name,activity_id,age) VALUES (?,?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
...
...
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