Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
safe-campus-bbs
Project overview
Project overview
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
万成波
safe-campus-bbs
Commits
efd33ffe
Commit
efd33ffe
authored
Sep 04, 2025
by
万成波
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
动态投票
parent
d06f4cc4
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
203 additions
and
14 deletions
+203
-14
safe-campus-moment/src/main/java/com/tangguo/controller/mobile/MBbsMomentController.java
...a/com/tangguo/controller/mobile/MBbsMomentController.java
+21
-4
safe-campus-moment/src/main/java/com/tangguo/domain/bo/LikeMomentBO.java
...ent/src/main/java/com/tangguo/domain/bo/LikeMomentBO.java
+1
-0
safe-campus-moment/src/main/java/com/tangguo/domain/bo/VoteMomentBO.java
...ent/src/main/java/com/tangguo/domain/bo/VoteMomentBO.java
+30
-0
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentLikeService.java
.../main/java/com/tangguo/service/IBbsMomentLikeService.java
+1
-1
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentService.java
.../src/main/java/com/tangguo/service/IBbsMomentService.java
+10
-1
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentVoteOptionService.java
...java/com/tangguo/service/IBbsMomentVoteOptionService.java
+10
-0
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentVoteService.java
.../main/java/com/tangguo/service/IBbsMomentVoteService.java
+19
-0
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentLikeServiceImpl.java
...va/com/tangguo/service/impl/BbsMomentLikeServiceImpl.java
+1
-1
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentServiceImpl.java
...n/java/com/tangguo/service/impl/BbsMomentServiceImpl.java
+53
-3
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentVoteOptionServiceImpl.java
.../tangguo/service/impl/BbsMomentVoteOptionServiceImpl.java
+18
-0
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentVoteServiceImpl.java
...va/com/tangguo/service/impl/BbsMomentVoteServiceImpl.java
+35
-0
safe-campus-moment/src/main/resources/mapper/BbsMomentMapper.xml
...mpus-moment/src/main/resources/mapper/BbsMomentMapper.xml
+4
-4
No files found.
safe-campus-moment/src/main/java/com/tangguo/controller/mobile/MBbsMomentController.java
View file @
efd33ffe
package
com
.
tangguo
.
controller
.
mobile
;
import
cn.hutool.core.lang.Opt
;
import
com.tangguo.common.core.domain.AjaxResult
;
import
com.tangguo.common.mauth.MobileAuth
;
import
com.tangguo.common.mauth.MobileTokenHelper
;
...
...
@@ -8,6 +7,7 @@ import com.tangguo.common.utils.PageUtils;
import
com.tangguo.common.utils.ValidateOperations
;
import
com.tangguo.domain.bo.CreateMomentBO
;
import
com.tangguo.domain.bo.LikeMomentBO
;
import
com.tangguo.domain.bo.VoteMomentBO
;
import
com.tangguo.domain.vo.BbsMomentListVO
;
import
com.tangguo.service.IBbsMomentService
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -66,7 +66,7 @@ public class MBbsMomentController {
*/
@MobileAuth
@DeleteMapping
(
"/delete/{momentId}"
)
public
AjaxResult
crea
teMoment
(
@PathVariable
Long
momentId
)
{
public
AjaxResult
dele
teMoment
(
@PathVariable
Long
momentId
)
{
this
.
momentService
.
userDeleteMoment
(
momentId
);
return
AjaxResult
.
success
();
}
...
...
@@ -83,8 +83,25 @@ public class MBbsMomentController {
public
AjaxResult
likeMoment
(
@RequestBody
LikeMomentBO
bo
)
{
ValidateOperations
.
generalValidate
(
bo
);
synchronized
(
String
.
valueOf
(
bo
.
getMomentId
()).
intern
())
{
int
likeCount
=
this
.
momentService
.
likeMoment
(
bo
);
return
AjaxResult
.
success
(
likeCount
);
this
.
momentService
.
userLikeMoment
(
bo
);
return
AjaxResult
.
success
();
}
}
/**
* 投票动态
*
* @param bo 动态
* @return 投票结果
*/
@MobileAuth
@PostMapping
(
"/vote"
)
public
AjaxResult
voteMoment
(
@RequestBody
VoteMomentBO
bo
)
{
ValidateOperations
.
generalValidate
(
bo
);
synchronized
(
String
.
valueOf
(
bo
.
getMomentId
()).
intern
())
{
this
.
momentService
.
userVoteMoment
(
bo
);
return
AjaxResult
.
success
();
}
}
...
...
safe-campus-moment/src/main/java/com/tangguo/domain/bo/LikeMomentBO.java
View file @
efd33ffe
...
...
@@ -4,6 +4,7 @@ import lombok.Data;
import
javax.validation.constraints.Max
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
/**
...
...
safe-campus-moment/src/main/java/com/tangguo/domain/bo/VoteMomentBO.java
0 → 100644
View file @
efd33ffe
package
com
.
tangguo
.
domain
.
bo
;
import
lombok.Data
;
import
javax.validation.constraints.Max
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
/**
*
*
* @author 谈笑
* @createTime 2025-09-04 15:28:48 星期四
*/
@Data
public
class
VoteMomentBO
{
/**
* 动态Id
*/
@NotNull
(
message
=
"动态Id不能为空"
)
private
Long
momentId
;
/**
* 投票选项编码
*/
@NotNull
(
message
=
"投票选项编码不能为空"
)
private
String
optionCode
;
}
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentLikeService.java
View file @
efd33ffe
...
...
@@ -18,7 +18,7 @@ public interface IBbsMomentLikeService extends IService<BbsMomentLike> {
* @param userName 用户名
* @return 点赞记录
*/
long
getMomentLikeCount
(
Long
momentId
,
String
userName
);
long
get
User
MomentLikeCount
(
Long
momentId
,
String
userName
);
/**
...
...
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentService.java
View file @
efd33ffe
...
...
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import
com.tangguo.domain.BbsMoment
;
import
com.tangguo.domain.bo.CreateMomentBO
;
import
com.tangguo.domain.bo.LikeMomentBO
;
import
com.tangguo.domain.bo.VoteMomentBO
;
import
com.tangguo.domain.vo.BbsMomentListVO
;
import
com.tangguo.domain.vo.BbsUserMomentCountVO
;
...
...
@@ -83,6 +84,14 @@ public interface IBbsMomentService extends IService<BbsMoment> {
*
* @param bo 动态
*/
int
likeMoment
(
LikeMomentBO
bo
);
void
userLikeMoment
(
LikeMomentBO
bo
);
/**
* 投票动态
*
* @param bo 动态
*/
void
userVoteMoment
(
VoteMomentBO
bo
);
}
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentVoteOptionService.java
View file @
efd33ffe
...
...
@@ -50,4 +50,14 @@ public interface IBbsMomentVoteOptionService extends IService<BbsMomentVoteOptio
*/
void
deleteVoteOptions
(
Long
momentId
);
/**
* 查询投票选项
*
* @param momentId 动态Id
* @param optionCode 投票选项编码
* @return 投票选项
*/
BbsMomentVoteOption
getVoteOption
(
Long
momentId
,
String
optionCode
);
}
safe-campus-moment/src/main/java/com/tangguo/service/IBbsMomentVoteService.java
View file @
efd33ffe
...
...
@@ -11,4 +11,23 @@ import com.tangguo.domain.BbsMomentVote;
*/
public
interface
IBbsMomentVoteService
extends
IService
<
BbsMomentVote
>
{
/**
* 查询用户投票记录数量
*
* @param momentId 动态Id
* @param userName 用户名
* @return 点赞记录
*/
long
getUserMomentVoteCount
(
Long
momentId
,
String
userName
);
/**
* 添加点赞记录
*
* @param momentId 动态Id
* @param userName 用户名
* @param optionCode 投票选项编码
*/
void
addMomentVoteCount
(
Long
momentId
,
String
userName
,
String
optionCode
);
}
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentLikeServiceImpl.java
View file @
efd33ffe
...
...
@@ -30,7 +30,7 @@ public class BbsMomentLikeServiceImpl extends ServiceImpl<BbsMomentLikeMapper, B
* @return 点赞记录
*/
@Override
public
long
getMomentLikeCount
(
Long
momentId
,
String
userName
)
{
public
long
get
User
MomentLikeCount
(
Long
momentId
,
String
userName
)
{
return
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsMomentLike
.
class
)
.
eq
(
BbsMomentLike:
:
getMomentId
,
momentId
)
...
...
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentServiceImpl.java
View file @
efd33ffe
...
...
@@ -9,6 +9,7 @@ import com.tangguo.common.mauth.MobileTokenHelper;
import
com.tangguo.domain.*
;
import
com.tangguo.domain.bo.CreateMomentBO
;
import
com.tangguo.domain.bo.LikeMomentBO
;
import
com.tangguo.domain.bo.VoteMomentBO
;
import
com.tangguo.domain.vo.*
;
import
com.tangguo.enums.EnableStatus
;
import
com.tangguo.enums.LikeStatus
;
...
...
@@ -54,6 +55,9 @@ public class BbsMomentServiceImpl extends ServiceImpl<BbsMomentMapper, BbsMoment
@Resource
private
IBbsMomentLikeService
likeService
;
@Resource
private
IBbsMomentVoteService
voteService
;
/**
* 查询动态列表
...
...
@@ -176,14 +180,14 @@ public class BbsMomentServiceImpl extends ServiceImpl<BbsMomentMapper, BbsMoment
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
int
l
ikeMoment
(
LikeMomentBO
bo
)
{
public
void
userL
ikeMoment
(
LikeMomentBO
bo
)
{
BbsMoment
dbMoment
=
this
.
getById
(
bo
.
getMomentId
());
if
(
Objects
.
isNull
(
dbMoment
))
{
throw
new
ServiceException
(
"点赞失败,未查询到当前动态数据。"
);
}
String
userName
=
MobileTokenHelper
.
getUsername
();
long
likeStatus
=
this
.
likeService
.
getMomentLikeCount
(
dbMoment
.
getId
(),
userName
);
long
likeStatus
=
this
.
likeService
.
get
User
MomentLikeCount
(
dbMoment
.
getId
(),
userName
);
int
likeCount
=
dbMoment
.
getLikeCount
();
if
(
LikeStatus
.
LIKE
.
getStatus
()
==
bo
.
getLikeStatus
())
{
...
...
@@ -202,14 +206,60 @@ public class BbsMomentServiceImpl extends ServiceImpl<BbsMomentMapper, BbsMoment
}
}
// 更新动态点赞人数
BbsMoment
updMoment
=
new
BbsMoment
();
updMoment
.
setId
(
dbMoment
.
getId
());
updMoment
.
setLikeCount
(
likeCount
);
this
.
updateById
(
updMoment
);
return
likeCount
;
}
/**
* 投票动态
*
* @param bo 动态
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
void
userVoteMoment
(
VoteMomentBO
bo
)
{
BbsMoment
dbMoment
=
this
.
getById
(
bo
.
getMomentId
());
if
(
Objects
.
isNull
(
dbMoment
))
{
throw
new
ServiceException
(
"投票失败,未查询到当前动态数据。"
);
}
if
(
EnableStatus
.
QY
.
getStatus
()
!=
dbMoment
.
getIsEnableVote
())
{
throw
new
ServiceException
(
"投票失败,当前动态未开启投票。"
);
}
String
username
=
MobileTokenHelper
.
getUsername
();
long
voteCount
=
this
.
voteService
.
getUserMomentVoteCount
(
dbMoment
.
getId
(),
username
);
if
(
voteCount
>
0
)
{
throw
new
ServiceException
(
"投票失败,已对当前动态投票。"
);
}
String
optionCode
=
bo
.
getOptionCode
();
BbsMomentVoteOption
dbOption
=
this
.
voteOptionService
.
getVoteOption
(
dbMoment
.
getId
(),
optionCode
);
if
(
Objects
.
isNull
(
dbOption
))
{
throw
new
ServiceException
(
"投票失败,未查询到当前投票选项数据。"
);
}
// 添加投票记录
this
.
voteService
.
addMomentVoteCount
(
dbMoment
.
getId
(),
username
,
optionCode
);
// 更新投票选项投票人数
BbsMomentVoteOption
updOption
=
new
BbsMomentVoteOption
();
updOption
.
setId
(
dbOption
.
getId
());
updOption
.
setVoteCount
(
dbOption
.
getVoteCount
()
+
1
);
this
.
voteOptionService
.
updateById
(
updOption
);
// 更新动态投票人数
BbsMoment
updMoment
=
new
BbsMoment
();
updMoment
.
setId
(
dbMoment
.
getId
());
updMoment
.
setVoteCount
(
updOption
.
getVoteCount
());
this
.
updateById
(
updMoment
);
}
/**
* 构建动态实体
*
...
...
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentVoteOptionServiceImpl.java
View file @
efd33ffe
...
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.tangguo.domain.BbsMoment
;
import
com.tangguo.domain.BbsMomentAttachment
;
import
com.tangguo.domain.BbsMomentLike
;
import
com.tangguo.domain.BbsMomentVoteOption
;
import
com.tangguo.domain.bo.CreateMomentBO
;
import
com.tangguo.domain.vo.BbsMomentListVO
;
...
...
@@ -108,4 +109,21 @@ public class BbsMomentVoteOptionServiceImpl extends ServiceImpl<BbsMomentVoteOpt
);
}
/**
* 查询投票选项
*
* @param momentId 动态Id
* @param optionCode 投票选项编码
* @return 投票选项
*/
@Override
public
BbsMomentVoteOption
getVoteOption
(
Long
momentId
,
String
optionCode
)
{
return
this
.
getOne
(
Wrappers
.
lambdaQuery
(
BbsMomentVoteOption
.
class
)
.
eq
(
BbsMomentVoteOption:
:
getMomentId
,
momentId
)
.
eq
(
BbsMomentVoteOption:
:
getCode
,
optionCode
)
);
}
}
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsMomentVoteServiceImpl.java
View file @
efd33ffe
package
com
.
tangguo
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.tangguo.domain.BbsMomentVote
;
import
com.tangguo.mapper.BbsMomentVoteMapper
;
...
...
@@ -20,4 +21,38 @@ public class BbsMomentVoteServiceImpl extends ServiceImpl<BbsMomentVoteMapper, B
@Resource
private
BbsMomentVoteMapper
bbsMomentVoteMapper
;
/**
* 查询用户投票记录数量
*
* @param momentId 动态Id
* @param userName 用户名
* @return 点赞记录
*/
@Override
public
long
getUserMomentVoteCount
(
Long
momentId
,
String
userName
)
{
return
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsMomentVote
.
class
)
.
eq
(
BbsMomentVote:
:
getMomentId
,
momentId
)
.
eq
(
BbsMomentVote:
:
getUserName
,
userName
)
);
}
/**
* 添加点赞记录
*
* @param momentId 动态Id
* @param userName 用户名
* @param optionCode 投票选项编码
*/
@Override
public
void
addMomentVoteCount
(
Long
momentId
,
String
userName
,
String
optionCode
)
{
BbsMomentVote
newVote
=
new
BbsMomentVote
();
newVote
.
setMomentId
(
momentId
);
newVote
.
setUserName
(
userName
);
newVote
.
setOptionCode
(
optionCode
);
this
.
save
(
newVote
);
}
}
safe-campus-moment/src/main/resources/mapper/BbsMomentMapper.xml
View file @
efd33ffe
...
...
@@ -40,14 +40,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select
id=
"selectUserMoments"
resultType=
"com.tangguo.domain.vo.BbsMomentListVO"
>
SELECT
m.*,
IF(l.id IS NOT NULL
AND l.like_status = 1
, 1, 0) AS is_like,
IF(l.id IS NOT NULL, 1, 0) AS is_like,
IF(v.id IS NOT NULL, 1, 0) AS is_vote
FROM
bbs_moment m
LEFT JOIN
(
SELECT
id, moment_id
, like_status
id, moment_id
FROM
bbs_moment_like
WHERE
...
...
@@ -79,7 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT
m.*,
uv.nike_name,
IF(l.id IS NOT NULL
AND l.like_status = 1
, 1, 0) AS is_like,
IF(l.id IS NOT NULL, 1, 0) AS is_like,
IF(v.id IS NOT NULL, 1, 0) AS is_vote,
IF(m.user_name = #{userName}, 1, 0) AS is_self
FROM
...
...
@@ -89,7 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN
(
SELECT
id, moment_id
, like_status
id, moment_id
FROM
bbs_moment_like
WHERE
...
...
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