member:完善 cloud 下的 api 注解问题

This commit is contained in:
YunaiV 2023-10-22 16:35:29 +08:00
parent 08c5248757
commit 6a51097e1d
25 changed files with 358 additions and 324 deletions

View File

@ -22,12 +22,26 @@
<artifactId>yudao-common</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<scope>provided</scope>
</dependency>
<!-- 参数校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<optional>true</optional>
</dependency>
<!-- RPC 远程调用相关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -1,29 +0,0 @@
package cn.iocoder.yudao.module.member.api.address;
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
/**
* 用户收件地址 API 接口
*
* @author 芋道源码
*/
public interface AddressApi {
/**
* 获得用户收件地址
*
* @param id 收件地址编号
* @param userId 用户编号
* @return 用户收件地址
*/
AddressRespDTO getAddress(Long id, Long userId);
/**
* 获得用户默认收件地址
*
* @param userId 用户编号
* @return 用户收件地址
*/
AddressRespDTO getDefaultAddress(Long userId);
}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.member.api.address;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO;
import cn.iocoder.yudao.module.member.enums.ApiConstants;
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.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 用户收件地址")
public interface MemberAddressApi {
String PREFIX = ApiConstants.PREFIX + "/address";
@GetMapping(PREFIX + "/get")
@Operation(summary = "获得用户收件地址")
@Parameters({
@Parameter(name = "id", description = "收件地址编号", required = true, example = "1024"),
@Parameter(name = "userId", description = "用户编号", required = true, example = "2048"),
})
CommonResult<MemberAddressRespDTO> getAddress(@RequestParam("id") Long id,
@RequestParam("userId") Long userId);
/**
* 获得用户默认收件地址
*
* @param userId 用户编号
* @return 用户收件地址
*/
@GetMapping(PREFIX + "/get-default")
@Operation(summary = "获得用户默认收件地址")
@Parameter(name = "userId", description = "用户编号", required = true, example = "2048")
CommonResult<MemberAddressRespDTO> getDefaultAddress(@RequestParam("userId") Long userId);
}

View File

@ -1,42 +0,0 @@
package cn.iocoder.yudao.module.member.api.address.dto;
import lombok.Data;
/**
* 用户收件地址 Response DTO
*
* @author 芋道源码
*/
@Data
public class AddressRespDTO {
/**
* 编号
*/
private Long id;
/**
* 用户编号
*/
private Long userId;
/**
* 收件人名称
*/
private String name;
/**
* 手机号
*/
private String mobile;
/**
* 地区编号
*/
private Integer areaId;
/**
* 收件详细地址
*/
private String detailAddress;
/**
* 是否默认
*/
private Boolean defaultStatus;
}

