feat:朋友圈
feat:朋友圈操作
This commit is contained in:
1 parent
8f3b113fcc
commit
b6fea10c95
30 files changed
+480
-75
No files matched your search
+3
-3
@@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
||||
/**
|
||||
* 会员朋友圈
|
||||
*/
|
||||
public interface MemberRecentErrorCode {
|
||||
public interface MemberErrorCode {
|
||||
|
||||
// ========== 用户相关 1-004-001-000 ============
|
||||
ErrorCode USER_NOT_EXISTS = new ErrorCode(1_004_001_000, "用户不存在");
|
||||
@@ -55,7 +55,7 @@ public interface MemberRecentErrorCode {
|
||||
|
||||
//========== 用户朋友圈 1-004-012-000 ==========
|
||||
ErrorCode OPERATION_NOT_EXISTS = new ErrorCode(2_001_000_001, "朋友圈操作不存在");
|
||||
|
||||
ErrorCode RECENT_NOT_EXISTS = new ErrorCode(2_001_000_001, "朋友圈操作不存在");
|
||||
|
||||
ErrorCode REPORT_TYPE_NOT_NULL = new ErrorCode(2_001_000_002, "举报类型不能为空");
|
||||
ErrorCode RATING_SCORE_NOT_NULL = new ErrorCode(2_001_000_003, "评价分数不能为空");
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
package cn.iocoder.yudao.module.member.enums;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 朋友圈操作
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum MemberRecentOperateEnum {
|
||||
/**
|
||||
* 朋友圈-点赞
|
||||
*/
|
||||
RECENT_LIKE("1", "点赞"),
|
||||
/**
|
||||
* 朋友圈-举报
|
||||
*/
|
||||
RECENT_REPORT("2", "举报"),
|
||||
/**
|
||||
* 朋友圈-屏蔽
|
||||
*/
|
||||
RECENT_SHIELD("3", "屏蔽"),
|
||||
/**
|
||||
* 用户-收藏
|
||||
*/
|
||||
MEMBER_COLLECT("4", "收藏"),
|
||||
/**
|
||||
* 用户-屏蔽
|
||||
*/
|
||||
MEMBER_SHIELD("5", "屏蔽"),
|
||||
/**
|
||||
* 用户-举报
|
||||
*/
|
||||
MEMBER_REPORT("6", "举报"),
|
||||
/**
|
||||
* 用户-评价
|
||||
*/
|
||||
MEMBER_RATING("7", "评价"),
|
||||
;
|
||||
private final String type;
|
||||
private final String description;
|
||||
|
||||
public static boolean contains(MemberRecentOperateEnum operateEnum) {
|
||||
return Arrays.asList(values()).stream().anyMatch(v -> ObjectUtil.equals(v.type, operateEnum.getType()));
|
||||
}
|
||||
|
||||
public static boolean contains(List<MemberRecentOperateEnum> operateEnumList) {
|
||||
return operateEnumList.stream().anyMatch(MemberRecentOperateEnum::contains);
|
||||
}
|
||||
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.member.enums;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 朋友圈查看场景 square
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum MemberRecentSceneEnum {
|
||||
DYNAMIC_RECOMMEND("1", "动态-推荐"),
|
||||
DYNAMIC_NEARBY("2", "动态-附近"),
|
||||
SQUARE_SQUARE("3", "广场-广场"),
|
||||
SQUARE_NEW_TIME("4", "广场-最近"),
|
||||
SQUARE_NEW_PERSON("4", "广场-新人"),
|
||||
;
|
||||
private final String type;
|
||||
private final String description;
|
||||
|
||||
public static boolean contains(MemberRecentOperateEnum operateEnum) {
|
||||
return Arrays.asList(values()).stream().anyMatch(v -> ObjectUtil.equals(v.type, operateEnum.getType()));
|
||||
}
|
||||
|
||||
public static boolean contains(List<MemberRecentOperateEnum> operateEnumList) {
|
||||
return operateEnumList.stream().anyMatch(MemberRecentOperateEnum::contains);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -11,7 +11,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.EXPERIENCE_BIZ_NOT_SUPPORT;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.EXPERIENCE_BIZ_NOT_SUPPORT;
|
||||
|
||||
/**
|
||||
* 会员等级 API 实现类
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.POINT_RECORD_BIZ_NOT_SUPPORT;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.POINT_RECORD_BIZ_NOT_SUPPORT;
|
||||
|
||||
/**
|
||||
* 用户积分的 API 实现类
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.USER_MOBILE_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.USER_MOBILE_NOT_EXISTS;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
+10
-8
@@ -1,7 +1,9 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.recent;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -17,11 +19,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||
|
||||
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*;
|
||||
@@ -73,22 +77,20 @@ public class RecentController {
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得朋友圈分页")
|
||||
@PreAuthorize("@ss.hasPermission('member:recent:query')")
|
||||
public CommonResult<PageResult<RecentRespVO>> getRecentPage(@Valid RecentPageReqVO pageReqVO) {
|
||||
PageResult<RecentDO> pageResult = recentService.getRecentPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, RecentRespVO.class));
|
||||
public CommonResult<PageResult<RecentPageResVo>> getRecentPage(@Valid RecentPageReqVO pageReqVO) {
|
||||
PageResult<RecentPageResVo> pageResult = recentService.getRecentPage(pageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出朋友圈 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('member:recent:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportRecentExcel(@Valid RecentPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
public void exportRecentExcel(@Valid RecentPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<RecentDO> list = recentService.getRecentPage(pageReqVO).getList();
|
||||
List<RecentPageResVo> list = recentService.getRecentPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "朋友圈.xls", "数据", RecentRespVO.class,
|
||||
BeanUtils.toBean(list, RecentRespVO.class));
|
||||
ExcelUtils.write(response, "朋友圈.xls", "数据", RecentRespVO.class, BeanUtils.toBean(list, RecentRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.recent.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class RecentPageResVo extends RecentDO {
|
||||
|
||||
@Schema(description = "用户朋友圈编号")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "用户编号")
|
||||
private Long memberId;
|
||||
|
||||
@Schema(description = "用户头像")
|
||||
private String memberAvatar;
|
||||
|
||||
@Schema(description = "用户昵称")
|
||||
private String memberNickname;
|
||||
|
||||
@Schema(description = "用户年龄")
|
||||
private String memberAge;
|
||||
|
||||
@Schema(description = "用户职业")
|
||||
private String memberOcc;
|
||||
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.recent;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentPageResVo;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentOperateReqVo;
|
||||
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentQuickPageVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.service.recent.RecentService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
|
||||
@Tag(name = "用户 APP - 朋友圈")
|
||||
@RestController
|
||||
@RequestMapping("/member/recent")
|
||||
@Validated
|
||||
public class AppRecentController {
|
||||
|
||||
@Resource
|
||||
private RecentService recentService;
|
||||
|
||||
@PostMapping("/quick-page")
|
||||
@Operation(summary = "快速查询朋友圈")
|
||||
public CommonResult<PageResult<RecentPageResVo>> quickPage(@Valid @RequestBody AppRecentQuickPageVO dto) {
|
||||
dto.setMemberId(getLoginUserId());
|
||||
return success(recentService.quickPage(BeanUtils.toBean(dto, RecentSaveReqVO.class)));
|
||||
}
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建朋友圈")
|
||||
public CommonResult<Long> createRecent(@Valid @RequestBody AppRecentSaveReqVO dto) {
|
||||
dto.setMemberId(getLoginUserId());
|
||||
return success(recentService.createRecent(BeanUtils.toBean(dto, RecentSaveReqVO.class)));
|
||||
}
|
||||
|
||||
@PostMapping("/operate")
|
||||
@Operation(summary = "朋友圈操作")
|
||||
public CommonResult<Long> operate(@Valid @RequestBody AppRecentOperateReqVo dto) {
|
||||
dto.setMemberId(getLoginUserId());
|
||||
return success(recentService.operate(dto));
|
||||
}
|
||||
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.recent.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.member.enums.MemberRecentOperateEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
public class AppRecentOperateReqVo {
|
||||
|
||||
@Schema(description = "操作用户标号")
|
||||
private Long memberId;
|
||||
|
||||
@Schema(description = "用户朋友圈编号")
|
||||
@NotNull(message = "用户朋友圈编号不能为空")
|
||||
private Long memberRecentId;
|
||||
|
||||
@Schema(description = "朋友圈操作类型")
|
||||
@NotNull(message = "朋友圈操作类型不能为空")
|
||||
private MemberRecentOperateEnum action;
|
||||
|
||||
@Schema(description = "举报类型")
|
||||
private String reportType;
|
||||
|
||||
@Schema(description = "身材评分")
|
||||
private Integer scoreSc;
|
||||
|
||||
@Schema(description = "耐心评分")
|
||||
private Integer scoreNx;
|
||||
|
||||
@Schema(description = "爽快评分")
|
||||
private Integer scoreSk;
|
||||
|
||||
@Schema(description = "有趣评分")
|
||||
private Integer scoreYq;
|
||||
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.recent.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.module.member.enums.MemberRecentSceneEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
public class AppRecentQuickPageVO extends PageParam {
|
||||
|
||||
@Schema(description = "用户id")
|
||||
private Long memberId;
|
||||
|
||||
@Schema(description = "场景")
|
||||
@NotNull(message = "场景不能为空")
|
||||
private MemberRecentSceneEnum scene;
|
||||
|
||||
@Schema(description = "省")
|
||||
private String province;
|
||||
|
||||
@Schema(description = "市")
|
||||
private String city;
|
||||
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.recent.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class AppRecentSaveReqVO {
|
||||
|
||||
@Schema(description = "用户编号")
|
||||
private Long memberId;
|
||||
|
||||
@Schema(description = "主图", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "主图不能为空")
|
||||
private String coverPic;
|
||||
|
||||
@Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "描述不能为空")
|
||||
private String describe;
|
||||
|
||||
@Schema(description = "发布-经度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "发布-经度不能为空")
|
||||
private BigDecimal issueLong;
|
||||
|
||||
@Schema(description = "发布-纬度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "发布-纬度不能为空")
|
||||
private BigDecimal issueLat;
|
||||
|
||||
@Schema(description = "发布-省")
|
||||
private String issueProvince;
|
||||
|
||||
@Schema(description = "发布-市")
|
||||
private String issueCity;
|
||||
|
||||
@Schema(description = "发布-区")
|
||||
private String issueDistrict;
|
||||
|
||||
@Schema(description = "发布-详细地址")
|
||||
private String issueAddress;
|
||||
}
|
||||
+2
@@ -1,11 +1,13 @@
|
||||
package cn.iocoder.yudao.module.member.dal.dataobject.recent;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
|
||||
+28
-7
@@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.member.dal.dataobject.user;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
|
||||
import cn.iocoder.yudao.framework.ip.core.Area;
|
||||
@@ -20,7 +21,7 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员用户 DO
|
||||
*
|
||||
* <p>
|
||||
* uk_mobile 索引:基于 {@link #mobile} 字段
|
||||
*
|
||||
* @author 芋道源码
|
||||
@@ -47,29 +48,33 @@ public class MemberUserDO extends TenantBaseDO {
|
||||
private String mobile;
|
||||
/**
|
||||
* 加密后的密码
|
||||
*
|
||||
* <p>
|
||||
* 因为目前使用 {@link BCryptPasswordEncoder} 加密器,所以无需自己处理 salt 盐
|
||||
*/
|
||||
private String password;
|
||||
/**
|
||||
* 帐号状态
|
||||
*
|
||||
* <p>
|
||||
* 枚举 {@link CommonStatusEnum}
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 注册 IP
|
||||
*/
|
||||
private String registerIp;
|
||||
|
||||
/**
|
||||
* 注册终端
|
||||
* 枚举 {@link TerminalEnum}
|
||||
*/
|
||||
private Integer registerTerminal;
|
||||
|
||||
/**
|
||||
* 最后登录IP
|
||||
*/
|
||||
private String loginIp;
|
||||
|
||||
/**
|
||||
* 最后登录时间
|
||||
*/
|
||||
@@ -81,6 +86,7 @@ public class MemberUserDO extends TenantBaseDO {
|
||||
* 用户昵称
|
||||
*/
|
||||
private String nickname;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
@@ -90,22 +96,31 @@ public class MemberUserDO extends TenantBaseDO {
|
||||
* 真实名字
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*
|
||||
* <p>
|
||||
* 枚举 {@link SexEnum}
|
||||
*/
|
||||
private Integer sex;
|
||||
|
||||
/**
|
||||
* 职业
|
||||
*/
|
||||
private String occ;
|
||||
|
||||
/**
|
||||
* 出生日期
|
||||
*/
|
||||
private LocalDateTime birthday;
|
||||
|
||||
/**
|
||||
* 所在地
|
||||
*
|
||||
* <p>
|
||||
* 关联 {@link Area#getId()} 字段
|
||||
*/
|
||||
private Integer areaId;
|
||||
|
||||
/**
|
||||
* 用户备注
|
||||
*/
|
||||
@@ -127,7 +142,7 @@ public class MemberUserDO extends TenantBaseDO {
|
||||
|
||||
/**
|
||||
* 会员级别编号
|
||||
*
|
||||
* <p>
|
||||
* 关联 {@link MemberLevelDO#getId()} 字段
|
||||
*/
|
||||
private Long levelId;
|
||||
@@ -137,9 +152,15 @@ public class MemberUserDO extends TenantBaseDO {
|
||||
private Integer experience;
|
||||
/**
|
||||
* 用户分组编号
|
||||
*
|
||||
* <p>
|
||||
* 关联 {@link MemberGroupDO#getId()} 字段
|
||||
*/
|
||||
private Long groupId;
|
||||
|
||||
|
||||
public String getAge() {
|
||||
if (ObjectUtil.isEmpty(birthday)) return "未知";
|
||||
return String.valueOf(LocalDateTime.now().getYear() - birthday.getYear());
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -14,7 +14,7 @@ import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.ADDRESS_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.ADDRESS_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 用户收件地址 Service 实现类
|
||||
|
||||
+1
-3
@@ -1,7 +1,6 @@
|
||||
package cn.iocoder.yudao.module.member.service.auth;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
|
||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||
@@ -37,8 +36,7 @@ import java.util.Objects;
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
|
||||
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getTerminal;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.*;
|
||||
|
||||
/**
|
||||
* 会员的认证 Service 接口
|
||||
|
||||
+2
-2
@@ -18,8 +18,8 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.GROUP_HAS_USER;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.GROUP_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.GROUP_HAS_USER;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.GROUP_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 用户分组 Service 实现类
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.*;
|
||||
|
||||
/**
|
||||
* 会员等级 Service 实现类
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ import java.util.Set;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.USER_POINT_NOT_ENOUGH;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.USER_POINT_NOT_ENOUGH;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
+2
-5
@@ -4,15 +4,12 @@ import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationPageRe
|
||||
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.recent.OperationDO;
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.recent.OperationMapper;
|
||||
import cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode;
|
||||
import cn.iocoder.yudao.module.member.enums.MemberErrorCode;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
|
||||
@@ -58,7 +55,7 @@ public class OperationServiceImpl implements OperationService {
|
||||
|
||||
private void validateOperationExists(Long id) {
|
||||
if (operationMapper.selectById(id) == null) {
|
||||
throw exception(MemberRecentErrorCode.OPERATION_NOT_EXISTS);
|
||||
throw exception(MemberErrorCode.OPERATION_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-14
@@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.member.service.recent;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*;
|
||||
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentOperateReqVo;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
@@ -16,40 +18,36 @@ public interface RecentService {
|
||||
|
||||
/**
|
||||
* 创建朋友圈
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createRecent(@Valid RecentSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新朋友圈
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateRecent(@Valid RecentSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除朋友圈
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteRecent(Long id);
|
||||
|
||||
/**
|
||||
* 朋友圈操作
|
||||
*/
|
||||
Long operate(@Valid AppRecentOperateReqVo dto);
|
||||
|
||||
/**
|
||||
* 获得朋友圈
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 朋友圈
|
||||
*/
|
||||
RecentDO getRecent(Long id);
|
||||
|
||||
/**
|
||||
* 获得朋友圈分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 朋友圈分页
|
||||
*/
|
||||
PageResult<RecentDO> getRecentPage(RecentPageReqVO pageReqVO);
|
||||
PageResult<RecentPageResVo> getRecentPage(RecentPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 快速查询朋友圈
|
||||
*/
|
||||
PageResult<RecentPageResVo> quickPage(RecentSaveReqVO bean);
|
||||
}
|
||||
+128
-14
@@ -1,22 +1,36 @@
|
||||
package cn.iocoder.yudao.module.member.service.recent;
|
||||
|
||||
import cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode;
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentOperateReqVo;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.recent.OperationDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.recent.OperationMapper;
|
||||
import cn.iocoder.yudao.module.member.enums.MemberErrorCode;
|
||||
import cn.iocoder.yudao.module.member.enums.MemberRecentOperateEnum;
|
||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.recent.RecentMapper;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 朋友圈 Service 实现类
|
||||
@@ -29,11 +43,21 @@ public class RecentServiceImpl implements RecentService {
|
||||
|
||||
@Resource
|
||||
private RecentMapper recentMapper;
|
||||
@Resource
|
||||
private OperationMapper operationMapper;
|
||||
|
||||
@Resource
|
||||
private MemberUserService memberUserService;
|
||||
|
||||
@Override
|
||||
public Long createRecent(RecentSaveReqVO createReqVO) {
|
||||
public Long createRecent(RecentSaveReqVO vo) {
|
||||
// 查询用户
|
||||
MemberUserDO user = memberUserService.getUser(vo.getMemberId());
|
||||
if (ObjectUtil.isNotEmpty(user)) throw exception(MemberErrorCode.USER_NOT_EXISTS);
|
||||
// 判断是否为会员
|
||||
|
||||
// 插入
|
||||
RecentDO recent = BeanUtils.toBean(createReqVO, RecentDO.class);
|
||||
RecentDO recent = BeanUtils.toBean(vo, RecentDO.class);
|
||||
recentMapper.insert(recent);
|
||||
// 返回
|
||||
return recent.getId();
|
||||
@@ -56,10 +80,53 @@ public class RecentServiceImpl implements RecentService {
|
||||
recentMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateRecentExists(Long id) {
|
||||
if (recentMapper.selectById(id) == null) {
|
||||
throw exception(MemberRecentErrorCode.RECENT_NOT_EXISTS);
|
||||
/**
|
||||
* 朋友圈操作
|
||||
*/
|
||||
@Override
|
||||
public Long operate(AppRecentOperateReqVo dto) {
|
||||
validateRecentExists(dto.getMemberRecentId());
|
||||
OperationDO operationDO = operationMapper.selectOne(new LambdaQueryWrapperX<OperationDO>()
|
||||
.eq(OperationDO::getMemberId, dto.getMemberId())
|
||||
.eq(OperationDO::getMemberRecentId, dto.getMemberRecentId())
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(operationDO) && ObjectUtil.isNotEmpty(operationDO.getCancelTime())) {
|
||||
operationMapper.delete(new LambdaQueryWrapperX<OperationDO>()
|
||||
.eq(OperationDO::getMemberId, dto.getMemberId())
|
||||
.eq(OperationDO::getMemberRecentId, dto.getMemberRecentId())
|
||||
);
|
||||
}
|
||||
operationDO = new OperationDO();
|
||||
operationDO.setMemberId(dto.getMemberId());
|
||||
operationDO.setMemberRecentId(dto.getMemberRecentId());
|
||||
operationDO.setBizType(dto.getAction().getType());
|
||||
// 举报
|
||||
List<MemberRecentOperateEnum> reportList = new ArrayList<MemberRecentOperateEnum>() {{
|
||||
add(MemberRecentOperateEnum.RECENT_REPORT);
|
||||
add(MemberRecentOperateEnum.MEMBER_REPORT);
|
||||
}};
|
||||
if (MemberRecentOperateEnum.contains(reportList)) {
|
||||
if (ObjectUtil.isEmpty(dto.getReportType())) throw exception(MemberErrorCode.REPORT_TYPE_NOT_NULL);
|
||||
operationDO.setReportType(dto.getReportType());
|
||||
}
|
||||
// 评价
|
||||
List<MemberRecentOperateEnum> ratingList = new ArrayList<MemberRecentOperateEnum>() {{
|
||||
add(MemberRecentOperateEnum.MEMBER_RATING);
|
||||
}};
|
||||
if (MemberRecentOperateEnum.contains(ratingList)) {
|
||||
if (ObjectUtil.isEmpty(dto.getScoreSc()) || ObjectUtil.isEmpty(dto.getScoreNx()) || ObjectUtil.isEmpty(dto.getScoreSk()) || ObjectUtil.isEmpty(dto.getScoreYq())) {
|
||||
throw exception(MemberErrorCode.RATING_SCORE_NOT_NULL);
|
||||
}
|
||||
operationDO.setScoreSc(dto.getScoreSc());
|
||||
operationDO.setScoreNx(dto.getScoreNx());
|
||||
operationDO.setScoreSk(dto.getScoreSk());
|
||||
operationDO.setScoreYq(dto.getScoreYq());
|
||||
}
|
||||
|
||||
operationDO.setBizType(dto.getAction().getType());
|
||||
operationDO.setTapTime(LocalDateTime.now());
|
||||
operationMapper.insert(operationDO);
|
||||
return operationDO.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -67,9 +134,56 @@ public class RecentServiceImpl implements RecentService {
|
||||
return recentMapper.selectById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得朋友圈分页
|
||||
*/
|
||||
@Override
|
||||
public PageResult<RecentDO> getRecentPage(RecentPageReqVO pageReqVO) {
|
||||
return recentMapper.selectPage(pageReqVO);
|
||||
public PageResult<RecentPageResVo> getRecentPage(RecentPageReqVO pageReqVO) {
|
||||
PageResult<RecentDO> recentPageList = recentMapper.selectPage(pageReqVO);
|
||||
List<RecentPageResVo> resultList = BeanUtils.toBean(recentPageList.getList(), RecentPageResVo.class);
|
||||
disposeRecentList(resultList, pageReqVO);
|
||||
return new PageResult<>(resultList, recentPageList.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 快速查询
|
||||
*/
|
||||
@Override
|
||||
public PageResult<RecentPageResVo> quickPage(RecentSaveReqVO bean) {
|
||||
PageResult<RecentDO> recentPageList = recentMapper.selectPage(new RecentPageReqVO());
|
||||
List<RecentPageResVo> resultList = BeanUtils.toBean(recentPageList.getList(), RecentPageResVo.class);
|
||||
disposeRecentList(resultList, null);
|
||||
return new PageResult<>(resultList, recentPageList.getTotal());
|
||||
}
|
||||
|
||||
private void validateRecentExists(Long id) {
|
||||
if (recentMapper.selectById(id) == null) {
|
||||
throw exception(MemberErrorCode.RECENT_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
private void disposeRecentList(List<RecentPageResVo> list, RecentPageReqVO dto) {
|
||||
if (ObjectUtil.isEmpty(list)) return;
|
||||
Map<Long, MemberUserDO> memberMap = new HashMap<>();
|
||||
// 查询人员
|
||||
List<Long> memberIds = list.stream().map(RecentDO::getMemberId).distinct().collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(memberIds)) {
|
||||
List<MemberUserDO> memberList = memberUserService.getUserList(memberIds);
|
||||
if (ObjectUtil.isNotEmpty(memberList)) {
|
||||
memberMap = CollStreamUtil.toIdentityMap(memberList, MemberUserDO::getId);
|
||||
}
|
||||
}
|
||||
for (RecentPageResVo v : list) {
|
||||
if (ObjectUtil.isNotEmpty(memberMap)) {
|
||||
MemberUserDO targetMember = memberMap.get(v.getMemberId());
|
||||
if (ObjectUtil.isNotEmpty(targetMember)) {
|
||||
v.setMemberAvatar(targetMember.getAvatar());
|
||||
v.setMemberNickname(targetMember.getNickname());
|
||||
v.setMemberAge(targetMember.getAge());
|
||||
v.setMemberOcc(targetMember.getOcc());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -13,8 +13,8 @@ import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.SIGN_IN_CONFIG_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.SIGN_IN_CONFIG_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.SIGN_IN_CONFIG_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.SIGN_IN_CONFIG_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 签到规则 Service 实现类
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ import java.util.Set;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.SIGN_IN_RECORD_TODAY_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.SIGN_IN_RECORD_TODAY_EXISTS;
|
||||
|
||||
/**
|
||||
* 签到记录 Service 实现类
|
||||
|
||||
+1
-2
@@ -19,8 +19,7 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.*;
|
||||
|
||||
/**
|
||||
* 会员标签 Service 实现类
|
||||
|
||||
+1
-2
@@ -37,8 +37,7 @@ import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.*;
|
||||
|
||||
/**
|
||||
* 会员 User Service 实现类
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.ADDRESS_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.ADDRESS_NOT_EXISTS;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
|
||||
+2
-2
@@ -21,8 +21,8 @@ import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgn
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.GROUP_HAS_USER;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.GROUP_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.GROUP_HAS_USER;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.GROUP_NOT_EXISTS;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
+1
-2
@@ -22,8 +22,7 @@ import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgn
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.*;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
// TODO 芋艿:完全 review 完,在去 review 单测
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberRecentErrorCode.TAG_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.TAG_NOT_EXISTS;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
// TODO 芋艿:完全 review 完,在去 review 单测
|
||||
|
||||
Reference in new issue
Block a user