Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cust-api
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
李伟
cust-api
Commits
a4c6027b
Commit
a4c6027b
authored
Mar 20, 2025
by
liwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改了会员点赞和留言逻辑,以及修改了实名认证
parent
a184e681
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
609 additions
and
114 deletions
+609
-114
FaceVerifyServiceImpl.java
...libaba/faceVerify/service/impl/FaceVerifyServiceImpl.java
+41
-2
AppOrderController.java
...g/rcisoft/app/appOrder/controller/AppOrderController.java
+1
-24
WxMiniServiceImpl.java
...org/rcisoft/app/login/service/impl/WxMiniServiceImpl.java
+2
-0
ScheduledTaskController.java
...ess/ScheduledTask/Controller/ScheduledTaskController.java
+56
-0
ScheduledTask.java
.../rcisoft/business/ScheduledTask/entity/ScheduledTask.java
+49
-0
ScheduledTaskService.java
.../business/ScheduledTask/service/ScheduledTaskService.java
+18
-0
ScheduledTaskServiceImpl.java
.../ScheduledTask/service/impl/ScheduledTaskServiceImpl.java
+171
-0
MemInfoRepository.java
...a/org/rcisoft/business/memInfo/dao/MemInfoRepository.java
+6
-1
MemInfoServiceImpl.java
...oft/business/memInfo/service/impl/MemInfoServiceImpl.java
+103
-44
MemLeaveMessageServiceImpl.java
...LeaveMessage/service/impl/MemLeaveMessageServiceImpl.java
+151
-43
MemInfoMapper.xml
...esources/mapper/business/memInfo/mapper/MemInfoMapper.xml
+11
-0
No files found.
src/main/java/org/rcisoft/alibaba/faceVerify/service/impl/FaceVerifyServiceImpl.java
View file @
a4c6027b
...
...
@@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
java.math.BigInteger
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
...
...
@@ -270,6 +271,11 @@ public class FaceVerifyServiceImpl extends ServiceImpl<MemInfoRepository, MemInf
Integer
coinCount
=
Integer
.
valueOf
(
dictData
.
getDictValue
());
memInfo
.
setMemRealAuthen
(
"1"
);
memInfo
.
setMemRealAuthenDate
(
new
Date
());
//截取idCard身份证号 获取出生年月日20021029 变成2002-10-29
String
birth
=
idCard
.
substring
(
6
,
14
);
String
birthDate
=
birth
.
substring
(
0
,
4
)
+
"-"
+
birth
.
substring
(
4
,
6
)
+
"-"
+
birth
.
substring
(
6
);
memInfo
.
setMemBirthday
(
birthDate
);
memInfo
.
setMemConstellation
(
getConstellation
(
birthDate
));
memInfo
.
setMemIdcard
(
CyAESUtils
.
encrypt
(
idCard
));
memInfo
.
setMemRealName
(
CyAESUtils
.
encrypt
(
realName
));
memInfo
.
setGoldCoinsCount
(
coinCount
);
...
...
@@ -280,12 +286,13 @@ public class FaceVerifyServiceImpl extends ServiceImpl<MemInfoRepository, MemInf
sysUserRbacRepository
.
updateById
(
userRbac
);
//增加金币流水记录
MemGoldCoinFlow
memGoldCoinFlow
=
new
MemGoldCoinFlow
();
memGoldCoinFlow
.
setCreateBy
(
userId
);
memGoldCoinFlow
.
setUpdateBy
(
userId
);
memGoldCoinFlow
.
setCreateBy
(
String
.
valueOf
(
1
)
);
memGoldCoinFlow
.
setUpdateBy
(
String
.
valueOf
(
1
)
);
memGoldCoinFlow
.
setCount
(
coinCount
);
memGoldCoinFlow
.
setEndCount
(
coinCount
);
memGoldCoinFlow
.
setType
(
"1"
);
memGoldCoinFlow
.
setActionType
(
"12"
);
memGoldCoinFlow
.
setTargetId
(
BigInteger
.
valueOf
(
Integer
.
valueOf
(
userId
)));
memGoldCoinFlowRepository
.
insert
(
memGoldCoinFlow
);
}
else
{
HttpServletRequest
request1
=
((
ServletRequestAttributes
)
(
RequestContextHolder
.
getRequestAttributes
())).
getRequest
();
...
...
@@ -461,4 +468,36 @@ public class FaceVerifyServiceImpl extends ServiceImpl<MemInfoRepository, MemInf
}
}
}
public
static
String
getConstellation
(
String
birth
)
{
int
month
=
Integer
.
parseInt
(
birth
.
substring
(
5
,
7
));
int
day
=
Integer
.
parseInt
(
birth
.
substring
(
8
,
10
));
if
((
month
==
3
&&
day
>=
21
)
||
(
month
==
4
&&
day
<=
19
))
{
return
"3"
;
//白羊座
}
else
if
((
month
==
4
&&
day
>=
20
)
||
(
month
==
5
&&
day
<=
20
))
{
return
"4"
;
//金牛座
}
else
if
((
month
==
5
&&
day
>=
21
)
||
(
month
==
6
&&
day
<=
21
))
{
return
"5"
;
//双子座
}
else
if
((
month
==
6
&&
day
>=
22
)
||
(
month
==
7
&&
day
<=
22
))
{
return
"6"
;
//巨蟹座
}
else
if
((
month
==
7
&&
day
>=
23
)
||
(
month
==
8
&&
day
<=
22
))
{
return
"7"
;
//狮子座
}
else
if
((
month
==
8
&&
day
>=
23
)
||
(
month
==
9
&&
day
<=
22
))
{
return
"8"
;
//处女座
}
else
if
((
month
==
9
&&
day
>=
23
)
||
(
month
==
10
&&
day
<=
23
))
{
return
"9"
;
//天秤座
}
else
if
((
month
==
10
&&
day
>=
24
)
||
(
month
==
11
&&
day
<=
22
))
{
return
"10"
;
//天蝎座
}
else
if
((
month
==
11
&&
day
>=
23
)
||
(
month
==
12
&&
day
<=
21
))
{
return
"11"
;
//射手座
}
else
if
((
month
==
12
&&
day
>=
22
)
||
(
month
==
1
&&
day
<=
19
))
{
return
"12"
;
//摩羯座
}
else
if
((
month
==
1
&&
day
>=
20
)
||
(
month
==
2
&&
day
<=
18
))
{
return
"1"
;
//水瓶座
}
else
{
// 默认返回双鱼座
return
"2"
;
//双鱼座
}
}
}
src/main/java/org/rcisoft/app/appOrder/controller/AppOrderController.java
View file @
a4c6027b
...
...
@@ -3,46 +3,23 @@ package org.rcisoft.app.appOrder.controller;
/*固定导入*/
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.drew.imaging.ImageMetadataReader
;
import
com.drew.metadata.Metadata
;
import
com.drew.metadata.exif.ExifIFD0Directory
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.Parameter
;
import
io.swagger.v3.oas.annotations.Parameters
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
org.jdom.JDOMException
;
import
org.rcisoft.business.cmsOrder.entity.CmsOrder
;
import
org.rcisoft.business.cmsOrder.service.CmsOrderService
;
import
org.rcisoft.business.memInfo.entity.MemInfo
;
import
org.rcisoft.business.memInfo.service.MemInfoService
;
import
org.rcisoft.core.anno.CyEncryptSm4Anno
;
import
org.rcisoft.core.anno.CyOpeLogAnno
;
import
org.rcisoft.core.component.CyGlobal
;
import
org.rcisoft.core.constant.CyMessCons
;
import
org.rcisoft.core.controller.CyPaginationController
;
import
org.rcisoft.core.exception.CyServiceException
;
import
org.rcisoft.core.model.CyGridModel
;
import
org.rcisoft.core.model.CyPersistModel
;
import
org.rcisoft.core.operlog.enums.CyLogTypeEnum
;
import
org.rcisoft.core.result.CyResult
;
import
org.rcisoft.core.result.enums.CyResSysExcEnum
;
import
org.rcisoft.core.service.CyFileStorageService
;
import
org.rcisoft.core.util.CyResultGenUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.mock.web.MockMultipartFile
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.imageio.ImageIO
;
import
javax.validation.Valid
;
import
java.awt.*
;
import
java.awt.image.BufferedImage
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.util.Arrays
;
/**
* Created by cy on 2024年12月20日 下午3:35:34.
...
...
src/main/java/org/rcisoft/app/login/service/impl/WxMiniServiceImpl.java
View file @
a4c6027b
...
...
@@ -182,6 +182,8 @@ public class WxMiniServiceImpl implements WxMiniService {
sysUser
.
setWxNickName
(
nickName
);
sysUser
.
setWxAddress
(
address
);
sysUserRbacRepository
.
updateUserWxByPhone
(
sysUser
);
//修改会员表信息
memInfoRepository
.
updateMemSexByPhone
(
sysUser
);
//重新生成token
List
<
SysUserRbac
>
users
=
sysUserRbacRepository
.
selectByPhone
(
phone
);
if
(
CollectionUtils
.
isNotEmpty
(
users
))
{
...
...
src/main/java/org/rcisoft/business/ScheduledTask/Controller/ScheduledTaskController.java
0 → 100644
View file @
a4c6027b
package
org
.
rcisoft
.
business
.
ScheduledTask
.
Controller
;
/*固定导入*/
import
io.swagger.v3.oas.annotations.Operation
;
import
org.rcisoft.business.ScheduledTask.entity.ScheduledTask
;
import
org.rcisoft.business.ScheduledTask.service.ScheduledTaskService
;
import
org.rcisoft.core.anno.CyOpeLogAnno
;
import
org.rcisoft.core.constant.CyMessCons
;
import
org.rcisoft.core.model.CyPersistModel
;
import
org.rcisoft.core.operlog.enums.CyLogTypeEnum
;
import
org.rcisoft.core.result.CyResult
;
import
org.rcisoft.core.util.CyResultGenUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
/**
* Created by cy on 2025年1月6日 下午1:44:44.
*/
@RestController
@RequestMapping
(
"/scheduledTask"
)
public
class
ScheduledTaskController
{
@Autowired
private
ScheduledTaskService
scheduledTaskServiceImpl
;
@PreAuthorize
(
"@cyPerm.hasPerm('sys:scheduledTask:list')"
)
@CyOpeLogAnno
(
title
=
"system-定时任务管理-查询定时任务"
,
businessType
=
CyLogTypeEnum
.
QUERY
)
@Operation
(
summary
=
"查询所有定时任务列表"
,
description
=
"查询所有定时任务列表"
)
@GetMapping
(
value
=
"/scheduledTaskList"
)
public
CyResult
scheduledTaskList
(
ScheduledTask
scheduledTask
)
{
return
CyResultGenUtil
.
builder
(
new
CyPersistModel
(
1
),
CyMessCons
.
MESSAGE_ALERT_SUCCESS
,
CyMessCons
.
MESSAGE_ALERT_ERROR
,
scheduledTaskServiceImpl
.
scheduledTaskList
(
scheduledTask
));
}
@PreAuthorize
(
"@cyPerm.hasPerm('sys:scheduledTask:list')"
)
@CyOpeLogAnno
(
title
=
"system-定时任务管理-手动执行定时任务"
,
businessType
=
CyLogTypeEnum
.
QUERY
)
@Operation
(
summary
=
"手动执行定时任务"
,
description
=
"手动执行定时任务"
)
@GetMapping
(
value
=
"/executeScheduledTask/{type:\\w+}"
)
public
CyResult
executeScheduledTask
(
@PathVariable
String
type
)
{
return
CyResultGenUtil
.
builder
(
new
CyPersistModel
(
1
),
CyMessCons
.
MESSAGE_ALERT_SUCCESS
,
CyMessCons
.
MESSAGE_ALERT_ERROR
,
scheduledTaskServiceImpl
.
executeScheduledTask
(
type
));
}
}
src/main/java/org/rcisoft/business/ScheduledTask/entity/ScheduledTask.java
0 → 100644
View file @
a4c6027b
package
org
.
rcisoft
.
business
.
ScheduledTask
.
entity
;
import
cn.afterturn.easypoi.excel.annotation.Excel
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.Data
;
import
org.rcisoft.core.entity.CyIdNotDataEntity
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.util.Date
;
/**
* Created with cy on 2025年2月20日 上午11:14:19.
*/
@Data
public
class
ScheduledTask
{
/**
* @desc 任务名称
* @column task_name
* @default
*/
private
String
taskName
;
/**
* @desc 执行时间
* @column task_time
* @default
*/
private
String
taskTime
;
/**
* redis定时任务
* 1:订单落库
* 2:订单关闭
* 3:支付确认补救
* 4:退款接口调用补救
* 5:退款确认补救
* 6:订单缓存清除
* 7:定时更新访问量表
* 8:定时更新话题表 刷新话题表的动态数
* 9:定时更新会员表 刷新会员的被关注数和被点赞数
*/
private
String
type
;
}
src/main/java/org/rcisoft/business/ScheduledTask/service/ScheduledTaskService.java
0 → 100644
View file @
a4c6027b
package
org
.
rcisoft
.
business
.
ScheduledTask
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
org.rcisoft.business.ScheduledTask.entity.ScheduledTask
;
import
org.rcisoft.business.sysScheduledTaskLog.entity.SysScheduledTaskLog
;
import
org.rcisoft.core.model.CyPageInfo
;
import
org.rcisoft.core.model.CyPersistModel
;
import
java.util.List
;
/**
* Created by cy on 2025年2月20日 上午11:14:19.
*/
public
interface
ScheduledTaskService
{
List
<
ScheduledTask
>
scheduledTaskList
(
ScheduledTask
ScheduledTask
);
CyPersistModel
executeScheduledTask
(
String
type
);
}
src/main/java/org/rcisoft/business/ScheduledTask/service/impl/ScheduledTaskServiceImpl.java
0 → 100644
View file @
a4c6027b
package
org
.
rcisoft
.
business
.
ScheduledTask
.
service
.
impl
;
import
lombok.extern.slf4j.Slf4j
;
import
org.rcisoft.business.ScheduledTask.entity.ScheduledTask
;
import
org.rcisoft.business.ScheduledTask.service.ScheduledTaskService
;
import
org.rcisoft.business.cmsOrder.service.impl.CmsOrderServiceImpl
;
import
org.rcisoft.business.memInfo.service.impl.MemInfoServiceImpl
;
import
org.rcisoft.business.memLeaveMessage.service.impl.MemLeaveMessageServiceImpl
;
import
org.rcisoft.business.memTraffic.service.impl.MemTrafficServiceImpl
;
import
org.rcisoft.business.opmTopic.service.impl.OpmTopicServiceImpl
;
import
org.rcisoft.core.model.CyPersistModel
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* Created by cy on 2025年2月20日 上午11:14:19.
*/
@Service
@Transactional
(
readOnly
=
true
,
propagation
=
Propagation
.
NOT_SUPPORTED
)
@Slf4j
public
class
ScheduledTaskServiceImpl
implements
ScheduledTaskService
{
@Autowired
private
MemInfoServiceImpl
memInfoService
;
@Autowired
private
CmsOrderServiceImpl
orderService
;
@Autowired
private
MemLeaveMessageServiceImpl
memLeaveMessageService
;
@Autowired
private
MemTrafficServiceImpl
memTrafficService
;
@Autowired
private
OpmTopicServiceImpl
opmTopicServiceImpl
;
@Override
public
List
<
ScheduledTask
>
scheduledTaskList
(
ScheduledTask
ScheduledTask
)
{
List
<
ScheduledTask
>
scheduledTaskList
=
new
ArrayList
<>();
//1、订单落库定时任务 type:1
ScheduledTask
task1
=
new
ScheduledTask
();
task1
.
setTaskName
(
"订单落库定时任务"
);
task1
.
setTaskTime
(
"每1分钟执行一次"
);
task1
.
setType
(
"1"
);
//2、订单落库定时任务 type:1
ScheduledTask
task2
=
new
ScheduledTask
();
task2
.
setTaskName
(
"订单关闭定时任务"
);
task2
.
setTaskTime
(
"每1分钟执行一次"
);
task2
.
setType
(
"2"
);
//3、订单落库定时任务 type:1
ScheduledTask
task3
=
new
ScheduledTask
();
task3
.
setTaskName
(
"支付确认补救定时任务"
);
task3
.
setTaskTime
(
"每15分钟执行一次"
);
task3
.
setType
(
"3"
);
//4、订单落库定时任务 type:1
ScheduledTask
task4
=
new
ScheduledTask
();
task4
.
setTaskName
(
"退款接口调用补救定时任务"
);
task4
.
setTaskTime
(
"每30分钟执行一次"
);
task4
.
setType
(
"4"
);
//5、订单落库定时任务 type:1
ScheduledTask
task5
=
new
ScheduledTask
();
task5
.
setTaskName
(
"退款确认补救定时任务"
);
task5
.
setTaskTime
(
"每30分钟执行一次"
);
task5
.
setType
(
"5"
);
//6、订单落库定时任务 type:1
ScheduledTask
task6
=
new
ScheduledTask
();
task6
.
setTaskName
(
"订单缓存清除定时任务"
);
task6
.
setTaskTime
(
"每天1点执行一次"
);
task6
.
setType
(
"6"
);
//7、订单落库定时任务 type:1
ScheduledTask
task7
=
new
ScheduledTask
();
task7
.
setTaskName
(
"定时更新访问量表定时任务"
);
task7
.
setTaskTime
(
"每15分钟执行一次"
);
task7
.
setType
(
"7"
);
//8、订单落库定时任务 type:1
ScheduledTask
task8
=
new
ScheduledTask
();
task8
.
setTaskName
(
"定时更新话题表定时任务"
);
task8
.
setTaskTime
(
"每2小时执行一次"
);
task8
.
setType
(
"8"
);
//9、订单落库定时任务 type:1
ScheduledTask
task9
=
new
ScheduledTask
();
task9
.
setTaskName
(
"定时更新会员表定时任务"
);
task9
.
setTaskTime
(
"每2小时执行一次"
);
task9
.
setType
(
"9"
);
scheduledTaskList
.
add
(
task1
);
scheduledTaskList
.
add
(
task2
);
scheduledTaskList
.
add
(
task3
);
scheduledTaskList
.
add
(
task4
);
scheduledTaskList
.
add
(
task5
);
scheduledTaskList
.
add
(
task6
);
scheduledTaskList
.
add
(
task7
);
scheduledTaskList
.
add
(
task8
);
scheduledTaskList
.
add
(
task9
);
return
scheduledTaskList
;
}
@Override
public
CyPersistModel
executeScheduledTask
(
String
type
)
{
int
line
=
0
;
if
(
type
.
equals
(
"1"
)){
try
{
orderService
.
executeInsertOrder
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"2"
)){
try
{
orderService
.
executeCloseOrder
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"3"
)){
try
{
orderService
.
executePayOrder
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"4"
)){
try
{
orderService
.
executeRefundOrder
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"5"
)){
try
{
orderService
.
executeRefundConfirmOrder
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"6"
)){
try
{
orderService
.
executeDeleteOrder
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"7"
)){
try
{
memTrafficService
.
memTrafficSchedule
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"8"
)){
try
{
opmTopicServiceImpl
.
opmTopicSchedule
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
else
if
(
type
.
equals
(
"9"
)){
try
{
memInfoService
.
refreshMemLikeAndFollowCountSchedule
();
line
=
1
;
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
}
return
new
CyPersistModel
(
1
);
}
}
src/main/java/org/rcisoft/business/memInfo/dao/MemInfoRepository.java
View file @
a4c6027b
...
...
@@ -246,8 +246,13 @@ public interface MemInfoRepository extends CyBaseMapper<MemInfo> {
String
getUserIsStop
(
String
userId
);
/**
* 根据手机号修改
用户信息
* 根据手机号修改
会员openid
*/
int
updateMemWxByPhone
(
SysUserRbac
var1
);
/**
* 根据手机号修改会员性别
*/
int
updateMemSexByPhone
(
SysUserRbac
var1
);
}
src/main/java/org/rcisoft/business/memInfo/service/impl/MemInfoServiceImpl.java
View file @
a4c6027b
...
...
@@ -13,6 +13,7 @@ import org.rcisoft.business.memInfo.bean.MemberInfoRedisBean;
import
org.rcisoft.business.memInfo.entity.*
;
import
org.rcisoft.business.memLeaveMessage.bean.MemLeaveMessageRedisBean
;
import
org.rcisoft.business.memLeaveMessage.entity.MemLeaveMessage
;
import
org.rcisoft.business.opmArticle.entity.LikeDTO
;
import
org.rcisoft.business.sysScheduledTaskLog.entity.SysScheduledTaskLog
;
import
org.rcisoft.business.sysScheduledTaskLog.service.SysScheduledTaskLogService
;
import
org.rcisoft.core.constant.CyDelStaCons
;
...
...
@@ -700,12 +701,12 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
Integer
userLikeLimitCount
=
Integer
.
valueOf
(
dictData1
.
getDictValue
());
//给每个人最多免费点赞次数限制
Integer
payUserLikeLimitCount
=
Integer
.
valueOf
(
dictData2
.
getDictValue
());
//付费的点赞次数限制
Integer
personalAllCount
=
userLikeLimitCount
+
payUserLikeLimitCount
;
//(个人)免费+付费 次数限制
Integer
allCount
=
Integer
.
valueOf
(
dictData3
.
getDictValue
());
//(所有人)总共点赞次数限制
Integer
allCount
=
Integer
.
valueOf
(
dictData3
.
getDictValue
());
//(所有人)总共点赞次数限制
(免费)
//获取redis中已存储的限制次数
Object
redisUserLikeCount
=
cyRedisServiceImpl
.
hget
(
MemberInfoRedisBean
.
USER_LIKE
+
date
+
":"
+
userId
,
String
.
valueOf
(
likeDTO
.
getTargetId
()));
Object
redisUserLikeCountAll
=
cyRedisServiceImpl
.
get
(
MemberInfoRedisBean
.
USER_LIKE_ALL
+
date
+
":"
+
userId
);
//1.进行总数对比
if
(
redisUserLikeCountAll
!=
null
&&
(
int
)
redisUserLikeCountAll
<
=
allCount
){
//1.进行
免费
总数对比
if
(
redisUserLikeCountAll
!=
null
&&
(
int
)
redisUserLikeCountAll
<
allCount
){
//没超出总次数限制
//2.进行判断对目标用户的点赞总次数
if
(
redisUserLikeCount
!=
null
&&
(
int
)
redisUserLikeCount
<
personalAllCount
){
...
...
@@ -716,43 +717,14 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
//4.判断用户是否选择付费点赞
if
(
likeDTO
.
getIsPay
().
equals
(
"1"
)){
//付费点赞
//加redis锁
boolean
isGetLock
=
false
;
RLock
lock
=
redissonClient
.
getLock
(
MemberInfoRedisBean
.
USER_LIKE_LOCK
+
userId
);
try
{
isGetLock
=
lock
.
tryLock
(
Long
.
parseLong
(
MemberInfoRedisBean
.
USER_LIKE_LOCK_WAIT_TIME
),
Long
.
parseLong
(
MemberInfoRedisBean
.
USER_LIKE_LOCK_LEASE_TIME
),
TimeUnit
.
SECONDS
);
if
(
isGetLock
)
{
//扣除该用户的金币数量
DictData
dictData4
=
userLikeConfig
.
stream
().
filter
(
item
->
item
.
getDictLabel
().
equals
(
"pay_count"
)).
findFirst
().
orElse
(
null
);
Integer
payCount
=
Integer
.
valueOf
(
dictData4
.
getDictValue
());
MemInfo
memInfo
=
memInfoRepository
.
selectByOpenId
(
likeDTO
.
getWxOpenid
());
if
(
memInfo
.
getGoldCoinsCount
()
-
payCount
<
0
){
throw
new
CyServiceException
(
1003
,
"金币不足,请先充值"
);
}
memInfo
.
setGoldCoinsCount
(
memInfo
.
getGoldCoinsCount
()
-
payCount
);
memInfoRepository
.
updateById
(
memInfo
);
//添加消费记录
MemGoldCoinFlow
memGoldCoinFlow
=
new
MemGoldCoinFlow
();
memGoldCoinFlow
.
setType
(
"2"
);
memGoldCoinFlow
.
setActionType
(
"20"
);
memGoldCoinFlow
.
setCount
(
payCount
);
memGoldCoinFlow
.
setEndCount
(
memInfo
.
getGoldCoinsCount
());
memGoldCoinFlow
.
setTargetId
(
BigInteger
.
valueOf
(
likeDTO
.
getTargetId
()));
memGoldCoinFlowRepository
.
insert
(
memGoldCoinFlow
);
}
}
catch
(
InterruptedException
e
)
{
Thread
.
currentThread
().
interrupt
();
isGetLock
=
false
;
throw
new
CyServiceException
(
1004
,
"服务器繁忙,请稍后再试"
);
}
finally
{
lock
.
unlock
();
log
.
error
(
"释放成功"
);
}
//扣除金币和增加消费记录
consumeGlodCoinForLike
(
userLikeConfig
,
userId
,
likeDTO
);
}
else
{
//已超出今日对目标用户的点赞限制
throw
new
CyServiceException
(
1001
,
"今日对该用户点赞次数已达上限,请明日再试!"
);
}
}
else
{
this
.
redisTemplate
.
opsForValue
().
increment
(
MemberInfoRedisBean
.
USER_LIKE_ALL
+
date
+
":"
+
userId
,
(
long
)
1L
);
}
//当天 点赞表对应的记录+1
// 获取今天的最小时间(00:00:00)
...
...
@@ -770,10 +742,9 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
memInfoRepository
.
addLikeCount
(
likeDTO
);
//没超出免费点赞次数
this
.
redisTemplate
.
opsForHash
().
increment
(
MemberInfoRedisBean
.
USER_LIKE
+
date
+
":"
+
userId
,
String
.
valueOf
(
likeDTO
.
getTargetId
()),
(
double
)
1L
);
this
.
redisTemplate
.
opsForValue
().
increment
(
MemberInfoRedisBean
.
USER_LIKE_ALL
+
date
+
":"
+
userId
,
(
long
)
1L
);
return
new
CyPersistModel
(
1
);
}
else
if
(
redisUserLikeCount
==
null
){
//今日第一次对该用户进行点赞
//今日第一次对该用户进行点赞
并且没超出总免费次数
cyRedisServiceImpl
.
hset
(
MemberInfoRedisBean
.
USER_LIKE
+
date
+
":"
+
userId
,
String
.
valueOf
(
likeDTO
.
getTargetId
()),
1L
);
this
.
redisTemplate
.
opsForValue
().
increment
(
MemberInfoRedisBean
.
USER_LIKE_ALL
+
date
+
":"
+
userId
,
(
long
)
1L
);
cyRedisServiceImpl
.
expire
(
MemberInfoRedisBean
.
USER_LIKE
+
date
+
":"
+
userId
,
48
*
60
*
60
);
// 24小时
...
...
@@ -797,11 +768,99 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
memInfoRepository
.
addLike
(
likeDTO
);
return
new
CyPersistModel
(
1
);
}
else
{
//超出总次数限制
throw
new
CyServiceException
(
1002
,
"今日点赞次数已达上限,请明日再试!"
);
//超出免费总次数限制
//判断对该用户是否超出今日最大点赞数
if
(
redisUserLikeCount
!=
null
&&
(
int
)
redisUserLikeCount
<
personalAllCount
){
//没超出 付金币
if
(
likeDTO
.
getIsPay
().
equals
(
"1"
)){
//付费点赞
//扣除金币和增加消费记录
consumeGlodCoinForLike
(
userLikeConfig
,
userId
,
likeDTO
);
//当天 点赞表对应的记录+1
// 获取今天的最小时间(00:00:00)
LocalDateTime
startOfDay
=
today
.
atStartOfDay
();
// 获取今天的最大时间(23:59:59)
LocalDateTime
endOfDay
=
today
.
atTime
(
LocalTime
.
MAX
);
// 定义日期时间格式
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
// 最大时间 和 最小时间
String
beginTime
=
startOfDay
.
format
(
formatter
);
String
endTime
=
endOfDay
.
format
(
formatter
);
likeDTO
.
setBeginTime
(
beginTime
);
likeDTO
.
setEndTime
(
endTime
);
likeDTO
.
setUserId
(
Integer
.
valueOf
(
userId
));
memInfoRepository
.
addLikeCount
(
likeDTO
);
//没超出免费点赞次数
this
.
redisTemplate
.
opsForHash
().
increment
(
MemberInfoRedisBean
.
USER_LIKE
+
date
+
":"
+
userId
,
String
.
valueOf
(
likeDTO
.
getTargetId
()),
(
double
)
1L
);
return
new
CyPersistModel
(
1
);
}
else
{
//已超出今日对目标用户的点赞限制
throw
new
CyServiceException
(
1001
,
"今日对该用户点赞次数已达上限,请明日再试!"
);
}
}
else
if
(
redisUserLikeCount
==
null
){
//当天第一次对这个用户进行点赞
//没超出 但需要付金币进行点赞 因为总免费次数已用完
if
(
likeDTO
.
getIsPay
().
equals
(
"1"
)){
//付费点赞
//扣除金币和增加消费记录
consumeGlodCoinForLike
(
userLikeConfig
,
userId
,
likeDTO
);
}
else
{
//已超出今日对目标用户的点赞限制
throw
new
CyServiceException
(
1001
,
"今日对该用户点赞次数已达上限,请明日再试!"
);
}
//今日第一次对该用户进行点赞
cyRedisServiceImpl
.
hset
(
MemberInfoRedisBean
.
USER_LIKE
+
date
+
":"
+
userId
,
String
.
valueOf
(
likeDTO
.
getTargetId
()),
1L
);
cyRedisServiceImpl
.
expire
(
MemberInfoRedisBean
.
USER_LIKE
+
date
+
":"
+
userId
,
48
*
60
*
60
);
// 24小时
//新增点赞数据
likeDTO
.
setUserId
(
Integer
.
valueOf
(
userId
));
likeDTO
.
setLikeCount
(
1
);
memInfoRepository
.
addLike
(
likeDTO
);
return
new
CyPersistModel
(
1
);
}
else
{
//超出了
throw
new
CyServiceException
(
1001
,
"今日对该用户点赞次数已达上限,请明日再试!"
);
}
}
}
//会员点赞扣除金币和增加消费记录
private
void
consumeGlodCoinForLike
(
List
<
DictData
>
userLikeConfig
,
String
userId
,
MemLikeDTO
likeDTO
)
{
//加redis锁
boolean
isGetLock
=
false
;
RLock
lock
=
redissonClient
.
getLock
(
MemberInfoRedisBean
.
USER_LIKE_LOCK
+
userId
);
try
{
isGetLock
=
lock
.
tryLock
(
Long
.
parseLong
(
MemberInfoRedisBean
.
USER_LIKE_LOCK_WAIT_TIME
),
Long
.
parseLong
(
MemberInfoRedisBean
.
USER_LIKE_LOCK_LEASE_TIME
),
TimeUnit
.
SECONDS
);
if
(
isGetLock
)
{
//扣除该用户的金币数量
DictData
dictData4
=
userLikeConfig
.
stream
().
filter
(
item
->
item
.
getDictLabel
().
equals
(
"pay_count"
)).
findFirst
().
orElse
(
null
);
Integer
payCount
=
Integer
.
valueOf
(
dictData4
.
getDictValue
());
MemInfo
memInfo
=
memInfoRepository
.
selectByOpenId
(
likeDTO
.
getWxOpenid
());
if
(
memInfo
.
getGoldCoinsCount
()
-
payCount
<
0
){
throw
new
CyServiceException
(
1003
,
"金币不足,请先充值"
);
}
memInfo
.
setGoldCoinsCount
(
memInfo
.
getGoldCoinsCount
()
-
payCount
);
memInfoRepository
.
updateById
(
memInfo
);
//添加消费记录
MemGoldCoinFlow
memGoldCoinFlow
=
new
MemGoldCoinFlow
();
memGoldCoinFlow
.
setType
(
"2"
);
memGoldCoinFlow
.
setActionType
(
"20"
);
memGoldCoinFlow
.
setCount
(
payCount
);
memGoldCoinFlow
.
setEndCount
(
memInfo
.
getGoldCoinsCount
());
memGoldCoinFlow
.
setTargetId
(
BigInteger
.
valueOf
(
likeDTO
.
getTargetId
()));
memGoldCoinFlowRepository
.
insert
(
memGoldCoinFlow
);
}
}
catch
(
InterruptedException
e
)
{
Thread
.
currentThread
().
interrupt
();
isGetLock
=
false
;
throw
new
CyServiceException
(
1004
,
"服务器繁忙,请稍后再试"
);
}
finally
{
lock
.
unlock
();
log
.
error
(
"释放成功"
);
}
}
/**
* 查询排行榜
* @param memInfo
...
...
@@ -995,16 +1054,16 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
}
}
SysScheduledTaskLog
sysScheduledTaskLog
=
new
SysScheduledTaskLog
();
sysScheduledTaskLog
.
setTaskName
(
"定时更新会员表
的被点赞数和被关注数
定时任务"
);
sysScheduledTaskLog
.
setTaskName
(
"定时更新会员表定时任务"
);
sysScheduledTaskLog
.
setTaskState
(
"成功"
);
sysScheduledTaskLog
.
setTaskTime
(
"每
4
小时执行一次"
);
sysScheduledTaskLog
.
setTaskTime
(
"每
2
小时执行一次"
);
sysScheduledTaskLog
.
setCreateDate
(
new
Date
());
sysScheduledTaskLogServiceImpl
.
persist
(
sysScheduledTaskLog
);
}
catch
(
Exception
e
){
SysScheduledTaskLog
sysScheduledTaskLog
=
new
SysScheduledTaskLog
();
sysScheduledTaskLog
.
setTaskName
(
"定时更新会员表
的被点赞数和被关注数
定时任务"
);
sysScheduledTaskLog
.
setTaskName
(
"定时更新会员表定时任务"
);
sysScheduledTaskLog
.
setTaskState
(
"失败"
);
sysScheduledTaskLog
.
setTaskTime
(
"每
4
小时执行一次"
);
sysScheduledTaskLog
.
setTaskTime
(
"每
2你
小时执行一次"
);
sysScheduledTaskLog
.
setCreateDate
(
new
Date
());
sysScheduledTaskLogServiceImpl
.
persist
(
sysScheduledTaskLog
);
}
...
...
src/main/java/org/rcisoft/business/memLeaveMessage/service/impl/MemLeaveMessageServiceImpl.java
View file @
a4c6027b
...
...
@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import
lombok.extern.slf4j.Slf4j
;
import
org.rcisoft.business.memGoldCoinFlow.dao.MemGoldCoinFlowRepository
;
import
org.rcisoft.business.memGoldCoinFlow.entity.MemGoldCoinFlow
;
import
org.rcisoft.business.memInfo.bean.MemberInfoRedisBean
;
import
org.rcisoft.business.memInfo.dao.MemInfoRepository
;
import
org.rcisoft.business.memInfo.entity.MemInfo
;
import
org.rcisoft.business.memInfo.entity.MemLikeDTO
;
import
org.rcisoft.business.memInfo.service.impl.MemInfoServiceImpl
;
import
org.rcisoft.business.memLeaveMessage.bean.MemLeaveMessageRedisBean
;
import
org.rcisoft.business.memLeaveMessage.dao.MemLeaveMessageRepository
;
...
...
@@ -109,10 +111,10 @@ public class MemLeaveMessageServiceImpl extends ServiceImpl<MemLeaveMessageRepos
Object
redisLeaveMessageCount
=
cyRedisServiceImpl
.
hget
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE
+
date
+
":"
+
userId
,
String
.
valueOf
(
memLeaveMessage
.
getTargetId
()));
Object
redisLeaveMessageCountAll
=
cyRedisServiceImpl
.
get
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_All
+
date
+
":"
+
userId
);
//1.进行总数对比
if
(
redisLeaveMessageCountAll
!=
null
&&
(
int
)
redisLeaveMessageCountAll
<
=
allCount
){
//没超出总次数限制
if
(
redisLeaveMessageCountAll
!=
null
&&
(
int
)
redisLeaveMessageCountAll
<
allCount
){
//没超出
免费
总次数限制
//2.进行判断对目标用户的留言总次数
if
(
redisLeaveMessageCount
!=
null
&&
(
int
)
redisLeaveMessageCount
<
=
personalAllCount
){
if
(
redisLeaveMessageCount
!=
null
&&
(
int
)
redisLeaveMessageCount
<
personalAllCount
){
//没超出对目标用户的留言总次数(免费+付费)
//3.判断对目标用户的免费留言次数
if
(
redisLeaveMessageCount
!=
null
&&
(
int
)
redisLeaveMessageCount
>=
leaveMessageLimitCount
)
{
...
...
@@ -120,43 +122,16 @@ public class MemLeaveMessageServiceImpl extends ServiceImpl<MemLeaveMessageRepos
//4.判断用户是否选择付费留言
if
(
memLeaveMessage
.
getIsPay
().
equals
(
"1"
)){
//付费留言
//加redis锁
boolean
isGetLock
=
false
;
RLock
lock
=
redissonClient
.
getLock
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_LOCK
+
userId
);
try
{
isGetLock
=
lock
.
tryLock
(
Long
.
parseLong
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_LOCK_WAIT_TIME
),
Long
.
parseLong
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_LOCK_LEASE_TIME
),
TimeUnit
.
SECONDS
);
if
(
isGetLock
)
{
//扣除该用户的金币数量
DictData
dictData4
=
leaveMessageConfig
.
stream
().
filter
(
item
->
item
.
getDictLabel
().
equals
(
"pay_count"
)).
findFirst
().
orElse
(
null
);
Integer
payCount
=
Integer
.
valueOf
(
dictData4
.
getDictValue
());
MemInfo
memInfo
=
memInfoRepository
.
selectByOpenId
(
memLeaveMessage
.
getWxOpenid
());
if
(
memInfo
.
getGoldCoinsCount
()
-
payCount
<
0
){
throw
new
CyServiceException
(
1003
,
"金币不足,请先充值!"
);
}
memInfo
.
setGoldCoinsCount
(
memInfo
.
getGoldCoinsCount
()
-
payCount
);
memInfoRepository
.
updateById
(
memInfo
);
//添加消费记录
MemGoldCoinFlow
memGoldCoinFlow
=
new
MemGoldCoinFlow
();
memGoldCoinFlow
.
setType
(
"2"
);
memGoldCoinFlow
.
setActionType
(
"22"
);
memGoldCoinFlow
.
setCount
(
payCount
);
memGoldCoinFlow
.
setEndCount
(
memInfo
.
getGoldCoinsCount
());
memGoldCoinFlow
.
setTargetId
(
BigInteger
.
valueOf
(
memLeaveMessage
.
getTargetId
()));
memGoldCoinFlowRepository
.
insert
(
memGoldCoinFlow
);
}
}
catch
(
InterruptedException
e
)
{
Thread
.
currentThread
().
interrupt
();
isGetLock
=
false
;
throw
new
CyServiceException
(
1004
,
"服务器繁忙,请稍后再试"
);
}
finally
{
lock
.
unlock
();
log
.
error
(
"释放成功"
);
}
//扣除金币,增加消费记录
consumeGlodCoinForLeaveMessage
(
leaveMessageConfig
,
userId
,
memLeaveMessage
);
}
else
{
//不进行留言
throw
new
CyServiceException
(
1001
,
"今日留言次数已达上限,请明日再试!"
);
}
}
else
{
//没超出 进行免费留言
//免费留言总次数+1
this
.
redisTemplate
.
opsForValue
().
increment
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_All
+
date
+
":"
+
userId
,
(
long
)
1L
);
}
//先插入到留言表
memLeaveMessage
.
setCreateBy
(
Integer
.
valueOf
(
userId
));
...
...
@@ -188,10 +163,10 @@ public class MemLeaveMessageServiceImpl extends ServiceImpl<MemLeaveMessageRepos
if
(
line1
>
0
)
{
//插入对话表成功,则更新redis
this
.
redisTemplate
.
opsForHash
().
increment
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE
+
date
+
":"
+
userId
,
String
.
valueOf
(
memLeaveMessage
.
getTargetId
()),
(
double
)
1L
);
this
.
redisTemplate
.
opsForValue
().
increment
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_All
+
date
+
":"
+
userId
,
(
long
)
1L
);
}
return
new
CyPersistModel
(
line
);
}
else
if
(
redisLeaveMessageCount
==
null
){
}
else
if
(
redisLeaveMessageCount
==
null
){
//今日第一次对该用户进行留言
//先插入到留言表
memLeaveMessage
.
setCreateBy
(
Integer
.
valueOf
(
userId
));
...
...
@@ -232,10 +207,12 @@ public class MemLeaveMessageServiceImpl extends ServiceImpl<MemLeaveMessageRepos
}
}
return
new
CyPersistModel
(
line
);
}
else
{
}
else
{
throw
new
CyServiceException
(
1001
,
"今日留言次数已达上限,请明日再试!"
);
}
}
else
if
(
redisLeaveMessageCountAll
==
null
){
}
else
if
(
redisLeaveMessageCountAll
==
null
){
//当天第一次进行留言
//先插入到留言表
memLeaveMessage
.
setCreateBy
(
Integer
.
valueOf
(
userId
));
...
...
@@ -271,12 +248,143 @@ public class MemLeaveMessageServiceImpl extends ServiceImpl<MemLeaveMessageRepos
cyRedisServiceImpl
.
expire
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE
+
date
+
":"
+
userId
,
48
*
60
*
60
);
// 24小时
}
return
new
CyPersistModel
(
line1
);
}
else
{
//超出总次数限制
throw
new
CyServiceException
(
1002
,
"今日留言次数已达上限,请明日再试!"
);
}
else
{
//超出免费总次数限制
//判断对该用户是否超出今日最大留言数
if
(
redisLeaveMessageCount
!=
null
&&
(
int
)
redisLeaveMessageCount
<
personalAllCount
){
if
(
memLeaveMessage
.
getIsPay
().
equals
(
"1"
)){
//付费留言
//扣除金币,增加消费记录
consumeGlodCoinForLeaveMessage
(
leaveMessageConfig
,
userId
,
memLeaveMessage
);
//先插入到留言表
memLeaveMessage
.
setCreateBy
(
Integer
.
valueOf
(
userId
));
memLeaveMessage
.
setUpdateBy
(
Integer
.
valueOf
(
userId
));
memLeaveMessage
.
setCreateDate
(
new
Date
());
memLeaveMessage
.
setUpdateDate
(
new
Date
());
memLeaveMessage
.
setReadStatus
(
"0"
);
int
line
=
memLeaveMessageRepository
.
insert
(
memLeaveMessage
);
//修改对话表
//查询是否已存在对话
MemLeaveMessage
memUserTalks
=
memLeaveMessageRepository
.
queryUserTalk
(
Integer
.
valueOf
(
userId
),
memLeaveMessage
.
getTargetId
());
MemLeaveMessage
memUserTalk
=
new
MemLeaveMessage
();
memUserTalk
.
setCreateBy
(
Integer
.
valueOf
(
userId
));
memUserTalk
.
setUpdateBy
(
Integer
.
valueOf
(
userId
));
memUserTalk
.
setTargetId
(
memLeaveMessage
.
getTargetId
());
memUserTalk
.
setContent
(
memLeaveMessage
.
getContent
());
memUserTalk
.
setCreateDate
(
new
Date
());
memUserTalk
.
setUpdateDate
(
new
Date
());
memUserTalk
.
setDelUser
(
0
);
int
line1
=
0
;
if
(
memUserTalks
!=
null
){
//如果已经存在该对话,则只更新信息
memUserTalk
.
setBusinessId
(
memUserTalks
.
getBusinessId
());
line1
=
memLeaveMessageRepository
.
updateUserTalk
(
memUserTalk
);
}
else
{
//不存在该对话,则插入对话表
line1
=
memLeaveMessageRepository
.
insertUserTalk
(
memUserTalk
);
}
if
(
line1
>
0
)
{
//插入对话表成功,则更新redis
this
.
redisTemplate
.
opsForHash
().
increment
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE
+
date
+
":"
+
userId
,
String
.
valueOf
(
memLeaveMessage
.
getTargetId
()),
(
double
)
1L
);
}
return
new
CyPersistModel
(
line
);
}
else
{
//不进行留言
throw
new
CyServiceException
(
1001
,
"今日留言次数已达上限,请明日再试!"
);
}
}
else
if
(
redisLeaveMessageCount
==
null
){
//今日第一次对该用户进行留言
if
(
memLeaveMessage
.
getIsPay
().
equals
(
"1"
)){
//扣除金币,增加消费记录
consumeGlodCoinForLeaveMessage
(
leaveMessageConfig
,
userId
,
memLeaveMessage
);
//先插入到留言表
memLeaveMessage
.
setCreateBy
(
Integer
.
valueOf
(
userId
));
memLeaveMessage
.
setUpdateBy
(
Integer
.
valueOf
(
userId
));
memLeaveMessage
.
setCreateDate
(
new
Date
());
memLeaveMessage
.
setUpdateDate
(
new
Date
());
memLeaveMessage
.
setReadStatus
(
"0"
);
int
line
=
memLeaveMessageRepository
.
insert
(
memLeaveMessage
);
//查询是否已存在对话
MemLeaveMessage
memUserTalks
=
memLeaveMessageRepository
.
queryUserTalk
(
Integer
.
valueOf
(
userId
),
memLeaveMessage
.
getTargetId
());
//如果已经存在该对话,则只更新信息
MemLeaveMessage
memUserTalk
=
new
MemLeaveMessage
();
memUserTalk
.
setCreateBy
(
Integer
.
valueOf
(
userId
));
memUserTalk
.
setUpdateBy
(
Integer
.
valueOf
(
userId
));
memUserTalk
.
setTargetId
(
memLeaveMessage
.
getTargetId
());
memUserTalk
.
setContent
(
memLeaveMessage
.
getContent
());
memUserTalk
.
setCreateDate
(
new
Date
());
memUserTalk
.
setUpdateDate
(
new
Date
());
//留言未删除默认值为0
memUserTalk
.
setDelUser
(
0
);
if
(
memUserTalks
!=
null
){
//已经给该用户留过言
memUserTalk
.
setBusinessId
(
memUserTalks
.
getBusinessId
());
int
line1
=
memLeaveMessageRepository
.
updateUserTalk
(
memUserTalk
);
if
(
line1
>
0
)
{
//插入对话表成功,则更新redis
cyRedisServiceImpl
.
hset
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE
+
date
+
":"
+
userId
,
String
.
valueOf
(
memLeaveMessage
.
getTargetId
()),
1L
);
this
.
redisTemplate
.
opsForValue
().
increment
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_All
+
date
+
":"
+
userId
,
(
long
)
1L
);
}
return
new
CyPersistModel
(
line1
);
}
else
{
//第一次给该用户进行留言
int
line1
=
memLeaveMessageRepository
.
insertUserTalk
(
memUserTalk
);
if
(
line1
>
0
)
{
//插入对话表成功,则更新redis
cyRedisServiceImpl
.
hset
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE
+
date
+
":"
+
userId
,
String
.
valueOf
(
memLeaveMessage
.
getTargetId
()),
1L
);
this
.
redisTemplate
.
opsForValue
().
increment
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_All
+
date
+
":"
+
userId
,
(
long
)
1L
);
}
}
return
new
CyPersistModel
(
line
);
}
else
{
throw
new
CyServiceException
(
1001
,
"今日留言次数已达上限,请明日再试!"
);
}
}
else
{
throw
new
CyServiceException
(
1001
,
"今日留言次数已达上限,请明日再试!"
);
}
}
}
//会员留言扣除金币和增加消费记录
private
void
consumeGlodCoinForLeaveMessage
(
List
<
DictData
>
leaveMessageConfig
,
String
userId
,
MemLeaveMessage
memLeaveMessage
)
{
//加redis锁
boolean
isGetLock
=
false
;
RLock
lock
=
redissonClient
.
getLock
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_LOCK
+
userId
);
try
{
isGetLock
=
lock
.
tryLock
(
Long
.
parseLong
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_LOCK_WAIT_TIME
),
Long
.
parseLong
(
MemLeaveMessageRedisBean
.
USER_LEAVE_MESSAGE_LOCK_LEASE_TIME
),
TimeUnit
.
SECONDS
);
if
(
isGetLock
)
{
//扣除该用户的金币数量
DictData
dictData4
=
leaveMessageConfig
.
stream
().
filter
(
item
->
item
.
getDictLabel
().
equals
(
"pay_count"
)).
findFirst
().
orElse
(
null
);
Integer
payCount
=
Integer
.
valueOf
(
dictData4
.
getDictValue
());
MemInfo
memInfo
=
memInfoRepository
.
selectByOpenId
(
memLeaveMessage
.
getWxOpenid
());
if
(
memInfo
.
getGoldCoinsCount
()
-
payCount
<
0
){
throw
new
CyServiceException
(
1003
,
"金币不足,请先充值!"
);
}
memInfo
.
setGoldCoinsCount
(
memInfo
.
getGoldCoinsCount
()
-
payCount
);
memInfoRepository
.
updateById
(
memInfo
);
//添加消费记录
MemGoldCoinFlow
memGoldCoinFlow
=
new
MemGoldCoinFlow
();
memGoldCoinFlow
.
setType
(
"2"
);
memGoldCoinFlow
.
setActionType
(
"22"
);
memGoldCoinFlow
.
setCount
(
payCount
);
memGoldCoinFlow
.
setEndCount
(
memInfo
.
getGoldCoinsCount
());
memGoldCoinFlow
.
setTargetId
(
BigInteger
.
valueOf
(
memLeaveMessage
.
getTargetId
()));
memGoldCoinFlowRepository
.
insert
(
memGoldCoinFlow
);
}
}
catch
(
InterruptedException
e
)
{
Thread
.
currentThread
().
interrupt
();
isGetLock
=
false
;
throw
new
CyServiceException
(
1004
,
"服务器繁忙,请稍后再试"
);
}
finally
{
lock
.
unlock
();
log
.
error
(
"释放成功"
);
}
}
/**
* 分页查询对话列表
*
...
...
src/main/resources/mapper/business/memInfo/mapper/MemInfoMapper.xml
View file @
a4c6027b
...
...
@@ -418,6 +418,11 @@
</if>
<if
test=
"entity.loginUserId !=null and entity.loginUserId != '' "
>
and m.user_id != #{entity.loginUserId}
and m.mem_sex != (
select m.mem_sex
from mem_info m
where m.user_id = #{entity.loginUserId}
)
and m.user_id not in (
select obl.target_id
from opm_black_list obl
...
...
@@ -886,4 +891,10 @@
where 1=1
and mem_phone = #{phone}
</update>
<update
id=
"updateMemSexByPhone"
parameterType=
"org.rcisoft.sys.rbac.user.entity.SysUserRbac"
>
update mem_info
set mem_sex = #{wxSex}
where 1=1
and mem_phone = #{phone}
</update>
</mapper>
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