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
7c69a675
Commit
7c69a675
authored
Dec 29, 2024
by
liuhan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
会员等级定时任务
parent
d6d1b851
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
205 additions
and
8 deletions
+205
-8
userLevelDetailsTask.java
...iocoder/yudao/module/member/job/userLevelDetailsTask.java
+200
-8
MemberUserLevelDetailsBackVO.java
...ber/vo/userLevelDetails/MemberUserLevelDetailsBackVO.java
+4
-0
MemberUserLevelDetailsMapper.xml
...in/resources/mapper/user/MemberUserLevelDetailsMapper.xml
+1
-0
No files found.
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/job/userLevelDetailsTask.java
View file @
7c69a675
package
cn
.
iocoder
.
yudao
.
module
.
member
.
job
;
import
cn.iocoder.yudao.framework.common.pojo.PageResult
;
import
cn.iocoder.yudao.framework.common.util.date.DateUtils
;
import
cn.iocoder.yudao.framework.mybatis.core.query.LambdaQuery
;
import
cn.iocoder.yudao.framework.quartz.core.handler.JobHandler
;
import
cn.iocoder.yudao.module.member.dal.dataobject.level.MemberUserLevelConfigDO
;
import
cn.iocoder.yudao.module.member.dal.dataobject.score.MemberUserScoreDO
;
import
cn.iocoder.yudao.module.member.dal.dataobject.levelOperatLog.MemberUserLevelOperateLogDO
;
import
cn.iocoder.yudao.module.member.dal.dataobject.memberUserLevelDetail.MemberUserLevelDetailsDO
;
import
cn.iocoder.yudao.module.member.dal.dataobject.scoreLog.MemberUserScoreLogDO
;
import
cn.iocoder.yudao.module.member.dal.dataobject.scoreRule.ScoreRuleDO
;
import
cn.iocoder.yudao.module.member.dal.redis.scoreRule.ScoreRuleRedisDao
;
import
cn.iocoder.yudao.module.member.enums.MemberLevelStatusEnum
;
import
cn.iocoder.yudao.module.member.enums.ScoreRuleStatusEnum
;
import
cn.iocoder.yudao.module.member.service.level.MemberUserLevelConfigService
;
import
cn.iocoder.yudao.module.member.service.score.MemberUserScoreService
;
import
cn.iocoder.yudao.module.member.service.levelDetails.MemberUserLevelDetailsService
;
import
cn.iocoder.yudao.module.member.service.levelOperateLog.MemberUserLevelOperateLogService
;
import
cn.iocoder.yudao.module.member.service.scoreLog.MemberUserScoreLogService
;
import
cn.iocoder.yudao.module.member.service.scoreRule.ScoreRuleService
;
import
cn.iocoder.yudao.module.member.service.user.MemberUserService
;
import
cn.iocoder.yudao.module.member.vo.memberUserScoreLog.MemberUserScoreLogBackVO
;
import
cn.iocoder.yudao.module.member.vo.memberUserScoreLog.MemberUserScoreLogQueryVO
;
import
cn.iocoder.yudao.module.member.vo.userLevelDetails.MemberUserLevelDetailsBackVO
;
import
cn.iocoder.yudao.module.member.vo.userLevelDetails.MemberUserLevelDetailsQueryVO
;
import
cn.iocoder.yudao.module.system.api.user.AdminUserApi
;
import
cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO
;
import
com.baomidou.mybatisplus.core.toolkit.CollectionUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
...
...
@@ -22,6 +27,8 @@ import org.springframework.stereotype.Component;
import
javax.annotation.Resource
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 会员等级详情定时任务
...
...
@@ -42,6 +49,12 @@ public class userLevelDetailsTask implements JobHandler {
private
MemberUserService
userService
;
@Resource
private
MemberUserScoreLogService
memberUserScoreLogService
;
@Resource
private
MemberUserLevelDetailsService
memberUserLevelDetailsService
;
@Resource
private
AdminUserApi
adminUserApi
;
@Resource
private
MemberUserLevelOperateLogService
memberUserLevelOperateService
;
@Override
public
String
execute
(
String
param
)
throws
Exception
{
log
.
info
(
"level config expire task running"
);
...
...
@@ -53,15 +66,194 @@ public class userLevelDetailsTask implements JobHandler {
return
"success"
;
}
else
{
todoList
.
forEach
(
userLevelConfigDO
->
{
log
.
info
(
"规则名称:{}"
,
userLevelConfigDO
.
getRuleNumber
());
MemberUserScoreLogQueryVO
memberUserScoreLogQueryVO
=
new
MemberUserScoreLogQueryVO
();
LambdaQuery
<
MemberUserScoreLogDO
>
memberUserScoreLogDoLambdaQuery
=
new
LambdaQuery
<>();
//获取满足条件的所有用户
//查找左侧,创建是大于等于积分累计开始日期或者大于现在时间减去积分累计周期,查找右侧 创建时间小于积分开始累计日期+积分累计周期或者小于现在
if
(
userLevelConfigDO
.
getStartDate
()!=
null
){
memberUserScoreLogDoLambdaQuery
.
ge
(
MemberUserScoreLogDO:
:
getCreateTime
,
userLevelConfigDO
.
getStartDate
());
memberUserScoreLogQueryVO
.
setStartTime
(
userLevelConfigDO
.
getStartDate
());
memberUserScoreLogQueryVO
.
setEndTime
(
DateUtils
.
getNextNDayStart
(
userLevelConfigDO
.
getStartDate
(),
userLevelConfigDO
.
getAccumulationPeriod
()));
}
else
{
memberUserScoreLogDoLambdaQuery
.
ge
(
MemberUserScoreLogDO:
:
getCreateTime
,
DateUtils
.
getNextNDayStart
(
new
Date
(),
-(
userLevelConfigDO
.
getAccumulationPeriod
())));
memberUserScoreLogQueryVO
.
setStartTime
(
DateUtils
.
getNextNDayStart
(
new
Date
(),
-(
userLevelConfigDO
.
getAccumulationPeriod
())));
memberUserScoreLogQueryVO
.
setEndTime
(
new
Date
());
}
memberUserScoreLogQueryVO
.
setPageSize
(
Integer
.
MAX_VALUE
);
//查出所有的符合条件的积分列表
PageResult
<
MemberUserScoreLogBackVO
>
page
=
memberUserScoreLogService
.
getPage
(
memberUserScoreLogQueryVO
);
List
<
MemberUserScoreLogBackVO
>
memberUserScoreLogList
=
page
.
getList
();
if
(
CollectionUtils
.
isEmpty
(
memberUserScoreLogList
)){
return
;
}
Map
<
Long
,
List
<
MemberUserScoreLogBackVO
>>
memberUserMap
=
memberUserScoreLogList
.
stream
().
collect
(
Collectors
.
groupingBy
(
MemberUserScoreLogBackVO:
:
getMemberId
));
for
(
Map
.
Entry
<
Long
,
List
<
MemberUserScoreLogBackVO
>>
entry
:
memberUserMap
.
entrySet
())
{
Long
memberId
=
entry
.
getKey
();
// 获取键(key)
List
<
MemberUserScoreLogBackVO
>
scoreLogs
=
entry
.
getValue
();
// 获取值(value)
// 打印会员ID和积分记录数量
log
.
info
(
"会员ID: {}, 积分记录数量: {}"
,
memberId
,
scoreLogs
.
size
());
//定义两个变量存储积分,一个是增加积分,一个是减少积分
int
addScore
=
0
;
int
reduceScore
=
0
;
// 遍历积分记录列表
for
(
MemberUserScoreLogBackVO
scoreLog
:
scoreLogs
)
{
// 打印每个积分记录的详细信息
if
(
scoreLog
.
getExpireTime
()!=
null
&&
scoreLog
.
getExpireTime
().
before
(
new
Date
())){
continue
;
}
//增加积分
if
(
scoreLog
.
getOperateType
()==
1
){
addScore
+=
scoreLog
.
getScoreCount
();
}
else
{
reduceScore
+=
scoreLog
.
getScoreCount
();
}
}
if
(
addScore
>
reduceScore
){
int
score
=
addScore
-
reduceScore
;
log
.
info
(
"符合规则积分数量: {}"
,
score
);
if
(
score
>
userLevelConfigDO
.
getLowerCount
()){
//进入积分规则设置方法
//大于最低分,符合规则,查看是否有规则详情
Boolean
b
=
setConfigDetails
(
memberId
,
userLevelConfigDO
);
if
(
b
){
log
.
info
(
"符合规则,规则名称:{},用户id:{}"
,
userLevelConfigDO
.
getRuleNumber
(),
memberId
);
}
else
{
log
.
info
(
"不符合规则,规则名称:{},用户id:{}"
,
userLevelConfigDO
.
getRuleNumber
(),
memberId
);
}
}
}
}
log
.
info
(
"定时任务完成"
);
});
}
return
"success"
;
}
private
Boolean
setConfigDetails
(
Long
memberId
,
MemberUserLevelConfigDO
memberUserLevelConfigDO
){
//获取用户是否有详情
MemberUserLevelDetailsQueryVO
queryVO
=
new
MemberUserLevelDetailsQueryVO
();
queryVO
.
setMemberId
(
memberId
);
PageResult
<
MemberUserLevelDetailsBackVO
>
page
=
memberUserLevelDetailsService
.
getPage
(
queryVO
);
AdminUserRespDTO
user
=
adminUserApi
.
getUser
(
1L
);
List
<
MemberUserLevelDetailsBackVO
>
list
=
page
.
getList
();
if
(
CollectionUtils
.
isEmpty
(
list
)){
//没有详情,新增一条
MemberUserLevelDetailsDO
memberUserLevelDetailsDO
=
new
MemberUserLevelDetailsDO
();
memberUserLevelDetailsDO
.
setMemberId
(
memberId
);
memberUserLevelDetailsDO
.
setLevel
(
memberUserLevelConfigDO
.
getLevel
());
memberUserLevelDetailsDO
.
setSpecificSettings
(
false
);
memberUserLevelDetailsDO
.
setValidityPeriod
(
memberUserLevelConfigDO
.
getValidityPeriod
());
memberUserLevelDetailsDO
.
setRemarks
(
memberUserLevelConfigDO
.
getDescription
());
memberUserLevelDetailsDO
.
setConfigId
(
memberUserLevelConfigDO
.
getId
());
memberUserLevelDetailsDO
.
setCreator
(
String
.
valueOf
(
user
.
getId
()));
memberUserLevelDetailsDO
.
setUpdater
(
String
.
valueOf
(
user
.
getId
()));
memberUserLevelDetailsService
.
save
(
memberUserLevelDetailsDO
);
log
.
info
(
"客户没有等级详情,增加等级详情进入升级操作,规则id:{},用户id:{}"
,
memberUserLevelConfigDO
.
getRuleNumber
(),
memberId
);
//设置用户为admin
//插入一条日志 升级日志
MemberUserLevelOperateLogDO
memberUserLevelOperateLogDo
=
MemberUserLevelOperateLogDO
.
builder
()
.
configId
(
memberUserLevelDetailsDO
.
getConfigId
())
.
configName
(
memberUserLevelConfigDO
.
getName
())
.
memberId
(
memberUserLevelDetailsDO
.
getMemberId
())
.
operator
(
user
.
getNickname
())
.
remarks
(
memberUserLevelDetailsDO
.
getRemarks
())
.
level
(
memberUserLevelDetailsDO
.
getLevel
())
.
operateType
(
1
)
.
build
();
memberUserLevelOperateService
.
save
(
memberUserLevelOperateLogDo
);
return
true
;
}
else
{
//1.用户等级是否设置不降级
MemberUserLevelDetailsBackVO
memberUserLevelDetailsBackVO
=
list
.
get
(
0
);
if
(!
memberUserLevelDetailsBackVO
.
getSpecificSettings
()){
//查看等级大小比较
if
(
memberUserLevelDetailsBackVO
.
getLevel
()<
memberUserLevelConfigDO
.
getLevel
()){
//升级流程
//设置用户为admin
MemberUserLevelDetailsDO
memberUserLevelDetailsDO
=
new
MemberUserLevelDetailsDO
();
memberUserLevelDetailsDO
.
setId
(
memberUserLevelDetailsBackVO
.
getId
());
memberUserLevelDetailsDO
.
setMemberId
(
memberUserLevelDetailsBackVO
.
getMemberId
());
memberUserLevelDetailsDO
.
setLevel
(
memberUserLevelConfigDO
.
getLevel
());
memberUserLevelDetailsDO
.
setSpecificSettings
(
memberUserLevelDetailsBackVO
.
getSpecificSettings
());
memberUserLevelDetailsDO
.
setValidityPeriod
(
memberUserLevelConfigDO
.
getValidityPeriod
());
memberUserLevelDetailsDO
.
setRemarks
(
memberUserLevelConfigDO
.
getDescription
());
memberUserLevelDetailsDO
.
setConfigId
(
memberUserLevelConfigDO
.
getId
());
memberUserLevelDetailsDO
.
setUpdater
(
String
.
valueOf
(
user
.
getId
()));
memberUserLevelDetailsService
.
updateById
(
memberUserLevelDetailsDO
);
//插入一条日志 升级日志
MemberUserLevelOperateLogDO
memberUserLevelOperateLogDo
=
MemberUserLevelOperateLogDO
.
builder
()
.
configId
(
memberUserLevelDetailsDO
.
getConfigId
())
.
configName
(
memberUserLevelConfigDO
.
getName
())
.
memberId
(
memberUserLevelDetailsDO
.
getMemberId
())
.
operator
(
user
.
getNickname
())
.
remarks
(
memberUserLevelDetailsDO
.
getRemarks
())
.
level
(
memberUserLevelConfigDO
.
getLevel
())
.
operateType
(
1
)
.
build
();
memberUserLevelOperateService
.
save
(
memberUserLevelOperateLogDo
);
log
.
info
(
"客户等级小于当前等级,等级详情进入升级操作,规则id:{},用户id:{}"
,
memberUserLevelConfigDO
.
getRuleNumber
(),
memberId
);
return
true
;
}
else
if
(
memberUserLevelDetailsBackVO
.
getLevel
()==
memberUserLevelConfigDO
.
getLevel
()&&!
memberUserLevelDetailsBackVO
.
getRuleNumber
().
equals
(
memberUserLevelConfigDO
.
getRuleNumber
())){
//级别相同比较sort顺序
MemberUserLevelConfigDO
memberUserLevelConfigOldDo
=
memberUserLevelConfigService
.
getById
(
memberUserLevelDetailsBackVO
.
getConfigId
());
if
(
memberUserLevelConfigOldDo
.
getSort
()<
memberUserLevelConfigDO
.
getSort
()){
//降级流程
//设置用户为admin
MemberUserLevelDetailsDO
memberUserLevelDetailsDO
=
new
MemberUserLevelDetailsDO
();
memberUserLevelDetailsDO
.
setId
(
memberUserLevelDetailsBackVO
.
getId
());
memberUserLevelDetailsDO
.
setMemberId
(
memberUserLevelDetailsBackVO
.
getMemberId
());
memberUserLevelDetailsDO
.
setLevel
(
memberUserLevelConfigDO
.
getLevel
());
memberUserLevelDetailsDO
.
setSpecificSettings
(
memberUserLevelDetailsBackVO
.
getSpecificSettings
());
memberUserLevelDetailsDO
.
setValidityPeriod
(
memberUserLevelConfigDO
.
getValidityPeriod
());
memberUserLevelDetailsDO
.
setRemarks
(
memberUserLevelConfigDO
.
getDescription
());
memberUserLevelDetailsDO
.
setConfigId
(
memberUserLevelConfigDO
.
getId
());
memberUserLevelDetailsDO
.
setUpdater
(
String
.
valueOf
(
user
.
getId
()));
memberUserLevelDetailsService
.
updateById
(
memberUserLevelDetailsDO
);
//插入一条日志 升级日志
MemberUserLevelOperateLogDO
memberUserLevelOperateLogDo
=
MemberUserLevelOperateLogDO
.
builder
()
.
configId
(
memberUserLevelDetailsDO
.
getConfigId
())
.
configName
(
memberUserLevelConfigDO
.
getName
())
.
memberId
(
memberUserLevelDetailsDO
.
getMemberId
())
.
operator
(
user
.
getNickname
())
.
remarks
(
memberUserLevelDetailsDO
.
getRemarks
())
.
level
(
memberUserLevelConfigDO
.
getLevel
())
.
operateType
(
2
)
.
build
();
memberUserLevelOperateService
.
save
(
memberUserLevelOperateLogDo
);
}
}
else
{
//查看创建时间加上有效期是否小于于当前时间,进行降级
if
(
memberUserLevelDetailsBackVO
.
getValidityPeriod
()!=
null
&&
memberUserLevelDetailsBackVO
.
getCreateTime
().
getTime
()+
memberUserLevelDetailsBackVO
.
getValidityPeriod
()*
24
*
60
*
60
*
1000
<
new
Date
().
getTime
()){
//设置用户为admin
//设置降级等级
MemberUserLevelDetailsDO
memberUserLevelDetailsDO
=
new
MemberUserLevelDetailsDO
();
memberUserLevelDetailsDO
.
setId
(
memberUserLevelDetailsBackVO
.
getId
());
memberUserLevelDetailsDO
.
setMemberId
(
memberUserLevelDetailsBackVO
.
getMemberId
());
memberUserLevelDetailsDO
.
setLevel
(
memberUserLevelConfigDO
.
getLevel
());
memberUserLevelDetailsDO
.
setSpecificSettings
(
memberUserLevelDetailsBackVO
.
getSpecificSettings
());
memberUserLevelDetailsDO
.
setValidityPeriod
(
memberUserLevelConfigDO
.
getValidityPeriod
());
memberUserLevelDetailsDO
.
setRemarks
(
memberUserLevelConfigDO
.
getDescription
());
memberUserLevelDetailsDO
.
setConfigId
(
memberUserLevelConfigDO
.
getId
());
memberUserLevelDetailsDO
.
setUpdater
(
String
.
valueOf
(
user
.
getId
()));
memberUserLevelDetailsService
.
updateById
(
memberUserLevelDetailsDO
);
log
.
info
(
"客户等级大于当前等级,当等级有效期失效,等级详情进入降级操作,规则id:{},用户id:{}"
,
memberUserLevelConfigDO
.
getRuleNumber
(),
memberId
);
//插入一条日志 降级日志
MemberUserLevelOperateLogDO
memberUserLevelOperateLogDo
=
MemberUserLevelOperateLogDO
.
builder
()
.
configId
(
memberUserLevelDetailsDO
.
getConfigId
())
.
configName
(
memberUserLevelConfigDO
.
getName
())
.
memberId
(
memberUserLevelDetailsDO
.
getMemberId
())
.
operator
(
user
.
getNickname
())
.
remarks
(
memberUserLevelDetailsDO
.
getRemarks
())
.
level
(
memberUserLevelConfigDO
.
getLevel
())
.
operateType
(
2
)
.
build
();
memberUserLevelOperateService
.
save
(
memberUserLevelOperateLogDo
);
return
true
;
}
}
}
}
return
false
;
}
}
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/vo/userLevelDetails/MemberUserLevelDetailsBackVO.java
View file @
7c69a675
...
...
@@ -45,6 +45,10 @@ public class MemberUserLevelDetailsBackVO {
@ApiModelProperty
(
value
=
"最后更新时间"
,
required
=
true
)
private
Date
updateTime
;
@DateTimeFormat
(
pattern
=
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
)
@ApiModelProperty
(
value
=
"创建时间"
,
required
=
true
)
private
Date
createTime
;
@ApiModelProperty
(
value
=
"最后更新人"
)
private
String
updater
;
...
...
yudao-module-member/yudao-module-member-impl/src/main/resources/mapper/user/MemberUserLevelDetailsMapper.xml
View file @
7c69a675
...
...
@@ -12,6 +12,7 @@
muld.updater as updater,
muld.remarks as remarks,
muld.update_time as updateTime ,
muld.create_time as createTime ,
muld.`level` as level,
muld.validity_period as validityPeriod,
muld.specific_settings as specificSettings
...
...
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