Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gxpt_ht
Overview
Overview
Details
Activity
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
pseer
gxpt_ht
Commits
56eade07
Commit
56eade07
authored
Oct 11, 2024
by
吕明尚
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' into test
parents
6b86b2dd
5bbff7b3
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
311 additions
and
223 deletions
+311
-223
pom.xml
share-common/pom.xml
+2
-0
RedisLockUtil.java
...ommon/src/main/java/share/common/utils/RedisLockUtil.java
+75
-0
QPServiceImpl.java
...rc/main/java/share/system/service/impl/QPServiceImpl.java
+107
-99
SOrderServiceImpl.java
...ain/java/share/system/service/impl/SOrderServiceImpl.java
+8
-4
TiktokServiceImpl.java
...ain/java/share/system/service/impl/TiktokServiceImpl.java
+119
-111
share.iml
share.iml
+0
-9
No files found.
share-common/pom.xml
View file @
56eade07
...
...
@@ -176,6 +176,7 @@
<artifactId>
xstream
</artifactId>
<version>
1.4.9
</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
share-common/src/main/java/share/common/utils/RedisLockUtil.java
0 → 100644
View file @
56eade07
package
share
.
common
.
utils
;
import
org.springframework.data.redis.core.RedisCallback
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.util.Objects
;
/**
* @ClassName RedisLockUtil
* @Description 使用redis做锁
* @Author Wangyujie
* @Version V1.1.0
*/
@Component
public
class
RedisLockUtil
{
@Resource
RedisTemplate
<
String
,
Object
>
redisTemplate
;
/**
* 获取锁Key
*
* @param prefix 前缀
* @param name 名称
* @return
*/
public
static
String
getFullKey
(
String
prefix
,
String
name
)
{
return
prefix
+
"_"
+
name
;
}
/**
* 获取锁,true 则得到锁,false 已被锁定
*
* @param lockName 锁名称
* @param lockExoire 锁时间毫秒
* @return
*/
public
Boolean
getLock
(
String
lockName
,
Integer
lockExoire
)
{
return
(
Boolean
)
redisTemplate
.
execute
((
RedisCallback
<?>)
connection
->
{
// 获取时间毫秒值
long
expireAt
=
System
.
currentTimeMillis
()
+
lockExoire
+
1
;
// 获取锁
Boolean
acquire
=
connection
.
setNX
(
lockName
.
getBytes
(),
String
.
valueOf
(
expireAt
).
getBytes
());
if
(
acquire
)
{
return
true
;
}
else
{
byte
[]
bytes
=
connection
.
get
(
lockName
.
getBytes
());
// 非空判断
if
(
Objects
.
nonNull
(
bytes
)
&&
bytes
.
length
>
0
)
{
long
expireTime
=
Long
.
parseLong
(
new
String
(
bytes
));
// 如果锁已经过期
if
(
expireTime
<
System
.
currentTimeMillis
())
{
// 重新加锁,防止死锁
byte
[]
set
=
connection
.
getSet
(
lockName
.
getBytes
(),
String
.
valueOf
(
System
.
currentTimeMillis
()
+
lockExoire
+
1
).
getBytes
());
return
Long
.
parseLong
(
new
String
(
set
))
<
System
.
currentTimeMillis
();
}
}
}
return
false
;
});
}
/**
* 删除锁
*
* @param lockName
*/
public
void
delLock
(
String
lockName
)
{
redisTemplate
.
delete
(
lockName
);
}
}
share-system/src/main/java/share/system/service/impl/QPServiceImpl.java
View file @
56eade07
...
...
@@ -32,6 +32,7 @@ import share.common.core.redis.RedisUtil;
import
share.common.enums.*
;
import
share.common.exception.base.BaseException
;
import
share.common.utils.DateUtils
;
import
share.common.utils.RedisLockUtil
;
import
share.system.domain.SConsumer
;
import
share.system.domain.SConsumerCoupon
;
import
share.system.domain.SCoupon
;
...
...
@@ -77,6 +78,9 @@ public class QPServiceImpl implements QPService {
private
RedisUtil
redisUtil
;
@Autowired
private
RedisLockUtil
redisLockUtil
;
@Autowired
private
ISStoreService
storeService
;
//默认门槛时长
...
...
@@ -106,108 +110,112 @@ public class QPServiceImpl implements QPService {
if
(
ObjectUtil
.
isNull
(
user
))
{
throw
new
BaseException
(
"您的登录已过期,请先登录"
);
}
LambdaQueryWrapper
<
SStore
>
sStoreLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
sStoreLambdaQueryWrapper
.
eq
(
SStore:
:
getId
,
storeId
);
SStore
sStore
=
storeService
.
getOne
(
sStoreLambdaQueryWrapper
);
if
(
ObjectUtils
.
isEmpty
(
sStore
)
||
StoreStatusEnum
.
STOP
.
getIndex
().
equals
(
sStore
.
getStatus
()))
{
throw
new
Exception
(
"门店维护中,请联系客服"
);
}
if
(
StringUtils
.
isEmpty
(
sStore
.
getOpenShopUuid
()))
{
throw
new
Exception
(
"门店未授权,请联系客服"
);
}
//验券准备
TuangouReceiptPrepareResponseEntity
prepare
=
prepare
(
code
.
trim
(),
sStore
.
getOpenShopUuid
(),
status
);
//查询领取记录表
LambdaQueryWrapper
<
SConsumerCoupon
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
SConsumerCoupon:
:
getCouponCode
,
code
);
queryWrapper
.
eq
(
SConsumerCoupon:
:
getUseStatus
,
UserStatusEnum
.
UNUSED
.
getCode
());
queryWrapper
.
eq
(
SConsumerCoupon:
:
getIsDelete
,
YesNoEnum
.
no
.
getIndex
());
SConsumerCoupon
unUsedCoupon
=
isConsumerCouponService
.
getOne
(
queryWrapper
);
if
(
ObjectUtils
.
isNotEmpty
(
unUsedCoupon
))
{
throw
new
Exception
(
"该券码已被使用"
);
}
//根据优惠卷名称查询优惠劵配置 查询list,取第一个
SConsumerCoupon
sConsumerCoupon
=
new
SConsumerCoupon
();
sConsumerCoupon
.
setConsumerId
(
user
.
getId
());
sConsumerCoupon
.
setDealId
(
prepare
.
getDeal_id
());
sConsumerCoupon
.
setStoreId
(
sStore
.
getId
());
sConsumerCoupon
.
setCouponCode
(
code
);
sConsumerCoupon
.
setName
(
prepare
.
getDeal_title
());
sConsumerCoupon
.
setSourceType
(
SourceTypeEnum
.
CHECK
.
getCode
());
sConsumerCoupon
.
setPlatformType
(
PlatformTypeEnum
.
MEITUAN
.
getCode
());
sConsumerCoupon
.
setUseStatus
(
UserStatusEnum
.
UNUSED
.
getCode
());
sConsumerCoupon
.
setCreateBy
(
String
.
valueOf
(
user
.
getId
()));
sConsumerCoupon
.
setCreateTime
(
new
Date
());
sConsumerCoupon
.
setOriginalPrice
(
BigDecimal
.
valueOf
(
prepare
.
getDeal_marketprice
()));
Stream
<
TuangouReceiptPreparePaymentDetail
>
tuangouReceiptPreparePaymentDetailStream
=
prepare
.
getPayment_detail
().
stream
().
filter
(
o
->
o
.
getAmount_type
().
equals
(
10L
)
||
o
.
getAmount_type
().
equals
(
23L
)
||
o
.
getAmount_type
().
equals
(
25L
)
||
o
.
getAmount_type
().
equals
(
26L
)
||
o
.
getAmount_type
().
equals
(
29L
));
BigDecimal
couponPayPrice
=
tuangouReceiptPreparePaymentDetailStream
.
map
(
o
->
o
.
getAmount
()).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
sConsumerCoupon
.
setCouponPayPrice
(
couponPayPrice
);
//查询美团团购信息
List
<
TuangouDealQueryShopDealResponseEntity
>
groupActivities
=
queryshopdeal
(
sStore
.
getOpenShopUuid
());
groupActivities
.
forEach
(
o
->
{
//套餐名称相同并且在售卖中
if
(
prepare
.
getDealgroup_id
().
equals
(
o
.
getDealgroup_id
()))
{
Date
receiptEndDate
=
DateUtil
.
parse
(
o
.
getReceipt_end_date
(),
DatePattern
.
NORM_DATETIME_MINUTE_PATTERN
);
Date
receiptBeginDate
=
DateUtil
.
parse
(
o
.
getReceipt_begin_date
(),
DatePattern
.
NORM_DATETIME_MINUTE_PATTERN
);
sConsumerCoupon
.
setStartDate
(
receiptBeginDate
);
sConsumerCoupon
.
setEndDate
(
receiptEndDate
);
Boolean
lock
=
redisLockUtil
.
getLock
(
String
.
valueOf
(
user
.
getId
()),
1000
);
if
(
lock
)
{
LambdaQueryWrapper
<
SStore
>
sStoreLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
sStoreLambdaQueryWrapper
.
eq
(
SStore:
:
getId
,
storeId
);
SStore
sStore
=
storeService
.
getOne
(
sStoreLambdaQueryWrapper
);
if
(
ObjectUtils
.
isEmpty
(
sStore
)
||
StoreStatusEnum
.
STOP
.
getIndex
().
equals
(
sStore
.
getStatus
()))
{
throw
new
Exception
(
"门店维护中,请联系客服"
);
}
});
if
(
ObjectUtils
.
isEmpty
(
sConsumerCoupon
.
getStartDate
()))
{
//获取本日的00:00:00
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
Date
startOfDay
=
calendar
.
getTime
();
sConsumerCoupon
.
setStartDate
(
startOfDay
);
}
if
(
ObjectUtils
.
isEmpty
(
sConsumerCoupon
.
getEndDate
()))
{
//当前时间加上一年
sConsumerCoupon
.
setEndDate
(
DateUtils
.
addYears
(
new
Date
(),
1
));
}
List
<
SCoupon
>
sCoupons
=
isCouponService
.
selectSCouponByDealgroupId
(
prepare
.
getDealgroup_id
());
SCoupon
sCoupon
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
sCoupons
))
{
sCoupon
=
sCoupons
.
get
(
0
);
}
if
(
ObjectUtils
.
isEmpty
(
sCoupon
))
{
sConsumerCoupon
.
setDealgroupId
(
prepare
.
getDealgroup_id
());
sConsumerCoupon
.
setCouponType
(
CouponTypeEnum
.
CASH
.
getCode
());
sConsumerCoupon
.
setStoreType
(
StoreType
.
getCodeList
());
sConsumerCoupon
.
setRoomType
(
RoomType
.
getCodeList
());
if
(
StringUtils
.
isEmpty
(
sStore
.
getOpenShopUuid
()))
{
throw
new
Exception
(
"门店未授权,请联系客服"
);
}
//查询领取记录表
LambdaQueryWrapper
<
SConsumerCoupon
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
SConsumerCoupon:
:
getCouponCode
,
code
);
queryWrapper
.
eq
(
SConsumerCoupon:
:
getUseStatus
,
UserStatusEnum
.
UNUSED
.
getCode
());
queryWrapper
.
eq
(
SConsumerCoupon:
:
getIsDelete
,
YesNoEnum
.
no
.
getIndex
());
SConsumerCoupon
unUsedCoupon
=
isConsumerCouponService
.
getOne
(
queryWrapper
);
if
(
ObjectUtils
.
isNotEmpty
(
unUsedCoupon
))
{
throw
new
Exception
(
"该券码已被使用"
);
}
//验券准备
TuangouReceiptPrepareResponseEntity
prepare
=
prepare
(
code
.
trim
(),
sStore
.
getOpenShopUuid
(),
status
);
//根据优惠卷名称查询优惠劵配置 查询list,取第一个
SConsumerCoupon
sConsumerCoupon
=
new
SConsumerCoupon
();
sConsumerCoupon
.
setConsumerId
(
user
.
getId
());
sConsumerCoupon
.
setDealId
(
prepare
.
getDeal_id
());
sConsumerCoupon
.
setStoreId
(
sStore
.
getId
());
sConsumerCoupon
.
setCouponCode
(
code
);
sConsumerCoupon
.
setName
(
prepare
.
getDeal_title
());
sConsumerCoupon
.
setSourceType
(
SourceTypeEnum
.
CHECK
.
getCode
());
sConsumerCoupon
.
setPlatformType
(
PlatformTypeEnum
.
MEITUAN
.
getCode
());
sConsumerCoupon
.
setUseStatus
(
UserStatusEnum
.
UNUSED
.
getCode
());
sConsumerCoupon
.
setCreateBy
(
String
.
valueOf
(
user
.
getId
()));
sConsumerCoupon
.
setMinDuration
(
DEFAULT_MIN_DURATION
);
sConsumerCoupon
.
setMaxDuration
(
DEFAULT_MAX_DURATION
);
sConsumerCoupon
.
setDuration
(
DEFAULT_DURATION
);
sConsumerCoupon
.
setMinPrice
(
DEFAULT_MIN_PRICE
);
sConsumerCoupon
.
setCouponTimeStart
(
DEFAULT_START_TIME
);
sConsumerCoupon
.
setCouponTimeEnd
(
DEFAULT_END_TIME
);
sConsumerCoupon
.
setSalePrice
(
sConsumerCoupon
.
getCouponPayPrice
());
}
else
{
sConsumerCoupon
.
setCouponId
(
sCoupon
.
getId
());
sConsumerCoupon
.
setCouponType
(
sCoupon
.
getCouponType
());
sConsumerCoupon
.
setStoreType
(
sCoupon
.
getStoreType
());
sConsumerCoupon
.
setRoomType
(
sCoupon
.
getRoomType
());
sConsumerCoupon
.
setMinDuration
(
sCoupon
.
getMinDuration
());
sConsumerCoupon
.
setMaxDuration
(
sCoupon
.
getMaxDuration
());
sConsumerCoupon
.
setDuration
(
sCoupon
.
getDuration
());
sConsumerCoupon
.
setMinPrice
(
sCoupon
.
getMinPrice
());
sConsumerCoupon
.
setCouponTimeStart
(
sCoupon
.
getValidStartTime
());
sConsumerCoupon
.
setCouponTimeEnd
(
sCoupon
.
getValidEndTime
());
sConsumerCoupon
.
setOrderType
(
sCoupon
.
getOrderType
());
sConsumerCoupon
.
setDealgroupId
(
sCoupon
.
getDealgroupId
());
sConsumerCoupon
.
setStoreIds
(
sCoupon
.
getStoreIds
());
sConsumerCoupon
.
setPackIds
(
sCoupon
.
getPackIds
());
sConsumerCoupon
.
setWeeks
(
sCoupon
.
getWeeks
());
sConsumerCoupon
.
setRemark
(
sCoupon
.
getRemark
());
sConsumerCoupon
.
setSalePrice
(
sCoupon
.
getSalePrice
());
sConsumerCoupon
.
setCreateTime
(
new
Date
());
sConsumerCoupon
.
setOriginalPrice
(
BigDecimal
.
valueOf
(
prepare
.
getDeal_marketprice
()));
Stream
<
TuangouReceiptPreparePaymentDetail
>
tuangouReceiptPreparePaymentDetailStream
=
prepare
.
getPayment_detail
().
stream
().
filter
(
o
->
o
.
getAmount_type
().
equals
(
10L
)
||
o
.
getAmount_type
().
equals
(
23L
)
||
o
.
getAmount_type
().
equals
(
25L
)
||
o
.
getAmount_type
().
equals
(
26L
)
||
o
.
getAmount_type
().
equals
(
29L
));
BigDecimal
couponPayPrice
=
tuangouReceiptPreparePaymentDetailStream
.
map
(
o
->
o
.
getAmount
()).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
sConsumerCoupon
.
setCouponPayPrice
(
couponPayPrice
);
//查询美团团购信息
List
<
TuangouDealQueryShopDealResponseEntity
>
groupActivities
=
queryshopdeal
(
sStore
.
getOpenShopUuid
());
groupActivities
.
forEach
(
o
->
{
//套餐名称相同并且在售卖中
if
(
prepare
.
getDealgroup_id
().
equals
(
o
.
getDealgroup_id
()))
{
Date
receiptEndDate
=
DateUtil
.
parse
(
o
.
getReceipt_end_date
(),
DatePattern
.
NORM_DATETIME_MINUTE_PATTERN
);
Date
receiptBeginDate
=
DateUtil
.
parse
(
o
.
getReceipt_begin_date
(),
DatePattern
.
NORM_DATETIME_MINUTE_PATTERN
);
sConsumerCoupon
.
setStartDate
(
receiptBeginDate
);
sConsumerCoupon
.
setEndDate
(
receiptEndDate
);
}
});
if
(
ObjectUtils
.
isEmpty
(
sConsumerCoupon
.
getStartDate
()))
{
//获取本日的00:00:00
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
Date
startOfDay
=
calendar
.
getTime
();
sConsumerCoupon
.
setStartDate
(
startOfDay
);
}
if
(
ObjectUtils
.
isEmpty
(
sConsumerCoupon
.
getEndDate
()))
{
//当前时间加上一年
sConsumerCoupon
.
setEndDate
(
DateUtils
.
addYears
(
new
Date
(),
1
));
}
List
<
SCoupon
>
sCoupons
=
isCouponService
.
selectSCouponByDealgroupId
(
prepare
.
getDealgroup_id
());
SCoupon
sCoupon
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
sCoupons
))
{
sCoupon
=
sCoupons
.
get
(
0
);
}
if
(
ObjectUtils
.
isEmpty
(
sCoupon
))
{
sConsumerCoupon
.
setDealgroupId
(
prepare
.
getDealgroup_id
());
sConsumerCoupon
.
setCouponType
(
CouponTypeEnum
.
CASH
.
getCode
());
sConsumerCoupon
.
setStoreType
(
StoreType
.
getCodeList
());
sConsumerCoupon
.
setRoomType
(
RoomType
.
getCodeList
());
sConsumerCoupon
.
setCreateBy
(
String
.
valueOf
(
user
.
getId
()));
sConsumerCoupon
.
setMinDuration
(
DEFAULT_MIN_DURATION
);
sConsumerCoupon
.
setMaxDuration
(
DEFAULT_MAX_DURATION
);
sConsumerCoupon
.
setDuration
(
DEFAULT_DURATION
);
sConsumerCoupon
.
setMinPrice
(
DEFAULT_MIN_PRICE
);
sConsumerCoupon
.
setCouponTimeStart
(
DEFAULT_START_TIME
);
sConsumerCoupon
.
setCouponTimeEnd
(
DEFAULT_END_TIME
);
sConsumerCoupon
.
setSalePrice
(
sConsumerCoupon
.
getCouponPayPrice
());
}
else
{
sConsumerCoupon
.
setCouponId
(
sCoupon
.
getId
());
sConsumerCoupon
.
setCouponType
(
sCoupon
.
getCouponType
());
sConsumerCoupon
.
setStoreType
(
sCoupon
.
getStoreType
());
sConsumerCoupon
.
setRoomType
(
sCoupon
.
getRoomType
());
sConsumerCoupon
.
setMinDuration
(
sCoupon
.
getMinDuration
());
sConsumerCoupon
.
setMaxDuration
(
sCoupon
.
getMaxDuration
());
sConsumerCoupon
.
setDuration
(
sCoupon
.
getDuration
());
sConsumerCoupon
.
setMinPrice
(
sCoupon
.
getMinPrice
());
sConsumerCoupon
.
setCouponTimeStart
(
sCoupon
.
getValidStartTime
());
sConsumerCoupon
.
setCouponTimeEnd
(
sCoupon
.
getValidEndTime
());
sConsumerCoupon
.
setOrderType
(
sCoupon
.
getOrderType
());
sConsumerCoupon
.
setDealgroupId
(
sCoupon
.
getDealgroupId
());
sConsumerCoupon
.
setStoreIds
(
sCoupon
.
getStoreIds
());
sConsumerCoupon
.
setPackIds
(
sCoupon
.
getPackIds
());
sConsumerCoupon
.
setWeeks
(
sCoupon
.
getWeeks
());
sConsumerCoupon
.
setRemark
(
sCoupon
.
getRemark
());
sConsumerCoupon
.
setSalePrice
(
sCoupon
.
getSalePrice
());
}
isConsumerCouponService
.
insertSConsumerCoupon
(
sConsumerCoupon
);
//核销美团券
qpService
.
consume
(
code
.
trim
(),
1
,
sStore
.
getOpenShopUuid
(),
status
);
return
"验劵成功"
;
}
isConsumerCouponService
.
insertSConsumerCoupon
(
sConsumerCoupon
);
//核销美团券
qpService
.
consume
(
code
.
trim
(),
1
,
sStore
.
getOpenShopUuid
(),
status
);
return
"验劵成功"
;
throw
new
RuntimeException
(
"验劵失败"
);
}
@Override
...
...
share-system/src/main/java/share/system/service/impl/SOrderServiceImpl.java
View file @
56eade07
...
...
@@ -2304,12 +2304,11 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
// }
// 是否满足退款
boolean
isRefunds
;
SConsumerCoupon
coupon
=
null
;
if
(
ObjectUtil
.
isNotNull
(
sOrder
.
getCouponId
()))
{
SConsumerCoupon
coupon
=
consumerCouponService
.
getById
(
sOrder
.
getCouponId
());
coupon
=
consumerCouponService
.
getById
(
sOrder
.
getCouponId
());
// 判断是否可以退款
isRefunds
=
isRefund
(
sOrder
,
coupon
);
coupon
.
setUseStatus
(
UserStatusEnum
.
UNUSED
.
getCode
());
consumerCouponService
.
updateById
(
coupon
);
}
else
{
// 判断是否可以退款
isRefunds
=
isRefund
(
sOrder
,
null
);
...
...
@@ -2375,8 +2374,13 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
//微信退款
// if (sOrder.getPayType().equals(PayTypeEnum.WECHAT.getCode()) && request.getAmount().compareTo(BigDecimal.ZERO) == 0) {
// 退款task, 定时任务退优惠券
redisUtil
.
lPush
(
Constants
.
ORDER_TASK_REDIS_KEY_AFTER_REFUND_BY_USER
,
sOrder
.
getId
());
//
redisUtil.lPush(Constants.ORDER_TASK_REDIS_KEY_AFTER_REFUND_BY_USER, sOrder.getId());
// }
// 退优惠券
if
(
coupon
!=
null
)
{
coupon
.
setUseStatus
(
UserStatusEnum
.
UNUSED
.
getCode
());
consumerCouponService
.
updateById
(
coupon
);
}
execute
=
Boolean
.
TRUE
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
toString
());
...
...
share-system/src/main/java/share/system/service/impl/TiktokServiceImpl.java
View file @
56eade07
...
...
@@ -20,6 +20,7 @@ import org.springframework.util.CollectionUtils;
import
share.common.core.redis.RedisUtil
;
import
share.common.enums.*
;
import
share.common.exception.base.BaseException
;
import
share.common.utils.RedisLockUtil
;
import
share.system.domain.SConsumer
;
import
share.system.domain.SConsumerCoupon
;
import
share.system.domain.SCoupon
;
...
...
@@ -54,6 +55,9 @@ public class TiktokServiceImpl implements TiktokService {
private
RedisUtil
redisUtil
;
@Autowired
private
RedisLockUtil
redisLockUtil
;
@Autowired
private
ISStoreService
storeService
;
@Autowired
...
...
@@ -356,33 +360,35 @@ public class TiktokServiceImpl implements TiktokService {
if
(
ObjectUtil
.
isNull
(
user
))
{
throw
new
BaseException
(
"您的登录已过期,请先登录"
);
}
LambdaQueryWrapper
<
SStore
>
sStoreLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
sStoreLambdaQueryWrapper
.
eq
(
SStore:
:
getId
,
storeId
);
SStore
sStore
=
storeService
.
getOne
(
sStoreLambdaQueryWrapper
);
if
(
ObjectUtils
.
isEmpty
(
sStore
)
||
StoreStatusEnum
.
STOP
.
getIndex
().
equals
(
sStore
.
getStatus
()))
{
throw
new
Exception
(
"门店维护中,请联系客服"
);
}
if
(
StringUtils
.
isEmpty
(
sStore
.
getTiktokPoiId
()))
{
throw
new
Exception
(
"门店未授权,请联系客服"
);
}
if
(
code
.
startsWith
(
"https://v.douyin.com/"
)
|
code
.
length
()
==
15
|
code
.
length
()
==
12
)
{
try
{
TiktokCouponDto
tiktokCouponDto
=
new
TiktokCouponDto
();
if
(
code
.
startsWith
(
"https://v.douyin.com/"
))
{
tiktokCouponDto
.
setEncryptedData
(
code
);
}
else
{
tiktokCouponDto
.
setCode
(
code
);
}
tiktokCouponDto
.
setPoiId
(
sStore
.
getTiktokPoiId
());
JSONObject
prepare
=
prepare
(
tiktokCouponDto
);
JSONArray
certificates
=
prepare
.
getJSONArray
(
"certificates"
);
if
(
CollectionUtils
.
isEmpty
(
certificates
))
{
throw
new
Exception
(
"该券码已被使用"
);
}
Object
o
=
certificates
.
get
(
0
);
JSONObject
entries
=
new
JSONObject
(
o
);
JSONObject
sku
=
entries
.
getJSONObject
(
"sku"
);
JSONObject
amount
=
entries
.
getJSONObject
(
"amount"
);
Boolean
lock
=
redisLockUtil
.
getLock
(
String
.
valueOf
(
user
.
getId
()),
1000
);
if
(
lock
)
{
LambdaQueryWrapper
<
SStore
>
sStoreLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
sStoreLambdaQueryWrapper
.
eq
(
SStore:
:
getId
,
storeId
);
SStore
sStore
=
storeService
.
getOne
(
sStoreLambdaQueryWrapper
);
if
(
ObjectUtils
.
isEmpty
(
sStore
)
||
StoreStatusEnum
.
STOP
.
getIndex
().
equals
(
sStore
.
getStatus
()))
{
throw
new
Exception
(
"门店维护中,请联系客服"
);
}
if
(
StringUtils
.
isEmpty
(
sStore
.
getTiktokPoiId
()))
{
throw
new
Exception
(
"门店未授权,请联系客服"
);
}
if
(
code
.
startsWith
(
"https://v.douyin.com/"
)
|
code
.
length
()
==
15
|
code
.
length
()
==
12
)
{
try
{
TiktokCouponDto
tiktokCouponDto
=
new
TiktokCouponDto
();
if
(
code
.
startsWith
(
"https://v.douyin.com/"
))
{
tiktokCouponDto
.
setEncryptedData
(
code
);
}
else
{
tiktokCouponDto
.
setCode
(
code
);
}
tiktokCouponDto
.
setPoiId
(
sStore
.
getTiktokPoiId
());
JSONObject
prepare
=
prepare
(
tiktokCouponDto
);
JSONArray
certificates
=
prepare
.
getJSONArray
(
"certificates"
);
if
(
CollectionUtils
.
isEmpty
(
certificates
))
{
throw
new
Exception
(
"该券码已被使用"
);
}
Object
o
=
certificates
.
get
(
0
);
JSONObject
entries
=
new
JSONObject
(
o
);
JSONObject
sku
=
entries
.
getJSONObject
(
"sku"
);
JSONObject
amount
=
entries
.
getJSONObject
(
"amount"
);
// //查询领取记录表
// LambdaQueryWrapper<SConsumerCoupon> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(SConsumerCoupon::getCouponCode, entries.getStr("encrypted_code"));
...
...
@@ -392,93 +398,95 @@ public class TiktokServiceImpl implements TiktokService {
// if (ObjectUtils.isNotEmpty(unUsedCoupon)) {
// throw new RuntimeException("该券已被领取");
// }
TiktokCouponDto
couponDto
=
new
TiktokCouponDto
();
couponDto
.
setVerifyToken
(
prepare
.
getStr
(
"verify_token"
));
couponDto
.
setPoiId
(
sStore
.
getTiktokPoiId
());
List
<
String
>
codes
=
new
ArrayList
<>();
List
<
JSONObject
>
list
=
certificates
.
toList
(
JSONObject
.
class
);
//获取List中的encrypted_code
list
.
stream
().
forEach
(
e
->
{
codes
.
add
(
e
.
getStr
(
"encrypted_code"
));
});
couponDto
.
setEncryptedCodes
(
codes
);
JSONObject
verify
=
verify
(
couponDto
);
JSONArray
verifyResults
=
verify
.
getJSONArray
(
"verify_results"
);
verifyResults
.
forEach
(
item
->
{
JSONObject
verifyResult
=
new
JSONObject
(
item
);
String
originCode
=
verifyResult
.
getStr
(
"origin_code"
);
SConsumerCoupon
sConsumerCoupon
=
new
SConsumerCoupon
();
sConsumerCoupon
.
setConsumerId
(
user
.
getId
());
sConsumerCoupon
.
setStoreId
(
sStore
.
getId
());
sConsumerCoupon
.
setCouponCode
(
originCode
);
sConsumerCoupon
.
setEncryptedCode
(
entries
.
getStr
(
"encrypted_code"
));
sConsumerCoupon
.
setName
(
sku
.
getStr
(
"title"
));
sConsumerCoupon
.
setSourceType
(
SourceTypeEnum
.
CHECK
.
getCode
());
sConsumerCoupon
.
setPlatformType
(
PlatformTypeEnum
.
TIKTOK
.
getCode
());
sConsumerCoupon
.
setUseStatus
(
UserStatusEnum
.
UNUSED
.
getCode
());
sConsumerCoupon
.
setCreateBy
(
String
.
valueOf
(
user
.
getId
()));
sConsumerCoupon
.
setCreateTime
(
new
Date
());
Integer
originalAmount
=
amount
.
getInt
(
"list_market_amount"
);
sConsumerCoupon
.
setOriginalPrice
(
BigDecimal
.
valueOf
(
originalAmount
/
100
));
sConsumerCoupon
.
setCouponPayPrice
(
BigDecimal
.
valueOf
(
amount
.
getInt
(
"pay_amount"
)
/
100
));
//时间戳转年月日时分秒
sConsumerCoupon
.
setEndDate
(
new
Date
(
entries
.
getInt
(
"expire_time"
)
*
1000L
));
//获取本日的00:00:00
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
Date
startOfDay
=
calendar
.
getTime
();
sConsumerCoupon
.
setStartDate
(
startOfDay
);
LambdaQueryWrapper
<
SCoupon
>
sCouponLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
sCouponLambdaQueryWrapper
.
eq
(
SCoupon:
:
getTiktokSkuId
,
sku
.
getStr
(
"sku_id"
));
List
<
SCoupon
>
sCoupons
=
isCouponService
.
list
(
sCouponLambdaQueryWrapper
);
SCoupon
sCoupon
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
sCoupons
))
{
sCoupon
=
sCoupons
.
get
(
0
);
}
if
(
ObjectUtils
.
isEmpty
(
sCoupon
))
{
sConsumerCoupon
.
setTiktokSkuId
(
sku
.
getStr
(
"sku_id"
));
sConsumerCoupon
.
setCouponType
(
CouponTypeEnum
.
CASH
.
getCode
());
sConsumerCoupon
.
setStoreType
(
StoreType
.
getCodeList
());
sConsumerCoupon
.
setRoomType
(
RoomType
.
getCodeList
());
TiktokCouponDto
couponDto
=
new
TiktokCouponDto
();
couponDto
.
setVerifyToken
(
prepare
.
getStr
(
"verify_token"
));
couponDto
.
setPoiId
(
sStore
.
getTiktokPoiId
());
List
<
String
>
codes
=
new
ArrayList
<>();
List
<
JSONObject
>
list
=
certificates
.
toList
(
JSONObject
.
class
);
//获取List中的encrypted_code
list
.
stream
().
forEach
(
e
->
{
codes
.
add
(
e
.
getStr
(
"encrypted_code"
));
});
couponDto
.
setEncryptedCodes
(
codes
);
JSONObject
verify
=
verify
(
couponDto
);
JSONArray
verifyResults
=
verify
.
getJSONArray
(
"verify_results"
);
verifyResults
.
forEach
(
item
->
{
JSONObject
verifyResult
=
new
JSONObject
(
item
);
String
originCode
=
verifyResult
.
getStr
(
"origin_code"
);
SConsumerCoupon
sConsumerCoupon
=
new
SConsumerCoupon
();
sConsumerCoupon
.
setConsumerId
(
user
.
getId
());
sConsumerCoupon
.
setStoreId
(
sStore
.
getId
());
sConsumerCoupon
.
setCouponCode
(
originCode
);
sConsumerCoupon
.
setEncryptedCode
(
entries
.
getStr
(
"encrypted_code"
));
sConsumerCoupon
.
setName
(
sku
.
getStr
(
"title"
));
sConsumerCoupon
.
setSourceType
(
SourceTypeEnum
.
CHECK
.
getCode
());
sConsumerCoupon
.
setPlatformType
(
PlatformTypeEnum
.
TIKTOK
.
getCode
());
sConsumerCoupon
.
setUseStatus
(
UserStatusEnum
.
UNUSED
.
getCode
());
sConsumerCoupon
.
setCreateBy
(
String
.
valueOf
(
user
.
getId
()));
sConsumerCoupon
.
setMinDuration
(
DEFAULT_MIN_DURATION
);
sConsumerCoupon
.
setMaxDuration
(
DEFAULT_MAX_DURATION
);
sConsumerCoupon
.
setDuration
(
DEFAULT_DURATION
);
sConsumerCoupon
.
setMinPrice
(
DEFAULT_MIN_PRICE
);
sConsumerCoupon
.
setCouponTimeStart
(
DEFAULT_START_TIME
);
sConsumerCoupon
.
setCouponTimeEnd
(
DEFAULT_END_TIME
);
sConsumerCoupon
.
setSalePrice
(
sConsumerCoupon
.
getCouponPayPrice
());
}
else
{
sConsumerCoupon
.
setCouponId
(
sCoupon
.
getId
());
sConsumerCoupon
.
setCouponType
(
sCoupon
.
getCouponType
());
sConsumerCoupon
.
setStoreType
(
sCoupon
.
getStoreType
());
sConsumerCoupon
.
setRoomType
(
sCoupon
.
getRoomType
());
sConsumerCoupon
.
setMinDuration
(
sCoupon
.
getMinDuration
());
sConsumerCoupon
.
setMaxDuration
(
sCoupon
.
getMaxDuration
());
sConsumerCoupon
.
setDuration
(
sCoupon
.
getDuration
());
sConsumerCoupon
.
setMinPrice
(
sCoupon
.
getMinPrice
());
sConsumerCoupon
.
setCouponTimeStart
(
sCoupon
.
getValidStartTime
());
sConsumerCoupon
.
setCouponTimeEnd
(
sCoupon
.
getValidEndTime
());
sConsumerCoupon
.
setOrderType
(
sCoupon
.
getOrderType
());
sConsumerCoupon
.
setTiktokSkuId
(
sCoupon
.
getTiktokSkuId
());
sConsumerCoupon
.
setStoreIds
(
sCoupon
.
getStoreIds
());
sConsumerCoupon
.
setPackIds
(
sCoupon
.
getPackIds
());
sConsumerCoupon
.
setWeeks
(
sCoupon
.
getWeeks
());
sConsumerCoupon
.
setRemark
(
sCoupon
.
getRemark
());
sConsumerCoupon
.
setSalePrice
(
sCoupon
.
getSalePrice
());
}
isConsumerCouponService
.
insertSConsumerCoupon
(
sConsumerCoupon
);
});
}
catch
(
RuntimeException
e
)
{
throw
new
RuntimeException
(
e
);
sConsumerCoupon
.
setCreateTime
(
new
Date
());
Integer
originalAmount
=
amount
.
getInt
(
"list_market_amount"
);
sConsumerCoupon
.
setOriginalPrice
(
BigDecimal
.
valueOf
(
originalAmount
/
100
));
sConsumerCoupon
.
setCouponPayPrice
(
BigDecimal
.
valueOf
(
amount
.
getInt
(
"pay_amount"
)
/
100
));
//时间戳转年月日时分秒
sConsumerCoupon
.
setEndDate
(
new
Date
(
entries
.
getInt
(
"expire_time"
)
*
1000L
));
//获取本日的00:00:00
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
0
);
calendar
.
set
(
Calendar
.
MINUTE
,
0
);
calendar
.
set
(
Calendar
.
SECOND
,
0
);
calendar
.
set
(
Calendar
.
MILLISECOND
,
0
);
Date
startOfDay
=
calendar
.
getTime
();
sConsumerCoupon
.
setStartDate
(
startOfDay
);
LambdaQueryWrapper
<
SCoupon
>
sCouponLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
sCouponLambdaQueryWrapper
.
eq
(
SCoupon:
:
getTiktokSkuId
,
sku
.
getStr
(
"sku_id"
));
List
<
SCoupon
>
sCoupons
=
isCouponService
.
list
(
sCouponLambdaQueryWrapper
);
SCoupon
sCoupon
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
sCoupons
))
{
sCoupon
=
sCoupons
.
get
(
0
);
}
if
(
ObjectUtils
.
isEmpty
(
sCoupon
))
{
sConsumerCoupon
.
setTiktokSkuId
(
sku
.
getStr
(
"sku_id"
));
sConsumerCoupon
.
setCouponType
(
CouponTypeEnum
.
CASH
.
getCode
());
sConsumerCoupon
.
setStoreType
(
StoreType
.
getCodeList
());
sConsumerCoupon
.
setRoomType
(
RoomType
.
getCodeList
());
sConsumerCoupon
.
setCreateBy
(
String
.
valueOf
(
user
.
getId
()));
sConsumerCoupon
.
setMinDuration
(
DEFAULT_MIN_DURATION
);
sConsumerCoupon
.
setMaxDuration
(
DEFAULT_MAX_DURATION
);
sConsumerCoupon
.
setDuration
(
DEFAULT_DURATION
);
sConsumerCoupon
.
setMinPrice
(
DEFAULT_MIN_PRICE
);
sConsumerCoupon
.
setCouponTimeStart
(
DEFAULT_START_TIME
);
sConsumerCoupon
.
setCouponTimeEnd
(
DEFAULT_END_TIME
);
sConsumerCoupon
.
setSalePrice
(
sConsumerCoupon
.
getCouponPayPrice
());
}
else
{
sConsumerCoupon
.
setCouponId
(
sCoupon
.
getId
());
sConsumerCoupon
.
setCouponType
(
sCoupon
.
getCouponType
());
sConsumerCoupon
.
setStoreType
(
sCoupon
.
getStoreType
());
sConsumerCoupon
.
setRoomType
(
sCoupon
.
getRoomType
());
sConsumerCoupon
.
setMinDuration
(
sCoupon
.
getMinDuration
());
sConsumerCoupon
.
setMaxDuration
(
sCoupon
.
getMaxDuration
());
sConsumerCoupon
.
setDuration
(
sCoupon
.
getDuration
());
sConsumerCoupon
.
setMinPrice
(
sCoupon
.
getMinPrice
());
sConsumerCoupon
.
setCouponTimeStart
(
sCoupon
.
getValidStartTime
());
sConsumerCoupon
.
setCouponTimeEnd
(
sCoupon
.
getValidEndTime
());
sConsumerCoupon
.
setOrderType
(
sCoupon
.
getOrderType
());
sConsumerCoupon
.
setTiktokSkuId
(
sCoupon
.
getTiktokSkuId
());
sConsumerCoupon
.
setStoreIds
(
sCoupon
.
getStoreIds
());
sConsumerCoupon
.
setPackIds
(
sCoupon
.
getPackIds
());
sConsumerCoupon
.
setWeeks
(
sCoupon
.
getWeeks
());
sConsumerCoupon
.
setRemark
(
sCoupon
.
getRemark
());
sConsumerCoupon
.
setSalePrice
(
sCoupon
.
getSalePrice
());
}
isConsumerCouponService
.
insertSConsumerCoupon
(
sConsumerCoupon
);
});
}
catch
(
RuntimeException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
else
{
throw
new
RuntimeException
(
"券码格式错误"
);
}
}
else
{
throw
new
RuntimeException
(
"券码格式错误"
);
return
"验卷成功"
;
}
return
"验卷成功"
;
throw
new
RuntimeException
(
"验劵失败"
)
;
}
@Override
...
...
share.iml
deleted
100644 → 0
View file @
6b86b2dd
<?xml version="1.0" encoding="UTF-8"?>
<module
org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule=
"true"
type=
"JAVA_MODULE"
version=
"4"
>
<component
name=
"AdditionalModuleElements"
>
<content
url=
"file://$MODULE_DIR$"
dumb=
"true"
>
<excludeFolder
url=
"file://$MODULE_DIR$/target"
/>
</content>
</component>
</module>
\ 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