springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/DiscussApi.java
@@ -5,7 +5,10 @@ import java.util.Objects; import javax.annotation.Resource; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import com.panzhihua.common.model.dtos.community.DiscussVoteOptionDTO; import com.panzhihua.common.validated.PutGroup; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; @@ -196,20 +199,22 @@ } @ApiOperation(value = "一起议-投票") @GetMapping("discussoptionuser") @ApiImplicitParam(name = "id", value = "一起议选项主键", required = true) public R addDiscussOptionUser(@RequestParam("id") Long id) { if (null == id || 0 == id) { @PostMapping("discussoptionuser") public R addDiscussOptionUser(@RequestBody @Valid DiscussVoteOptionDTO discussVoteOptionDTO) { List<Long> optionIds = discussVoteOptionDTO.getOptionIds(); if (optionIds.isEmpty()) { return R.fail("选项主键不能为空"); } ComActDiscussOptionUserDTO comActDiscussOptionUserDTO = new ComActDiscussOptionUserDTO(); comActDiscussOptionUserDTO.setDiscussOptionId(id); comActDiscussOptionUserDTO.setDiscussOptionIds(optionIds); comActDiscussOptionUserDTO.setUserId(this.getUserId()); // 议事投票计算积分 AddComActIntegralUserDTO integralUserDTO = new AddComActIntegralUserDTO(id, AddComActIntegralUserDTO.integralType.cyystp, this.getCommunityId(), this.getUserId()); integralUserDTO.setIsComment(2); communityService.addIntegralTradeAdmin(integralUserDTO); optionIds.forEach(optionId -> { // 议事投票计算积分 AddComActIntegralUserDTO integralUserDTO = new AddComActIntegralUserDTO(optionId, AddComActIntegralUserDTO.integralType.cyystp, this.getCommunityId(), this.getUserId()); integralUserDTO.setIsComment(2); communityService.addIntegralTradeAdmin(integralUserDTO); }); return communityService.addDiscussOptionUser(comActDiscussOptionUserDTO); } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/ComActDiscussOptionUserDTO.java
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @program: springcloud_k8s_panzhihuazhihuishequ * @description: 选项投票 @@ -14,8 +16,8 @@ @ApiModel("选项投票") public class ComActDiscussOptionUserDTO { @ApiModelProperty("一起议选项id") private Long discussOptionId; @ApiModelProperty("一起议选项id集合") private List<Long> discussOptionIds; @ApiModelProperty("投票人id") private Long userId; springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/DiscussVoteOptionDTO.java
New file @@ -0,0 +1,25 @@ package com.panzhihua.common.model.dtos.community; import java.util.List; import javax.validation.constraints.NotEmpty; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @title: DiscussVoteOptionDTO * @projectName: 成都呐喊信息技术有限公司-智慧社区项目 * @description: 一起议投票请求参数 * @author: hans * @date: 2021/09/16 17:03 */ @Data @ApiModel("一起议投票请求参数") public class DiscussVoteOptionDTO { @ApiModelProperty("主键") @NotEmpty(message = "投票选项不能为空") private List<Long> optionIds; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComActDiscussVO.java
@@ -109,7 +109,7 @@ private BigDecimal imgWidth; @ApiModelProperty("单张图片高度") private BigDecimal heightWidth; private BigDecimal imgHeight; @ApiModelProperty("是否可重复投票(1.是 2.否)") private Integer isRepeat; springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComActDiscussOptionUserDAO.java
@@ -57,4 +57,11 @@ * @return */ int selectVotedPersonNum(@Param("discussId") Long discussId); /** * 批量插入投票记录 * @param comActDiscussOptionUserDOList * @return */ int batchInsert(@Param("comActDiscussOptionUserDOList") List<ComActDiscussOptionUserDO> comActDiscussOptionUserDOList); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComActDiscussDO.java
@@ -89,7 +89,7 @@ /** * 单张图片高度 */ private Integer imgHeight; private BigDecimal imgHeight; /** * 开始时间 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActDiscussServiceImpl.java
@@ -188,26 +188,27 @@ String discussIdentityConfig = (String) sysConfValue.getData(); if (isBlank(discussIdentityConfig)) { checkResult = false; } List<String> currentUserRoles = new ArrayList<>(); List<String> sysAllowedRoles = Arrays.asList(discussIdentityConfig.split(",")); LoginUserInfoVO loginUserInfo = comActDiscussDTO.getLoginUserInfo(); if (loginUserInfo.getIsPartymember().intValue() == 1) { currentUserRoles.add("2"); } if (loginUserInfo.getIsVolunteer().intValue() == 1) { currentUserRoles.add("3"); } R isTeamResult = userService.checkCurrentUserIsTeam(loginUserInfo.getPhone(), loginUserInfo.getCommunityId()); if (R.isOk(isTeamResult) && (Boolean) isTeamResult.getData()) { currentUserRoles.add("4"); } if (currentUserRoles.isEmpty()) { checkResult = false; } boolean result = sysAllowedRoles.stream().anyMatch(role -> currentUserRoles.contains(role)); if (!result) { checkResult = false; } else { List<String> currentUserRoles = new ArrayList<>(); List<String> sysAllowedRoles = Arrays.asList(discussIdentityConfig.split(",")); LoginUserInfoVO loginUserInfo = comActDiscussDTO.getLoginUserInfo(); if (loginUserInfo.getIsPartymember() == 1) { currentUserRoles.add("2"); } if (loginUserInfo.getIsVolunteer().intValue() == 1) { currentUserRoles.add("3"); } R isTeamResult = userService.checkCurrentUserIsTeam(loginUserInfo.getPhone(), loginUserInfo.getCommunityId()); if (R.isOk(isTeamResult) && (Boolean) isTeamResult.getData()) { currentUserRoles.add("4"); } if (currentUserRoles.isEmpty()) { checkResult = false; } boolean result = sysAllowedRoles.stream().anyMatch(role -> currentUserRoles.contains(role)); if (!result) { checkResult = false; } } } return checkResult; @@ -603,6 +604,7 @@ List<ComActDiscussOptionDO> comActDiscussOptionDOS = comActDiscussOptionDAO.selectList( new QueryWrapper<ComActDiscussOptionDO>().lambda().eq(ComActDiscussOptionDO::getDiscussId, id)); List<ComActDiscussOptionVO> comActDiscussOptionVOS = new ArrayList<>(); List<Integer> votes = new ArrayList<>(); comActDiscussOptionDOS.forEach(comActDiscussOptionDO -> { Long discussOptionDOId = comActDiscussOptionDO.getId(); Integer selectCount = @@ -616,6 +618,7 @@ // 判断选项是否已投票 int haveVote = comActDiscussOptionUserDAO.selectHaveVotes(comActDiscussOptionDO.getId(), loginUserId); votes.add(haveVote); comActDiscussOptionVO.setHaveVote(haveVote > 0 ? 1 : 0); } comActDiscussOptionVOS.add(comActDiscussOptionVO); @@ -623,6 +626,20 @@ fillThePercentAndSort(comActDiscussOptionVOS); checkDiscussStatusIsCorrect(comActDiscussVO); comActDiscussVO.setComActDiscussOptionVOS(comActDiscussOptionVOS); //填充剩余可投票数 if (loginUserId != null && !loginUserId.equals(0L)) { if (comActDiscussVO.getIsRepeat().intValue() == 1) { //可重复投票 int votedVotesInToday = comActDiscussOptionUserDAO.selectVotedVotesInToday(id, loginUserId); int remainingVotes = comActDiscussVO.getCount().intValue() - votedVotesInToday; comActDiscussVO.setRemainingVotes(remainingVotes >= 0 ? remainingVotes : 0); } else { //不可重复投票 int alreadyVotedVotes = votes.stream().mapToInt(Integer::intValue).sum(); int remainingVotes = comActDiscussVO.getCount().intValue() - alreadyVotedVotes; comActDiscussVO.setRemainingVotes(remainingVotes >= 0 ? remainingVotes : 0); } } //填充投票记录列表 List<ComActDiscussOptionUserVO> comActDiscussOptionUserVOList = comActDiscussOptionUserDAO .selectVotedRecords(comActDiscussVO.getId()); @@ -904,7 +921,8 @@ */ @Override public R addDiscussOptionUser(ComActDiscussOptionUserDTO comActDiscussOptionUserDTO) { Long discussOptionId = comActDiscussOptionUserDTO.getDiscussOptionId(); List<Long> discussOptionIds = comActDiscussOptionUserDTO.getDiscussOptionIds(); Long discussOptionId = discussOptionIds.get(0); Long userId = comActDiscussOptionUserDTO.getUserId(); ComActDiscussOptionDO comActDiscussOptionDO = comActDiscussOptionDAO.selectById(discussOptionId); if (ObjectUtils.isEmpty(comActDiscussOptionDO)) { @@ -922,27 +940,32 @@ } boolean isRepeat = comActDiscussDO.getIsRepeat().intValue() == 1; int usableVoteVotes = comActDiscussDO.getCount().intValue(); int currentVoteNum = discussOptionIds.size(); if (isRepeat) { //可重复投票 int votedVotesInToday = comActDiscussOptionUserDAO.selectVotedVotesInToday(discussId, userId); if (usableVoteVotes <= votedVotesInToday) { return R.fail("当天投票次数已用完"); if (usableVoteVotes <= votedVotesInToday || currentVoteNum > usableVoteVotes - votedVotesInToday) { return R.fail("票数不足"); } } else { //不可重复投票 int alreadyVotedVotes = comActDiscussOptionUserDAO.selectCount( new QueryWrapper<ComActDiscussOptionUserDO>().lambda().eq(ComActDiscussOptionUserDO::getUserId, userId) .eq(ComActDiscussOptionUserDO::getDiscussId, discussId)); if (usableVoteVotes <= alreadyVotedVotes) { return R.fail("投票次数已用完"); if (usableVoteVotes <= alreadyVotedVotes || currentVoteNum > usableVoteVotes - alreadyVotedVotes) { return R.fail("票数不足"); } } ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO(); comActDiscussOptionUserDO.setUserId(userId); comActDiscussOptionUserDO.setDiscussOptionId(discussOptionId); comActDiscussOptionUserDO.setDiscussId(discussId); int insert = comActDiscussOptionUserDAO.insert(comActDiscussOptionUserDO); if (insert > 0) { List<ComActDiscussOptionUserDO> comActDiscussOptionUserDOList = new ArrayList<>(); discussOptionIds.forEach(optionId -> { ComActDiscussOptionUserDO comActDiscussOptionUserDO = new ComActDiscussOptionUserDO(); comActDiscussOptionUserDO.setUserId(userId); comActDiscussOptionUserDO.setDiscussOptionId(optionId); comActDiscussOptionUserDO.setDiscussId(discussId); comActDiscussOptionUserDOList.add(comActDiscussOptionUserDO); }); int result = comActDiscussOptionUserDAO.batchInsert(comActDiscussOptionUserDOList); if (result > 0) { return R.ok(); } return R.fail(); @@ -1224,6 +1247,7 @@ return R.fail("只能公布或编辑自己发布的主题!"); } comActDiscussDO.setPublishResult(comActDiscussDTO.getPublishResult()); comActDiscussDO.setStatus(4); int result = comActDiscussDAO.updateById(comActDiscussDO); if (result > 0) { return R.ok(); springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussDOMapper.xml
@@ -160,7 +160,7 @@ SELECT t.* FROM ( SELECT d.id, d.vote_title, if(d.address IS NULL OR d.address='null',a.name,d.address )address, d.photo_pah, d.`discuss_subject`, d.type, d.end_time, d.status, d.views_num, d.join_num, d.fabulous_num AS signNum, d.comment_num AS commentNum, d.release_at, u.type AS userType, if(u.type=1,u.name,a.name) userName, d.comment_num AS commentNum, d.release_at, d.img_width, d.img_height, d.is_repeat, d.count, u.type AS userType, if(u.type=1,u.name,a.name) userName, if(u.type=1,u.nick_name,a.name) userNickName, <if test='pageComActDiscussDTO.loginUserId != null '> if(du.id IS NOT NULL,1,0) haveSign, if(ou.id IS NOT NULL,1,0) haveVote, springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComActDiscussOptionUserDOMapper.xml
@@ -15,6 +15,13 @@ <sql id="Base_Column_List"> id, discuss_option_id, user_id, create_at, discuss_id </sql> <insert id="batchInsert" parameterType="java.util.List"> INSERT INTO `com_act_discuss_option_user`(discuss_option_id,user_id,create_at,discuss_id) VALUES <foreach collection="comActDiscussOptionUserDOList" item="item" index="index" separator="," > (#{item.discussOptionId}, #{item.userId}, now(), #{item.discussId}) </foreach> </insert> <select id="selectVotedVotesInToday" resultType="java.lang.Integer"> SELECT COUNT(1) FROM `com_act_discuss_option_user` WHERE discuss_id = #{discussId} AND user_id = #{userId} AND DATE(create_at) >= DATE(now())