Merge remote-tracking branch 'origin/feature/mall_product' into member_dev

# Conflicts:
#	sql/mysql/member_level.sql
#	yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceLogService.java
#	yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogService.java
#	yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogServiceImpl.java
This commit is contained in:
owen
2023-08-23 10:17:24 +08:00
46 changed files with 647 additions and 290 deletions

View File

@ -35,7 +35,7 @@ public class MemberLevelBaseVO {
@Schema(description = "享受折扣", requiredMode = Schema.RequiredMode.REQUIRED, example = "98")
@NotNull(message = "享受折扣不能为空")
@Range(min = 0, max = 100, message = "享受折扣的范围为 0-100")
private Integer discount;
private Integer discountPercent;
@Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg")
@URL(message = "等级图标必须是 URL 格式")

View File

@ -26,7 +26,7 @@ public class MemberLevelRecordBaseVO {
@Schema(description = "享受折扣", requiredMode = Schema.RequiredMode.REQUIRED, example = "13319")
@NotNull(message = "享受折扣不能为空")
private Integer discount;
private Integer discountPercent;
@Schema(description = "升级经验", requiredMode = Schema.RequiredMode.REQUIRED, example = "13319")
@NotNull(message = "升级经验不能为空")

View File

@ -15,6 +15,9 @@ public class MemberPointRecordPageReqVO extends PageParam {
@Schema(description = "用户昵称", example = "张三")
private String nickname;
@Schema(description = "用户编号", example = "123")
private Long userId;
@Schema(description = "业务类型", example = "1")
private Integer bizType;

View File

@ -23,6 +23,9 @@ public class MemberSignInRecordPageReqVO extends PageParam {
@Schema(description = "第几天签到", example = "10")
private Integer day;
@Schema(description = "用户编号", example = "123")
private Long userId;
@Schema(description = "签到时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;

View File

@ -29,9 +29,11 @@ public class MemberUserRespVO extends MemberUserBaseVO {
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
// ========== 其它信息 ==========
@Schema(description = "积分", example = "100")
private Integer point;
@Schema(description = "会员标签", example = "[红色, 快乐]")
private List<String> tagNames;

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.member.dal.dataobject.level;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
@ -29,6 +30,8 @@ public class MemberExperienceRecordDO extends BaseDO {
private Long id;
/**
* 用户编号
*
* 关联 {@link MemberUserDO#getId()} 字段
*/
private Long userId;
/**
@ -45,6 +48,10 @@ public class MemberExperienceRecordDO extends BaseDO {
* 标题
*/
private String title;
/**
* 描述
*/
private String description;
/**
* 经验
*/
@ -53,9 +60,5 @@ public class MemberExperienceRecordDO extends BaseDO {
* 变更后的经验
*/
private Integer totalExperience;
/**
* 描述
*/
private String description;
}

View File

@ -33,18 +33,19 @@ public class MemberLevelDO extends BaseDO {
* 等级名称
*/
private String name;
/**
* 升级经验
*/
private Integer experience;
/**
* 等级
*/
private Integer level;
/**
* 升级经验
*/
private Integer experience;
/**
* 享受折扣
*/
private Integer discount;
private Integer discountPercent;
/**
* 等级图标
*/

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.member.dal.dataobject.level;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -30,20 +31,26 @@ public class MemberLevelRecordDO extends BaseDO {
private Long id;
/**
* 用户编号
*
* 关联 {@link MemberUserDO#getId()} 字段
*/
private Long userId;
/**
* 等级编号
*
* 关联 {@link MemberLevelDO#getId()} 字段
*/
private Long levelId;
/**
* 会员等级
*
* 冗余 {@link MemberLevelDO#getLevel()} 字段
*/
private Integer level;
/**
* 享受折扣
*/
private Integer discount;
private Integer discountPercent;
/**
* 升级经验
*/

View File

@ -21,6 +21,7 @@ public interface MemberPointRecordMapper extends BaseMapperX<MemberPointRecordDO
default PageResult<MemberPointRecordDO> selectPage(MemberPointRecordPageReqVO reqVO, Set<Long> userIds) {
return selectPage(reqVO, new LambdaQueryWrapperX<MemberPointRecordDO>()
.inIfPresent(MemberPointRecordDO::getUserId, userIds)
.eqIfPresent(MemberPointRecordDO::getUserId, reqVO.getUserId())
.eqIfPresent(MemberPointRecordDO::getBizType, reqVO.getBizType())
.likeIfPresent(MemberPointRecordDO::getTitle, reqVO.getTitle())
.orderByDesc(MemberPointRecordDO::getId));

View File

@ -21,6 +21,7 @@ public interface MemberSignInRecordMapper extends BaseMapperX<MemberSignInRecord
default PageResult<MemberSignInRecordDO> selectPage(MemberSignInRecordPageReqVO reqVO, Set<Long> userIds) {
return selectPage(reqVO, new LambdaQueryWrapperX<MemberSignInRecordDO>()
.inIfPresent(MemberSignInRecordDO::getUserId, userIds)
.eqIfPresent(MemberSignInRecordDO::getUserId, reqVO.getUserId())
.eqIfPresent(MemberSignInRecordDO::getDay, reqVO.getDay())
.betweenIfPresent(MemberSignInRecordDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(MemberSignInRecordDO::getId));

View File

@ -5,7 +5,6 @@ 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.app.signin.vo.record.AppMemberSignInRecordRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.signin.MemberSignInRecordDO;
import cn.iocoder.yudao.module.member.dal.mysql.signin.MemberSignInRecordMapper;
import org.apache.commons.lang3.StringUtils;

View File

@ -49,7 +49,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
public void testCreateLevel_success() {
// 准备参数
MemberLevelCreateReqVO reqVO = randomPojo(MemberLevelCreateReqVO.class, o -> {
o.setDiscount(randomInt());
o.setDiscountPercent(randomInt());
o.setIcon(randomURL());
o.setBackgroundUrl(randomURL());
});
@ -76,7 +76,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
o.setLevel(dbLevel.getLevel());
o.setExperience(dbLevel.getExperience());
//以下是要修改的字段
o.setDiscount(randomInt());
o.setDiscountPercent(randomInt());
o.setIcon(randomURL());
o.setBackgroundUrl(randomURL());
});
@ -255,7 +255,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
private static MemberLevelDO randomLevelDO(Consumer<MemberLevelDO>... consumers) {
Consumer<MemberLevelDO> consumer = (o) -> {
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
o.setDiscount(randomInt(0, 100));
o.setDiscountPercent(randomInt(0, 100));
o.setIcon(randomURL());
o.setBackgroundUrl(randomURL());
};