Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-api-boot-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
lanbaoming
jiedao-api-boot-master
Commits
ac74974c
Commit
ac74974c
authored
Sep 19, 2024
by
zhangfeng
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release-feat-zhangfeng' into 'release'
Release feat zhangfeng See merge request
!21
parents
9c3b8c01
30b6cd7e
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
84 additions
and
37 deletions
+84
-37
ScoreRuleRedisDao.java
.../module/member/dal/redis/scoreRule/ScoreRuleRedisDao.java
+9
-3
ScoreRuleServiceImpl.java
...module/member/service/scoreRule/ScoreRuleServiceImpl.java
+63
-33
ScoreRuleGenCodeUtils.java
...coder/yudao/module/member/util/ScoreRuleGenCodeUtils.java
+1
-0
MemberUserScoreLogMapper.xml
...c/main/resources/mapper/user/MemberUserScoreLogMapper.xml
+1
-1
RewardGenCodeUtils.java
.../iocoder/yudao/module/reward/util/RewardGenCodeUtils.java
+2
-0
RewardRedeemPageReqVO.java
.../yudao/module/reward/vo/reward/RewardRedeemPageReqVO.java
+2
-0
RewardRedeemPageRespVO.java
...yudao/module/reward/vo/reward/RewardRedeemPageRespVO.java
+2
-0
RewardRedeemMapper.xml
...ard-impl/src/main/resources/mapper/RewardRedeemMapper.xml
+4
-0
No files found.
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/redis/scoreRule/ScoreRuleRedisDao.java
View file @
ac74974c
...
...
@@ -37,6 +37,7 @@ public class ScoreRuleRedisDao {
}
public
ScoreRuleDO
getEnableScoreRule
(
ScoreRuleTypeEnum
type
,
TransportTypeEnum
transportType
)
{
ScoreRuleDO
useScoreRuleDO
;
// 如果transportType不为空则是订单V值类型
if
(
transportType
==
null
)
{
String
redisKey
=
formatKey
(
type
.
getValue
(),
null
);
...
...
@@ -44,15 +45,20 @@ public class ScoreRuleRedisDao {
if
(
scoreRuleJson
==
null
)
{
return
null
;
}
return
JsonUtils
.
parseObject
(
scoreRuleJson
,
ScoreRuleDO
.
class
);
useScoreRuleDO
=
JsonUtils
.
parseObject
(
scoreRuleJson
,
ScoreRuleDO
.
class
);
}
else
{
String
redisKey
=
formatKey
(
type
.
getValue
(),
transportType
.
getValue
());
String
scoreRuleJson
=
stringRedisTemplate
.
opsForValue
().
get
(
redisKey
);
if
(
scoreRuleJson
==
null
)
{
return
null
;
}
return
JsonUtils
.
parseObject
(
scoreRuleJson
,
ScoreRuleDO
.
class
);
useScoreRuleDO
=
JsonUtils
.
parseObject
(
scoreRuleJson
,
ScoreRuleDO
.
class
);
}
// 如果当前时间不在规则时间区间
if
(
System
.
currentTimeMillis
()
<
useScoreRuleDO
.
getStartTime
().
getTime
()
||
System
.
currentTimeMillis
()
>
useScoreRuleDO
.
getEndTime
().
getTime
())
{
return
null
;
}
return
useScoreRuleDO
;
}
public
ScoreRuleDO
getEnableScoreRule
(
ScoreRuleTypeEnum
type
)
{
...
...
@@ -72,7 +78,7 @@ public class ScoreRuleRedisDao {
scoreRuleDO
.
setDescZh
(
null
);
if
(
scoreRuleDO
.
getType
()
==
ScoreRuleTypeEnum
.
ORDER_V
.
getValue
())
{
ScoreRuleOrderVExtraVO
scoreRuleOrderVExtraVO
=
JsonUtils
.
parseObject
(
scoreRuleDO
.
getExtra
(),
ScoreRuleOrderVExtraVO
.
class
);
stringRedisTemplate
.
opsForValue
().
set
(
formatKey
(
scoreRuleDO
.
getType
(),
scoreRuleOrderVExtraVO
.
getTransportType
()),
JsonUtils
.
toJsonString
(
scoreRuleDO
));
stringRedisTemplate
.
opsForValue
().
set
(
formatKey
(
scoreRuleDO
.
getType
(),
scoreRuleOrderVExtraVO
.
getTransportType
()),
JsonUtils
.
toJsonString
(
scoreRuleDO
)
,
24L
,
TimeUnit
.
HOURS
);
}
stringRedisTemplate
.
opsForValue
().
set
(
formatKey
(
scoreRuleDO
.
getType
(),
null
),
JsonUtils
.
toJsonString
(
scoreRuleDO
),
24L
,
TimeUnit
.
HOURS
);
}
...
...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/service/scoreRule/ScoreRuleServiceImpl.java
View file @
ac74974c
...
...
@@ -42,6 +42,7 @@ import org.springframework.validation.annotation.Validated;
import
javax.annotation.Resource
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -101,9 +102,6 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
}
//如果是启用,校验同一个规则下,有效期内有没有重复的规则设置,分享不校验。海运空运分开算
if
(
scoreRuleIn
.
getStatus
()
==
ScoreRuleStatusEnum
.
ENABLED
.
getValue
()
&&
scoreRuleIn
.
getType
()
!=
ScoreRuleTypeEnum
.
SHARE
.
getValue
())
{
LambdaQuery
<
ScoreRuleDO
>
scoreRuleDOLambdaQuery
=
new
LambdaQuery
<>();
scoreRuleDOLambdaQuery
.
eq
(
ScoreRuleDO:
:
getStatus
,
ScoreRuleStatusEnum
.
ENABLED
.
getValue
())
.
eq
(
ScoreRuleDO:
:
getType
,
scoreRuleIn
.
getType
());
if
(
scoreRuleIn
.
getType
()
==
ScoreRuleTypeEnum
.
ORDER_V
.
getValue
())
{
ScoreRuleOrderVExtraVO
extraOrderV
=
scoreRuleIn
.
getExtraOrderV
();
if
(
extraOrderV
==
null
)
{
...
...
@@ -113,24 +111,54 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
if
(
transportType
!=
TransportTypeEnum
.
OCEAN_LCL
.
getValue
()
&&
transportType
!=
TransportTypeEnum
.
SPECIAL_LINE_AIR_FREIGHT
.
getValue
())
{
throw
exception
(
SCORE_RULE_TRANSPORT_TYPE_ERROR
);
}
scoreRuleUniqueCheck
(
scoreRuleIn
.
getType
(),
transportType
,
scoreRuleIn
.
getStartTime
(),
scoreRuleIn
.
getEndTime
(),
null
);
}
else
{
scoreRuleUniqueCheck
(
scoreRuleIn
.
getType
(),
null
,
scoreRuleIn
.
getStartTime
(),
scoreRuleIn
.
getEndTime
(),
null
);
}
}
}
/**
* 积分规则唯一性校验
*
* @param type 类型
* @param transportType 运输类型(订单V值传)
* @param newScoreRuleStart 新积分规则开始时间
* @param delayId 延期时的规则id
*/
private
void
scoreRuleUniqueCheck
(
Integer
type
,
Integer
transportType
,
Date
newScoreRuleStart
,
Date
newScoreRuleEnd
,
Long
delayId
)
{
LambdaQuery
<
ScoreRuleDO
>
scoreRuleDOLambdaQuery
=
new
LambdaQuery
<>();
scoreRuleDOLambdaQuery
.
eq
(
ScoreRuleDO:
:
getStatus
,
ScoreRuleStatusEnum
.
ENABLED
.
getValue
())
.
eq
(
ScoreRuleDO:
:
getType
,
type
);
if
(
delayId
!=
null
)
{
scoreRuleDOLambdaQuery
.
ne
(
ScoreRuleDO:
:
getId
,
delayId
);
}
List
<
ScoreRuleDO
>
scoreRuleDOS
=
scoreRuleMapper
.
selectList
(
scoreRuleDOLambdaQuery
);
if
(
transportType
!=
null
)
{
if
(
scoreRuleDOS
!=
null
&&
!
scoreRuleDOS
.
isEmpty
())
{
for
(
ScoreRuleDO
scoreRuleDO
:
scoreRuleDOS
)
{
ScoreRuleOrderVExtraVO
bean
=
JSONUtil
.
toBean
(
scoreRuleDO
.
getExtra
(),
ScoreRuleOrderVExtraVO
.
class
);
if
(
Objects
.
equals
(
bean
.
getTransportType
(),
transportType
))
{
if
(
Objects
.
equals
(
bean
.
getTransportType
(),
transportType
)
&&
verifyTimeOverlap
(
newScoreRuleStart
,
newScoreRuleEnd
,
scoreRuleDO
))
{
throw
exception
(
SCORE_RULE_UNIQUE_CHECK_ERROR
);
}
}
}
}
else
{
Long
count
=
scoreRuleMapper
.
selectCount
(
scoreRuleDOLambdaQuery
);
if
(
count
>
0
)
{
for
(
ScoreRuleDO
scoreRuleDO
:
scoreRuleDOS
)
{
if
(
verifyTimeOverlap
(
newScoreRuleStart
,
newScoreRuleEnd
,
scoreRuleDO
)
)
{
throw
exception
(
SCORE_RULE_UNIQUE_CHECK_ERROR
);
}
}
}
}
/**
* 校验规则时间区间是否有交集
*/
private
boolean
verifyTimeOverlap
(
Date
newScoreRuleStart
,
Date
newScoreRuleEnd
,
ScoreRuleDO
oldScoreRule
)
{
return
newScoreRuleStart
.
before
(
oldScoreRule
.
getEndTime
())
&&
newScoreRuleEnd
.
after
(
oldScoreRule
.
getStartTime
());
}
@Override
public
void
updateScoreRule
(
ScoreRuleUpdateReqVO
updateReqVO
)
{
...
...
@@ -352,21 +380,17 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
if
(
oldStatus
==
ScoreRuleStatusEnum
.
ENABLED
.
getValue
()
&&
scoreRuleStatusReqVO
.
getStatus
()
==
ScoreRuleStatusEnum
.
CLOSED
.
getValue
())
{
upScoreRuleDO
.
setStatus
(
scoreRuleStatusReqVO
.
getStatus
());
}
else
if
(
oldStatus
==
ScoreRuleStatusEnum
.
DISABLED
.
getValue
()
&&
scoreRuleStatusReqVO
.
getStatus
()
==
ScoreRuleStatusEnum
.
ENABLED
.
getValue
())
{
//如果是启用,校验同一个规则下,有效期内有没有重复的规则设置,分享不校验
if
(
scoreRuleDO
.
getType
()
!=
ScoreRuleTypeEnum
.
SHARE
.
getValue
())
{
LambdaQuery
<
ScoreRuleDO
>
scoreRuleDOLambdaQuery
=
new
LambdaQuery
<>();
scoreRuleDOLambdaQuery
.
eq
(
ScoreRuleDO:
:
getStatus
,
ScoreRuleStatusEnum
.
ENABLED
.
getValue
())
.
eq
(
ScoreRuleDO:
:
getType
,
scoreRuleDO
.
getType
())
.
eq
(
ScoreRuleDO:
:
getStatus
,
ScoreRuleStatusEnum
.
ENABLED
.
getValue
());
Long
count
=
scoreRuleMapper
.
selectCount
(
scoreRuleDOLambdaQuery
);
if
(
count
>
0
)
{
throw
exception
(
SCORE_RULE_UNIQUE_CHECK_ERROR
);
}
}
// 如果结束时间比当前时间早,不允许启用
if
(
scoreRuleDO
.
getEndTime
()
!=
null
&&
scoreRuleDO
.
getEndTime
().
before
(
new
Date
()))
{
throw
exception
(
SCORE_RULE_TIME_ERROR
);
}
//如果是启用,校验同一个规则下,有效期内有没有重复的规则设置,分享不校验
if
(
scoreRuleDO
.
getType
()
==
ScoreRuleTypeEnum
.
ORDER_V
.
getValue
())
{
ScoreRuleOrderVExtraVO
extraOrderV
=
JSONUtil
.
toBean
(
scoreRuleDO
.
getExtra
(),
ScoreRuleOrderVExtraVO
.
class
);
scoreRuleUniqueCheck
(
scoreRuleDO
.
getType
(),
extraOrderV
.
getTransportType
(),
scoreRuleDO
.
getStartTime
(),
scoreRuleDO
.
getEndTime
(),
null
);
}
else
{
scoreRuleUniqueCheck
(
scoreRuleDO
.
getType
(),
null
,
scoreRuleDO
.
getStartTime
(),
scoreRuleDO
.
getEndTime
(),
null
);
}
upScoreRuleDO
.
setStatus
(
scoreRuleStatusReqVO
.
getStatus
());
}
else
{
throw
exception
(
SCORE_RULE_STATUS_ERROR
);
...
...
@@ -401,10 +425,17 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
throw
exception
(
SCORE_RULE_STATUS_NOT_ENABLE
);
}
Instant
now
=
Instant
.
now
();
//结束时间不能小于当前时间
//
结束时间不能小于当前时间
if
(!
delayReqVO
.
getEndTime
().
toInstant
().
isAfter
(
now
)
||
!
delayReqVO
.
getEndTime
().
toInstant
().
isAfter
(
scoreRuleDO
.
getStartTime
().
toInstant
()))
{
throw
exception
(
SCORE_RULE_TIME_ERROR
);
}
// 新时间区间规则唯一校验
if
(
scoreRuleDO
.
getType
()
==
ScoreRuleTypeEnum
.
ORDER_V
.
getValue
())
{
ScoreRuleOrderVExtraVO
extraOrderV
=
JSONUtil
.
toBean
(
scoreRuleDO
.
getExtra
(),
ScoreRuleOrderVExtraVO
.
class
);
scoreRuleUniqueCheck
(
scoreRuleDO
.
getType
(),
extraOrderV
.
getTransportType
(),
scoreRuleDO
.
getStartTime
(),
delayReqVO
.
getEndTime
(),
scoreRuleDO
.
getId
());
}
else
{
scoreRuleUniqueCheck
(
scoreRuleDO
.
getType
(),
null
,
scoreRuleDO
.
getStartTime
(),
delayReqVO
.
getEndTime
(),
scoreRuleDO
.
getId
());
}
ScoreRuleDO
upScoreRuleDO
=
new
ScoreRuleDO
();
upScoreRuleDO
.
setId
(
delayReqVO
.
getId
());
upScoreRuleDO
.
setEndTime
(
delayReqVO
.
getEndTime
());
...
...
@@ -417,8 +448,11 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
throw
exception
(
SCORE_RULE_TRANSPORT_TYPE_ERROR
);
}
LambdaQuery
<
ScoreRuleDO
>
lambdaQuery
=
new
LambdaQuery
<>();
// 查询状态为启用,类型为订单V值,当前时间在规则时间区间内的规则
lambdaQuery
.
eq
(
ScoreRuleDO:
:
getStatus
,
ScoreRuleStatusEnum
.
ENABLED
.
getValue
())
.
eq
(
ScoreRuleDO:
:
getType
,
ScoreRuleTypeEnum
.
ORDER_V
.
getValue
());
.
eq
(
ScoreRuleDO:
:
getType
,
ScoreRuleTypeEnum
.
ORDER_V
.
getValue
())
.
lt
(
ScoreRuleDO:
:
getStartTime
,
LocalDateTime
.
now
())
.
gt
(
ScoreRuleDO:
:
getEndTime
,
LocalDateTime
.
now
());
List
<
ScoreRuleDO
>
scoreRuleDOS
=
scoreRuleMapper
.
selectList
(
lambdaQuery
);
if
(!
CollectionUtil
.
isEmpty
(
scoreRuleDOS
))
{
for
(
ScoreRuleDO
scoreRuleDO
:
scoreRuleDOS
)
{
...
...
@@ -437,15 +471,14 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
if
(
enableScoreRule
==
null
)
{
enableScoreRule
=
selectOne
(
new
LambdaQuery
<
ScoreRuleDO
>()
.
eq
(
ScoreRuleDO:
:
getType
,
scoreRuleType
.
getValue
())
.
eq
(
ScoreRuleDO:
:
getStatus
,
ScoreRuleStatusEnum
.
ENABLED
.
getValue
()));
.
eq
(
ScoreRuleDO:
:
getStatus
,
ScoreRuleStatusEnum
.
ENABLED
.
getValue
())
.
lt
(
ScoreRuleDO:
:
getStartTime
,
LocalDateTime
.
now
())
.
gt
(
ScoreRuleDO:
:
getEndTime
,
LocalDateTime
.
now
()));
if
(
enableScoreRule
==
null
)
{
return
null
;
}
scoreRuleRedisDao
.
setEnableScoreRule
(
enableScoreRule
);
}
if
(!
enableScoreRule
.
getEndTime
().
after
(
new
Date
())
||
!
enableScoreRule
.
getStartTime
().
before
(
new
Date
()))
{
return
null
;
}
return
enableScoreRule
;
}
...
...
@@ -462,9 +495,6 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
}
scoreRuleRedisDao
.
setEnableScoreRule
(
enableScoreRule
);
}
if
(!
enableScoreRule
.
getEndTime
().
after
(
new
Date
())
||
!
enableScoreRule
.
getStartTime
().
before
(
new
Date
()))
{
return
null
;
}
return
enableScoreRule
;
case
RECOMMEND:
case
REGISTER:
...
...
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/util/ScoreRuleGenCodeUtils.java
View file @
ac74974c
...
...
@@ -65,6 +65,7 @@ public class ScoreRuleGenCodeUtils {
}
}
// 获得5位序列号,不足位前面补0
codeNum
=
codeNum
%
100000
;
code
.
append
(
String
.
format
(
"%05d"
,
codeNum
));
return
code
.
toString
();
}
...
...
yudao-module-member/yudao-module-member-impl/src/main/resources/mapper/user/MemberUserScoreLogMapper.xml
View file @
ac74974c
...
...
@@ -40,7 +40,7 @@
<sql
id=
"pageCondition"
>
<if
test=
"query.key !=null and query.key != ''"
>
and (mu.nickname like '%${query.key}%' or mu.mobile like '%${query.key}%')
and (mu.nickname like '%${query.key}%' or mu.mobile like '%${query.key}%'
or mu.code like '%${query.key}%'
)
</if>
<if
test=
"query.sourceType !=null"
>
and musl.source_type = #{query.sourceType}
...
...
yudao-module-reward/yudao-module-reward-impl/src/main/java/cn/iocoder/yudao/module/reward/util/RewardGenCodeUtils.java
View file @
ac74974c
...
...
@@ -65,6 +65,7 @@ public class RewardGenCodeUtils {
}
}
// 获得5位序列号,不足位前面补0
codeNum
=
codeNum
%
100000
;
code
.
append
(
String
.
format
(
"%05d"
,
codeNum
));
return
code
.
toString
();
}
...
...
@@ -103,6 +104,7 @@ public class RewardGenCodeUtils {
}
}
// 获得5位序列号,不足位前面补0
codeNum
=
codeNum
%
100000
;
code
.
append
(
String
.
format
(
"%05d"
,
codeNum
));
return
code
.
toString
();
}
...
...
yudao-module-reward/yudao-module-reward-impl/src/main/java/cn/iocoder/yudao/module/reward/vo/reward/RewardRedeemPageReqVO.java
View file @
ac74974c
...
...
@@ -16,6 +16,8 @@ public class RewardRedeemPageReqVO extends PageParam {
private
String
rewardTitle
;
@ApiModelProperty
(
value
=
"会员名称"
)
private
String
memberName
;
@ApiModelProperty
(
value
=
"会员编号"
)
private
String
memberCode
;
@ApiModelProperty
(
value
=
"领取方式"
)
private
Integer
redeemType
;
@ApiModelProperty
(
value
=
"状态"
)
...
...
yudao-module-reward/yudao-module-reward-impl/src/main/java/cn/iocoder/yudao/module/reward/vo/reward/RewardRedeemPageRespVO.java
View file @
ac74974c
...
...
@@ -15,6 +15,8 @@ public class RewardRedeemPageRespVO extends RewardRedeemBaseVO {
private
String
memberNameZh
;
@ApiModelProperty
(
value
=
"会员名称英文"
)
private
String
memberNameEn
;
@ApiModelProperty
(
value
=
"会员编号"
)
private
String
memberCode
;
@ApiModelProperty
(
value
=
"礼品ID"
)
private
String
rewardCode
;
@ApiModelProperty
(
value
=
"礼品名称(中文)"
)
...
...
yudao-module-reward/yudao-module-reward-impl/src/main/resources/mapper/RewardRedeemMapper.xml
View file @
ac74974c
...
...
@@ -109,6 +109,7 @@
err.verify_time as verifyTime,
mu.nickname as memberNameZh,
mu.english_name as memberNameEn,
mu.code as memberCode,
er.code as rewardCode,
er.title_zh as rewardTitleZh,
er.title_en as rewardTitleEn,
...
...
@@ -130,6 +131,9 @@
<if
test=
"req.memberName != null and req.memberName !=''"
>
and mu.nickname like '%${req.memberName}%'
</if>
<if
test=
"req.memberCode != null and req.memberCode !=''"
>
and mu.code = #{req.memberCode}
</if>
<if
test=
"req.rewardCode != null and req.rewardCode !=''"
>
and er.code like '%${req.rewardCode}%'
</if>
...
...
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