View File

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.member.api.address.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "RPC 服务 - 用户收件地址 Response DTO")
@Data
public class MemberAddressRespDTO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
private Long userId;
@Schema(description = "收件人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
private String name;
@Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
private String mobile;
@Schema(description = "地区编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2666")
private Integer areaId;
@Schema(description = "收件详细地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码 88 小区 106 号")
private String detailAddress;
@Schema(description = "是否默认", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
private Boolean defaultStatus;
}

View File

@ -1,18 +1,21 @@
package cn.iocoder.yudao.module.member.api.config;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO;
import cn.iocoder.yudao.module.member.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* 用户配置 API 接口
*
* @author owen
*/
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 用户配置")
public interface MemberConfigApi {
/**
* 获得积分配置
*
* @return 积分配置
*/
MemberConfigRespDTO getConfig();
String PREFIX = ApiConstants.PREFIX + "/config";
@GetMapping(PREFIX + "/get")
@Operation(summary = "获得用户配置")
CommonResult<MemberConfigRespDTO> getConfig();
}

View File

@ -1,32 +1,22 @@
package cn.iocoder.yudao.module.member.api.config.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 用户信息 Response DTO
*
* @author 芋道源码
*/
@Schema(description = "RPC 服务 - 用户信息 Response DTO")
@Data
public class MemberConfigRespDTO {
/**
* 积分抵扣开关
*/
@Schema(description = "积分抵扣开关", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
private Boolean pointTradeDeductEnable;
/**
* 积分抵扣单位
* <p>
* 1 积分抵扣多少分
*/
private Integer pointTradeDeductUnitPrice;
/**
* 积分抵扣最大值
*/
@Schema(description = "积分抵扣,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
private Integer pointTradeDeductUnitPrice; // 1 积分抵扣多少分
@Schema(description = "积分抵扣最大值", requiredMode = Schema.RequiredMode.REQUIRED, example = "200")
private Integer pointTradeDeductMaxPrice;
/**
* 1 元赠送多少分
*/
@Schema(description = "1 元赠送多少分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
private Integer pointTradeGivePoint;
}

View File

@ -1,41 +1,52 @@
package cn.iocoder.yudao.module.member.api.level;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO;
import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
import cn.iocoder.yudao.module.member.enums.ApiConstants;
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.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* 会员等级 API 接口
*
* @author owen
*/
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 会员等级")
public interface MemberLevelApi {
/**
* 获得会员等级
*
* @param id 会员等级编号
* @return 会员等级
*/
MemberLevelRespDTO getMemberLevel(Long id);
String PREFIX = ApiConstants.PREFIX + "/address";
/**
* 增加会员经验
*
* @param userId 会员ID
* @param experience 经验
* @param bizType 业务类型 {@link MemberExperienceBizTypeEnum}
* @param bizId 业务编号
*/
void addExperience(Long userId, Integer experience, Integer bizType, String bizId);
@GetMapping(PREFIX + "/get")
@Operation(summary = "获得会员等级")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
CommonResult<MemberLevelRespDTO> getMemberLevel(@RequestParam("id") Long id);
/**
* 扣减会员经验
*
* @param userId 会员ID
* @param experience 经验
* @param bizType 业务类型 {@link MemberExperienceBizTypeEnum}
* @param bizId 业务编号
*/
void reduceExperience(Long userId, Integer experience, Integer bizType, String bizId);
@PostMapping(PREFIX + "/add")
@Operation(summary = "增加会员经验")
@Parameters({
@Parameter(name = "userId", description = "会员编号", required = true, example = "1024"),
@Parameter(name = "experience", description = "经验值", required = true, example = "100"),
@Parameter(name = "bizType", description = "业务类型", required = true, example = "1"),
@Parameter(name = "bizId", description = "业务编号", required = true, example = "1")
})
CommonResult<Boolean> addExperience(@RequestParam("userId") Long userId,
@RequestParam("experience") Integer experience,
@RequestParam("bizType") Integer bizType,
@RequestParam("bizId") String bizId);
@PostMapping(PREFIX + "/reduce")
@Operation(summary = "扣减会员经验")
@Parameters({
@Parameter(name = "userId", description = "会员编号", required = true, example = "1024"),
@Parameter(name = "experience", description = "经验值", required = true, example = "100"),
@Parameter(name = "bizType", description = "业务类型", required = true, example = "1"),
@Parameter(name = "bizId", description = "业务编号", required = true, example = "1")
})
CommonResult<Boolean> reduceExperience(@RequestParam("userId") Long userId,
@RequestParam("experience") Integer experience,
@RequestParam("bizType") Integer bizType,
@RequestParam("bizId") String bizId);
}

View File

@ -1,41 +1,28 @@
package cn.iocoder.yudao.module.member.api.level.dto;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 会员等级 Resp DTO
*
* @author 芋道源码
*/
@Schema(description = "RPC 服务 - 会员等级 Response DTO")
@Data
public class MemberLevelRespDTO {
/**
* 编号
*/
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
/**
* 等级名称
*/
@Schema(description = "等级名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "普通会员")
private String name;
/**
* 等级
*/
@Schema(description = "等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer level;
/**
* 升级经验
*/
@Schema(description = "升级经验", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
private Integer experience;
/**
* 享受折扣
*/
@Schema(description = "享受折扣", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
private Integer discountPercent;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer status; // 参见 CommonStatusEnum 枚举
}

View File

@ -1,36 +1,47 @@
package cn.iocoder.yudao.module.member.api.point;
import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.enums.ApiConstants;
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.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.Min;
/**
* 用户积分的 API 接口
*
* @author owen
*/
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 用户积分")
public interface MemberPointApi {
/**
* 增加用户积分
*
* @param userId 用户编号
* @param point 积分
* @param bizType 业务类型 {@link MemberPointBizTypeEnum}
* @param bizId 业务编号
*/
void addPoint(Long userId, @Min(value = 1L, message = "积分必须是正数") Integer point,
Integer bizType, String bizId);
String PREFIX = ApiConstants.PREFIX + "/point";
/**
* 减少用户积分
*
* @param userId 用户编号
* @param point 积分
* @param bizType 业务类型 {@link MemberPointBizTypeEnum}
* @param bizId 业务编号
*/
void reducePoint(Long userId, @Min(value = 1L, message = "积分必须是正数") Integer point,
Integer bizType, String bizId);
@PostMapping(PREFIX + "/add")
@Operation(summary = "增加用户积分")
@Parameters({
@Parameter(name = "userId", description = "会员编号", required = true, example = "1024"),
@Parameter(name = "point", description = "积分", required = true, example = "100"),
@Parameter(name = "bizType", description = "业务类型", required = true, example = "1"),
@Parameter(name = "bizId", description = "业务编号", required = true, example = "1")
})
CommonResult<Boolean> addPoint(@RequestParam("userId") Long userId,
@RequestParam("point") @Min(value = 1L, message = "积分必须是正数") Integer point,
@RequestParam("bizType") Integer bizType,
@RequestParam("bizId") String bizId);
@PostMapping(PREFIX + "/reducePoint")
@Operation(summary = "减少用户积分")
@Parameters({
@Parameter(name = "userId", description = "会员编号", required = true, example = "1024"),
@Parameter(name = "point", description = "积分", required = true, example = "100"),
@Parameter(name = "bizType", description = "业务类型", required = true, example = "1"),
@Parameter(name = "bizId", description = "业务编号", required = true, example = "1")
})
CommonResult<Boolean> reducePoint(@RequestParam("userId") Long userId,
@RequestParam("point") @Min(value = 1L, message = "积分必须是正数") Integer point,
@RequestParam("bizType") Integer bizType,
@RequestParam("bizId") String bizId);
}

View File

@ -1,6 +1,14 @@
package cn.iocoder.yudao.module.member.api.user;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.member.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Collection;
import java.util.List;
@ -8,28 +16,21 @@ import java.util.Map;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
/**
* 会员用户的 API 接口
*
* @author 芋道源码
*/
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 会员用户的")
public interface MemberUserApi {
/**
* 获得会员用户信息
*
* @param id 用户编号
* @return 用户信息
*/
MemberUserRespDTO getUser(Long id);
String PREFIX = ApiConstants.PREFIX + "/user";
/**
* 获得会员用户信息们
*
* @param ids 用户编号的数组
* @return 用户信息们
*/
List<MemberUserRespDTO> getUserList(Collection<Long> ids);
@GetMapping(PREFIX + "/get")
@Operation(summary = "获得会员用户信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
CommonResult<MemberUserRespDTO> getUser(@RequestParam("id") Long id);
@GetMapping(PREFIX + "/list")
@Operation(summary = "获得会员用户信息们")
@Parameter(name = "ids", description = "用户编号的数组", example = "1,2", required = true)
CommonResult<List<MemberUserRespDTO>> getUserList(@RequestParam("ids") Collection<Long> ids);
/**
* 获得会员用户 Map
@ -38,22 +39,17 @@ public interface MemberUserApi {
* @return 会员用户 Map
*/
default Map<Long, MemberUserRespDTO> getUserMap(Collection<Long> ids) {
return convertMap(getUserList(ids), MemberUserRespDTO::getId);
return convertMap(getUserList(ids).getCheckedData(), MemberUserRespDTO::getId);
}
/**
* 基于用户昵称模糊匹配用户列表
*
* @param nickname 用户昵称模糊匹配
* @return 用户信息的列表
*/
List<MemberUserRespDTO> getUserListByNickname(String nickname);
@GetMapping(PREFIX + "/list-by-nickname")
@Operation(summary = "基于用户昵称,模糊匹配用户列表")
@Parameter(name = "nickname", description = "用户昵称,模糊匹配", required = true, example = "土豆")
CommonResult<List<MemberUserRespDTO>> getUserListByNickname(@RequestParam("nickname") String nickname);
@GetMapping(PREFIX + "/get-by-mobile")
@Operation(summary = "基于手机号,精准匹配用户")
@Parameter(name = "mobile", description = "基于手机号,精准匹配用户", required = true, example = "1560")
CommonResult<MemberUserRespDTO> getUserByMobile(@RequestParam("mobile") String mobile);
/**
* 基于手机号精准匹配用户
*
* @param mobile 手机号
* @return 用户信息
*/
MemberUserRespDTO getUserByMobile(String mobile);
}

View File

@ -1,55 +1,38 @@
package cn.iocoder.yudao.module.member.api.user.dto;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 用户信息 Response DTO
*
* @author 芋道源码
*/
@Schema(description = "RPC 服务 - 用户信息 Response DTO")
@Data
public class MemberUserRespDTO {
/**
* 用户ID
*/
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
/**
* 用户昵称
*/
@Schema(description = "昵称", example = "小王同学")
private String nickname;
/**
* 帐号状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
* 用户头像
*/
@Schema(description = "帐号状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer status; // 参见 CommonStatusEnum 枚举
@Schema(description = "用户头像", example = "https://www.iocoder.cn/xxx.jpg")
private String avatar;
/**
* 手机
*/
@Schema(description = "手机号", example = "15601691300")
private String mobile;
/**
* 创建时间注册时间
*/
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
// ========== 其它信息 ==========
/**
* 会员级别编号
*/
@Schema(description = "会员级别编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long levelId;
/**
* 积分
*/
@Schema(description = "积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "886")
private Integer point;
}

View File

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.member.enums;
import cn.iocoder.yudao.framework.common.enums.RpcConstants;
/**
* API 相关的枚举
*
* @author 芋道源码
*/
public class ApiConstants {
/**
* 服务名
*
* 注意需要保证和 spring.application.name 保持一致
*/
public static final String NAME = "member-server";
public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/member";
public static final String VERSION = "1.0.0";
}

View File

@ -1,33 +0,0 @@
package cn.iocoder.yudao.module.member.api.address;
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
import cn.iocoder.yudao.module.member.convert.address.AddressConvert;
import cn.iocoder.yudao.module.member.service.address.AddressService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
/**
* 用户收件地址 API 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class AddressApiImpl implements AddressApi {
@Resource
private AddressService addressService;
@Override
public AddressRespDTO getAddress(Long id, Long userId) {
return AddressConvert.INSTANCE.convert02(addressService.getAddress(userId, id));
}
@Override
public AddressRespDTO getDefaultAddress(Long userId) {
return AddressConvert.INSTANCE.convert02(addressService.getDefaultUserAddress(userId));
}
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.member.api.address;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO;
import cn.iocoder.yudao.module.member.convert.address.AddressConvert;
import cn.iocoder.yudao.module.member.service.address.AddressService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* 用户收件地址 API 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class MemberAddressApiImpl implements MemberAddressApi {
@Resource
private AddressService addressService;
@Override
public CommonResult<MemberAddressRespDTO> getAddress(Long id, Long userId) {
return success(AddressConvert.INSTANCE.convert02(addressService.getAddress(userId, id)));
}
@Override
public CommonResult<MemberAddressRespDTO> getDefaultAddress(Long userId) {
return success(AddressConvert.INSTANCE.convert02(addressService.getDefaultUserAddress(userId)));
}
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.api.config;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO;
import cn.iocoder.yudao.module.member.convert.config.MemberConfigConvert;
import cn.iocoder.yudao.module.member.service.config.MemberConfigService;
@ -8,6 +9,8 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* 用户配置 API 实现类
*
@ -21,8 +24,8 @@ public class MemberConfigApiImpl implements MemberConfigApi {
private MemberConfigService memberConfigService;
@Override
public MemberConfigRespDTO getConfig() {
return MemberConfigConvert.INSTANCE.convert01(memberConfigService.getConfig());
public CommonResult<MemberConfigRespDTO> getConfig() {
return success(MemberConfigConvert.INSTANCE.convert01(memberConfigService.getConfig()));
}
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.api.level;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO;
import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert;
import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
@ -10,6 +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.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.EXPERIENCE_BIZ_NOT_SUPPORT;
/**
@ -25,22 +27,23 @@ public class MemberLevelApiImpl implements MemberLevelApi {
private MemberLevelService memberLevelService;
@Override
public MemberLevelRespDTO getMemberLevel(Long id) {
return MemberLevelConvert.INSTANCE.convert02(memberLevelService.getLevel(id));
public CommonResult<MemberLevelRespDTO> getMemberLevel(Long id) {
return success(MemberLevelConvert.INSTANCE.convert02(memberLevelService.getLevel(id)));
}
@Override
public void addExperience(Long userId, Integer experience, Integer bizType, String bizId) {
public CommonResult<Boolean> addExperience(Long userId, Integer experience, Integer bizType, String bizId) {
MemberExperienceBizTypeEnum bizTypeEnum = MemberExperienceBizTypeEnum.getByType(bizType);
if (bizTypeEnum == null) {
throw exception(EXPERIENCE_BIZ_NOT_SUPPORT);
}
memberLevelService.addExperience(userId, experience, bizTypeEnum, bizId);
return success(true);
}
@Override
public void reduceExperience(Long userId, Integer experience, Integer bizType, String bizId) {
addExperience(userId, -experience, bizType, bizId);
public CommonResult<Boolean> reduceExperience(Long userId, Integer experience, Integer bizType, String bizId) {
return addExperience(userId, -experience, bizType, bizId);
}
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.member.api.point;
import cn.hutool.core.lang.Assert;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;
import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService;
import org.springframework.stereotype.Service;
@ -9,6 +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.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.POINT_RECORD_BIZ_NOT_SUPPORT;
/**
@ -24,23 +26,25 @@ public class MemberPointApiImpl implements MemberPointApi {
private MemberPointRecordService memberPointRecordService;
@Override
public void addPoint(Long userId, Integer point, Integer bizType, String bizId) {
public CommonResult<Boolean> addPoint(Long userId, Integer point, Integer bizType, String bizId) {
Assert.isTrue(point > 0);
MemberPointBizTypeEnum bizTypeEnum = MemberPointBizTypeEnum.getByType(bizType);
if (bizTypeEnum == null) {
throw exception(POINT_RECORD_BIZ_NOT_SUPPORT);
}
memberPointRecordService.createPointRecord(userId, point, bizTypeEnum, bizId);
return success(true);
}
@Override
public void reducePoint(Long userId, Integer point, Integer bizType, String bizId) {
public CommonResult<Boolean> reducePoint(Long userId, Integer point, Integer bizType, String bizId) {
Assert.isTrue(point > 0);
MemberPointBizTypeEnum bizTypeEnum = MemberPointBizTypeEnum.getByType(bizType);
if (bizTypeEnum == null) {
throw exception(POINT_RECORD_BIZ_NOT_SUPPORT);
}
memberPointRecordService.createPointRecord(userId, -point, bizTypeEnum, bizId);
return success(true);
}
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.api.user;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@ -11,6 +12,8 @@ import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* 会员用户的 API 实现类
*
@ -24,24 +27,24 @@ public class MemberUserApiImpl implements MemberUserApi {
private MemberUserService userService;
@Override
public MemberUserRespDTO getUser(Long id) {
public CommonResult<MemberUserRespDTO> getUser(Long id) {
MemberUserDO user = userService.getUser(id);
return MemberUserConvert.INSTANCE.convert2(user);
return success(MemberUserConvert.INSTANCE.convert2(user));
}
@Override
public List<MemberUserRespDTO> getUserList(Collection<Long> ids) {
return MemberUserConvert.INSTANCE.convertList2(userService.getUserList(ids));
public CommonResult<List<MemberUserRespDTO>> getUserList(Collection<Long> ids) {
return success(MemberUserConvert.INSTANCE.convertList2(userService.getUserList(ids)));
}
@Override
public List<MemberUserRespDTO> getUserListByNickname(String nickname) {
return MemberUserConvert.INSTANCE.convertList2(userService.getUserListByNickname(nickname));
public CommonResult<List<MemberUserRespDTO>> getUserListByNickname(String nickname) {
return success(MemberUserConvert.INSTANCE.convertList2(userService.getUserListByNickname(nickname)));
}
@Override
public MemberUserRespDTO getUserByMobile(String mobile) {
return MemberUserConvert.INSTANCE.convert2(userService.getUserByMobile(mobile));
public CommonResult<MemberUserRespDTO> getUserByMobile(String mobile) {
return success(MemberUserConvert.INSTANCE.convert2(userService.getUserByMobile(mobile)));
}
}

View File

@ -2,13 +2,13 @@ package cn.iocoder.yudao.module.member.controller.admin.point;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordRespVO;
import cn.iocoder.yudao.module.member.convert.point.MemberPointRecordConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
@ -35,7 +35,7 @@ public class MemberPointRecordController {
private MemberPointRecordService pointRecordService;
@Resource
private MemberUserApi memberUserApi;
private MemberUserService memberUserService;
@GetMapping("/page")
@Operation(summary = "获得用户积分记录分页")
@ -48,7 +48,7 @@ public class MemberPointRecordController {
}
// 拼接结果返回
List<MemberUserRespDTO> users = memberUserApi.getUserList(
List<MemberUserDO> users = memberUserService.getUserList(
convertSet(pageResult.getList(), MemberPointRecordDO::getUserId));
return success(MemberPointRecordConvert.INSTANCE.convertPage(pageResult, users));
}

View File

@ -2,13 +2,13 @@ package cn.iocoder.yudao.module.member.controller.admin.signin;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordRespVO;
import cn.iocoder.yudao.module.member.convert.signin.MemberSignInRecordConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.service.signin.MemberSignInRecordService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
@ -35,7 +35,7 @@ public class MemberSignInRecordController {
private MemberSignInRecordService signInRecordService;
@Resource
private MemberUserApi memberUserApi;
private MemberUserService memberUserService;
@GetMapping("/page")
@Operation(summary = "获得签到记录分页")
@ -48,7 +48,7 @@ public class MemberSignInRecordController {
}
// 拼接结果返回
List<MemberUserRespDTO> users = memberUserApi.getUserList(
List<MemberUserDO> users = memberUserService.getUserList(
convertSet(pageResult.getList(), MemberSignInRecordDO::getUserId));
return success(MemberSignInRecordConvert.INSTANCE.convertPage(pageResult, users));
}

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.member.convert.address;
import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO;
import cn.iocoder.yudao.module.member.controller.admin.address.vo.AddressRespVO;
import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressCreateReqVO;
import cn.iocoder.yudao.module.member.controller.app.address.vo.AppAddressRespVO;
@ -33,7 +33,7 @@ public interface AddressConvert {
List<AppAddressRespVO> convertList(List<MemberAddressDO> list);
AddressRespDTO convert02(MemberAddressDO bean);
MemberAddressRespDTO convert02(MemberAddressDO bean);
@Named("convertAreaIdToAreaName")
default String convertAreaIdToAreaName(Integer areaId) {

View File

@ -2,10 +2,10 @@ package cn.iocoder.yudao.module.member.convert.point;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordRespVO;
import cn.iocoder.yudao.module.member.controller.app.point.vo.AppMemberPointRecordRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@ -24,10 +24,10 @@ public interface MemberPointRecordConvert {
MemberPointRecordConvert INSTANCE = Mappers.getMapper(MemberPointRecordConvert.class);
default PageResult<MemberPointRecordRespVO> convertPage(PageResult<MemberPointRecordDO> pageResult, List<MemberUserRespDTO> users) {
default PageResult<MemberPointRecordRespVO> convertPage(PageResult<MemberPointRecordDO> pageResult, List<MemberUserDO> users) {
PageResult<MemberPointRecordRespVO> voPageResult = convertPage(pageResult);
// user 拼接
Map<Long, MemberUserRespDTO> userMap = convertMap(users, MemberUserRespDTO::getId);
Map<Long, MemberUserDO> userMap = convertMap(users, MemberUserDO::getId);
voPageResult.getList().forEach(record -> MapUtils.findAndThen(userMap, record.getUserId(),
memberUserRespDTO -> record.setNickname(memberUserRespDTO.getNickname())));
return voPageResult;

View File

@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordRespVO;
import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO;
import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@ -29,10 +29,10 @@ public interface MemberSignInRecordConvert {
MemberSignInRecordConvert INSTANCE = Mappers.getMapper(MemberSignInRecordConvert.class);
default PageResult<MemberSignInRecordRespVO> convertPage(PageResult<MemberSignInRecordDO> pageResult, List<MemberUserRespDTO> users) {
default PageResult<MemberSignInRecordRespVO> convertPage(PageResult<MemberSignInRecordDO> pageResult, List<MemberUserDO> users) {
PageResult<MemberSignInRecordRespVO> voPageResult = convertPage(pageResult);
// user 拼接
Map<Long, MemberUserRespDTO> userMap = convertMap(users, MemberUserRespDTO::getId);
Map<Long, MemberUserDO> userMap = convertMap(users, MemberUserDO::getId);
voPageResult.getList().forEach(record -> MapUtils.findAndThen(userMap, record.getUserId(),
memberUserRespDTO -> record.setNickname(memberUserRespDTO.getNickname())));
return voPageResult;

View File

@ -7,18 +7,18 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
import cn.iocoder.yudao.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO;
import cn.iocoder.yudao.module.member.convert.signin.MemberSignInRecordConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInConfigDO;
import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.signin.MemberSignInRecordMapper;
import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;
import cn.iocoder.yudao.module.member.service.level.MemberLevelService;
import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -53,7 +53,7 @@ public class MemberSignInRecordServiceImpl implements MemberSignInRecordService
private MemberLevelService memberLevelService;
@Resource
private MemberUserApi memberUserApi;
private MemberUserService memberUserService;
@Override
public AppMemberSignInRecordSummaryRespVO getSignInRecordSummary(Long userId) {
@ -124,12 +124,12 @@ public class MemberSignInRecordServiceImpl implements MemberSignInRecordService
// 根据用户昵称查询出用户ids
Set<Long> userIds = null;
if (StringUtils.isNotBlank(pageReqVO.getNickname())) {
List<MemberUserRespDTO> users = memberUserApi.getUserListByNickname(pageReqVO.getNickname());
List<MemberUserDO> users = memberUserService.getUserListByNickname(pageReqVO.getNickname());
// 如果查询用户结果为空直接返回无需继续查询
if (CollUtil.isEmpty(users)) {
return PageResult.empty();
}
userIds = convertSet(users, MemberUserRespDTO::getId);
userIds = convertSet(users, MemberUserDO::getId);
}
// 分页查询
return signInRecordMapper.selectPage(pageReqVO, userIds);