diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/CommunityController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/CommunityController.java index 5885654..34e5d87 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/CommunityController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/CommunityController.java @@ -1,13 +1,11 @@ package com.mcwl.web.controller.communityCenter; -import cn.hutool.core.bean.BeanUtil; -import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.R; -import com.mcwl.common.core.page.PageDomain; import com.mcwl.common.core.page.TableDataInfo; -import com.mcwl.communityCenter.domain.Community; +import com.mcwl.communityCenter.domain.dto.CommunityListPageRes; import com.mcwl.communityCenter.domain.dto.CommunityRes; +import com.mcwl.communityCenter.domain.dto.JoinCommunityRes; import com.mcwl.communityCenter.service.CommunityService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -37,8 +35,8 @@ public class CommunityController { */ @ApiOperation(value = "社区列表") @PostMapping("list") - public TableDataInfo getCommunityList(@RequestBody @Valid PageDomain pageDomain) { - return communityService.listByPage(pageDomain); + public TableDataInfo getCommunityList(@RequestBody @Valid CommunityListPageRes communityListPageRes) { + return communityService.listByPage(communityListPageRes); } @@ -55,6 +53,16 @@ public class CommunityController { return R.ok(); } + /** + * 加入社区 + */ + @ApiOperation(value = "加入社区") + @PostMapping("join") + public R joinCommunity(@Valid JoinCommunityRes joinCommunityRes) { + + return communityService.joinCommunity(joinCommunityRes); + } + /** * 删除社区 * @@ -64,9 +72,9 @@ public class CommunityController { @ApiOperation(value = "删除社区") @GetMapping("delete") public R deleteCommunity(@NotNull(message = "id不能为空") - @ApiParam(value = "id", required = true) - @Valid - Long id) { + @ApiParam(value = "id", required = true) + @Valid + Long id) { communityService.removeById(id); return R.ok(); } diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/Community.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/Community.java index cffb1c5..9c38827 100644 --- a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/Community.java +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/Community.java @@ -30,12 +30,30 @@ public class Community extends BaseEntity { @TableField(fill = FieldFill.INSERT) private Long tenantId; + /** + * 社区图片 + */ + @ApiModelProperty(value = "社区图片") + private String imageUrl; + /** * 社区名称 */ @ApiModelProperty(value = "社区名称") private String communityName; + /** + * 描述 + */ + @ApiModelProperty(value = "描述") + private String description; + + /** + * 社区标签id + */ + @ApiModelProperty(value = "社区标签id") + private Long communityTagId; + /** * 社区类型 */ diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/CommunityUser.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/CommunityUser.java new file mode 100644 index 0000000..09cbabf --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/CommunityUser.java @@ -0,0 +1,51 @@ +package com.mcwl.communityCenter.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.mcwl.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * 社区 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("cc_community_user") +@ApiModel(value = "社区用户") +@AllArgsConstructor +@NoArgsConstructor +public class CommunityUser extends BaseEntity { + + @TableId + @ApiModelProperty(value = "社区用户id") + private Long id; + + /** + * 用户id + */ + @ApiModelProperty(value = "租户id") + @TableField(fill = FieldFill.INSERT) + private Long tenantId; + + /** + * 社区id + */ + @ApiModelProperty(value = "社区id") + private Long communityId; + + /** + * 用户id + */ + @ApiModelProperty(value = "用户id") + private Long userId; + + + +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/dto/CommunityListPageRes.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/dto/CommunityListPageRes.java new file mode 100644 index 0000000..ef70eaf --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/dto/CommunityListPageRes.java @@ -0,0 +1,23 @@ +package com.mcwl.communityCenter.domain.dto; + +import com.mcwl.common.core.page.PageDomain; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 社区列表分页请求参数 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "社区列表分页请求参数") +public class CommunityListPageRes extends PageDomain { + + /** + * 社区标签id + */ + @ApiModelProperty(value = "社区标签id") + private Long communityTagId; + +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/dto/JoinCommunityRes.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/dto/JoinCommunityRes.java new file mode 100644 index 0000000..3aba757 --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/dto/JoinCommunityRes.java @@ -0,0 +1,32 @@ +package com.mcwl.communityCenter.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 加入社区请求参数 + */ +@Data +@ApiModel(value = "加入社区请求参数") +public class JoinCommunityRes { + + /** + * 租户id + */ + @ApiModelProperty(value = "租户id", required = true) + @NotNull(message = "租户id不能为空") + private Long tenantId; + + /** + * 社区id + */ + @ApiModelProperty(value = "社区id", required = true) + @NotNull(message = "社区id不能为空") + private Long communityId; + + +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/vo/CommunityVo.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/vo/CommunityVo.java index 7d6894e..71beb3c 100644 --- a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/vo/CommunityVo.java +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/vo/CommunityVo.java @@ -22,12 +22,47 @@ public class CommunityVo { @ApiModelProperty(value = "社区id") private Long id; + /** + * 社区图片 + */ + @ApiModelProperty(value = "社区图片") + private String imageUrl; + /** * 社区名称 */ @ApiModelProperty(value = "社区名称") private String communityName; + /** + * 描述 + */ + @ApiModelProperty(value = "描述") + private String description; + + /** + * 价格 + */ + @ApiModelProperty(value = "价格") + private Double price; + + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + + /** + * 创建天数 + */ + @ApiModelProperty(value = "创建天数") + private Long createDay; + + /** + * 加入人数 + */ + @ApiModelProperty(value = "加入人数") + private Integer joinNum; } diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/CommunityMapper.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/CommunityMapper.java index 1ab7b92..95acb9b 100644 --- a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/CommunityMapper.java +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/CommunityMapper.java @@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import javax.validation.constraints.NotNull; +import java.util.Map; @Mapper public interface CommunityMapper extends BaseMapper { @@ -17,4 +18,11 @@ public interface CommunityMapper extends BaseMapper { @NotNull(message = "社区id不能为空") @Param("communityId") Long communityId); + + /** + * 查询所有社区加入人数, 以map形式返回,key为社区id,value为加入人数 + * @return map + */ + @InterceptorIgnore(tenantLine = "true") + Map selectCommunityJoinNum(); } diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/CommunityUserMapper.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/CommunityUserMapper.java new file mode 100644 index 0000000..5b35146 --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/mapper/CommunityUserMapper.java @@ -0,0 +1,20 @@ +package com.mcwl.communityCenter.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mcwl.communityCenter.domain.Community; +import com.mcwl.communityCenter.domain.CommunityUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import javax.validation.constraints.NotNull; +import java.util.Map; + +@Mapper +public interface CommunityUserMapper extends BaseMapper { + + @InterceptorIgnore(tenantLine = "true") + CommunityUser selectByTenantIdAndCommunityIdAndUserId(@Param("tenantId") Long tenantId, + @Param("communityId") Long communityId, + @Param("userId") Long userId); +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/CommunityService.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/CommunityService.java index f02f9f0..41e8a8b 100644 --- a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/CommunityService.java +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/CommunityService.java @@ -1,17 +1,28 @@ package com.mcwl.communityCenter.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.domain.R; import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.communityCenter.domain.Community; +import com.mcwl.communityCenter.domain.dto.CommunityListPageRes; import com.mcwl.communityCenter.domain.dto.CommunityRes; +import com.mcwl.communityCenter.domain.dto.JoinCommunityRes; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; public interface CommunityService extends IService { - TableDataInfo listByPage(PageDomain pageDomain); + TableDataInfo listByPage(CommunityListPageRes communityListPageRes); /** * 添加社区 * @param communityRes 社区信息 */ void addCommunity(CommunityRes communityRes); + + /** + * 加入社区 + * @param joinCommunityRes 加入社区信息 + */ + R joinCommunity(JoinCommunityRes joinCommunityRes); } diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/CommunityUserService.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/CommunityUserService.java new file mode 100644 index 0000000..7d60b33 --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/CommunityUserService.java @@ -0,0 +1,12 @@ +package com.mcwl.communityCenter.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mcwl.common.core.domain.R; +import com.mcwl.common.core.page.TableDataInfo; +import com.mcwl.communityCenter.domain.Community; +import com.mcwl.communityCenter.domain.CommunityUser; +import com.mcwl.communityCenter.domain.dto.CommunityListPageRes; +import com.mcwl.communityCenter.domain.dto.CommunityRes; + +public interface CommunityUserService extends IService { +} diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/CommunityServiceImpl.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/CommunityServiceImpl.java index 1e3f9bb..bc3df74 100644 --- a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/CommunityServiceImpl.java +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/CommunityServiceImpl.java @@ -1,55 +1,79 @@ package com.mcwl.communityCenter.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mcwl.common.constant.HttpStatus; -import com.mcwl.common.core.page.PageDomain; +import com.mcwl.common.core.domain.R; +import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.common.core.page.TableDataInfo; import com.mcwl.common.utils.SecurityUtils; import com.mcwl.common.utils.StringUtils; import com.mcwl.communityCenter.domain.Community; +import com.mcwl.communityCenter.domain.CommunityUser; +import com.mcwl.communityCenter.domain.dto.CommunityListPageRes; import com.mcwl.communityCenter.domain.dto.CommunityRes; +import com.mcwl.communityCenter.domain.dto.JoinCommunityRes; import com.mcwl.communityCenter.domain.vo.CommunityVo; import com.mcwl.communityCenter.mapper.CommunityMapper; +import com.mcwl.communityCenter.mapper.CommunityUserMapper; import com.mcwl.communityCenter.service.CommunityService; +import com.mcwl.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; @Service @RequiredArgsConstructor public class CommunityServiceImpl extends ServiceImpl implements CommunityService { + private final CommunityUserMapper communityUserMapper; + + private final ISysUserService sysUserService; @Override - public TableDataInfo listByPage(PageDomain pageDomain) { + public TableDataInfo listByPage(CommunityListPageRes communityListPageRes) { - Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); + // 查询社区加入人数,以map形式返回,key为社区id,value为加入人数 + Map communityJoinNumMap = baseMapper.selectCommunityJoinNum(); + + Page page = new Page<>(communityListPageRes.getPageNum(), communityListPageRes.getPageSize()); - boolean isAsc = Objects.equals(pageDomain.getIsAsc(), "asc"); + boolean isAsc = Objects.equals(communityListPageRes.getIsAsc(), "asc"); - if (StringUtils.isBlank(pageDomain.getOrderByColumn())) { - pageDomain.setOrderByColumn("create_time"); + if (StringUtils.isBlank(communityListPageRes.getOrderByColumn())) { + communityListPageRes.setOrderByColumn("create_time"); } - OrderItem orderItem = new OrderItem(pageDomain.getOrderByColumn(), isAsc); + OrderItem orderItem = new OrderItem(communityListPageRes.getOrderByColumn(), isAsc); page.addOrder(orderItem); - baseMapper.selectPage(page, null); + baseMapper.selectPage(page, new LambdaQueryWrapper() + .eq(communityListPageRes.getCommunityTagId() != null, Community::getCommunityTagId, communityListPageRes.getCommunityTagId())); List communityList = page.getRecords(); List communityVoList = new ArrayList<>(); + + LocalDate currentLocalDate = LocalDate.now(ZoneId.systemDefault()); for (Community community : communityList) { CommunityVo communityVo = new CommunityVo(); BeanUtil.copyProperties(community, communityVo); + // 当前时间和创建时间差 + Date createTime = community.getCreateTime(); + LocalDate createLocalDate = createTime.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + long daysBetween = ChronoUnit.DAYS.between(createLocalDate, currentLocalDate); + communityVo.setCreateDay(daysBetween); + communityVo.setJoinNum(communityJoinNumMap.getOrDefault(community.getId(), 0)); communityVoList.add(communityVo); } @@ -70,5 +94,47 @@ public class CommunityServiceImpl extends ServiceImpl joinCommunity(JoinCommunityRes joinCommunityRes) { + Long tenantId = joinCommunityRes.getTenantId(); + Long communityId = joinCommunityRes.getCommunityId(); + Community community = baseMapper.getByTenantIdAndCommunityId(tenantId, communityId); + if (Objects.isNull(community)) { + return R.fail("社区不存在,请重新加入"); + } + + CommunityUser communityUser = communityUserMapper.selectByTenantIdAndCommunityIdAndUserId(tenantId, + communityId, + SecurityUtils.getUserId()); + + if (Objects.nonNull(communityUser)) { + return R.fail("您已加入该社区,不能重复加入"); + } + + SysUser user = SecurityUtils.getLoginUser().getUser(); + Double wallet = user.getWallet(); + Double price = community.getPrice(); + if (wallet < price) { + return R.fail("钱包余额不足,请充值"); + } + // 扣费 + BigDecimal priceBigDecimal = new BigDecimal(price.toString()); + BigDecimal walletBigDecimal = new BigDecimal(wallet.toString()); + user.setWallet(walletBigDecimal.subtract(priceBigDecimal).doubleValue()); + + sysUserService.updateUser(user); + + communityUserMapper.insert(new CommunityUser(null, tenantId, communityId, SecurityUtils.getUserId())); + + + return R.ok("加入成功"); + } + } diff --git a/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/CommunityUserServiceImpl.java b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/CommunityUserServiceImpl.java new file mode 100644 index 0000000..bb8a8c6 --- /dev/null +++ b/mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/CommunityUserServiceImpl.java @@ -0,0 +1,37 @@ +package com.mcwl.communityCenter.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mcwl.common.constant.HttpStatus; +import com.mcwl.common.core.domain.R; +import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.common.core.page.TableDataInfo; +import com.mcwl.common.utils.SecurityUtils; +import com.mcwl.common.utils.StringUtils; +import com.mcwl.communityCenter.domain.Community; +import com.mcwl.communityCenter.domain.CommunityUser; +import com.mcwl.communityCenter.domain.dto.CommunityListPageRes; +import com.mcwl.communityCenter.domain.dto.CommunityRes; +import com.mcwl.communityCenter.domain.vo.CommunityVo; +import com.mcwl.communityCenter.mapper.CommunityMapper; +import com.mcwl.communityCenter.mapper.CommunityUserMapper; +import com.mcwl.communityCenter.service.CommunityService; +import com.mcwl.communityCenter.service.CommunityUserService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; + +@Service +@RequiredArgsConstructor +public class CommunityUserServiceImpl extends ServiceImpl implements CommunityUserService { + + + +} diff --git a/mcwl-communityCenter/src/main/resources/mapper/communityCenter/CommunityMapper.xml b/mcwl-communityCenter/src/main/resources/mapper/communityCenter/CommunityMapper.xml index 1a36869..2330df9 100644 --- a/mcwl-communityCenter/src/main/resources/mapper/communityCenter/CommunityMapper.xml +++ b/mcwl-communityCenter/src/main/resources/mapper/communityCenter/CommunityMapper.xml @@ -16,4 +16,13 @@ and id = #{communityId} and del_flag = '0'; + + \ No newline at end of file diff --git a/mcwl-communityCenter/src/main/resources/mapper/communityCenter/CommunityUserMapper.xml b/mcwl-communityCenter/src/main/resources/mapper/communityCenter/CommunityUserMapper.xml new file mode 100644 index 0000000..dd1d3e2 --- /dev/null +++ b/mcwl-communityCenter/src/main/resources/mapper/communityCenter/CommunityUserMapper.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file