mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	| @@ -1,13 +1,11 @@ | ||||
| package cn.iocoder.yudao.module.member.api.level; | ||||
|  | ||||
| import cn.hutool.core.util.EnumUtil; | ||||
| import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.member.service.level.MemberLevelService; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Objects; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.EXPERIENCE_BIZ_NOT_SUPPORT; | ||||
| @@ -26,9 +24,7 @@ public class MemberLevelApiImpl implements MemberLevelApi { | ||||
|  | ||||
|     @Override | ||||
|     public void addExperience(Long userId, Integer experience, Integer bizType, String bizId) { | ||||
|         // TODO @疯狂:可以在 MemberExperienceBizTypeEnum 增加一个方法,获得哈。 | ||||
|         MemberExperienceBizTypeEnum bizTypeEnum = EnumUtil.getBy(MemberExperienceBizTypeEnum.class, | ||||
|                 e -> Objects.equals(bizType, e.getType())); | ||||
|         MemberExperienceBizTypeEnum bizTypeEnum = MemberExperienceBizTypeEnum.getByType(bizType); | ||||
|         if (bizTypeEnum == null) { | ||||
|             throw exception(EXPERIENCE_BIZ_NOT_SUPPORT); | ||||
|         } | ||||
|   | ||||
| @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.member.api.user; | ||||
| 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; | ||||
| import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; | ||||
| import cn.iocoder.yudao.module.member.service.user.MemberUserService; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| @@ -11,6 +13,9 @@ import javax.annotation.Resource; | ||||
| 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.POINT_RECORD_BIZ_NOT_SUPPORT; | ||||
|  | ||||
| /** | ||||
|  * 会员用户的 API 实现类 | ||||
|  * | ||||
| @@ -23,6 +28,9 @@ public class MemberUserApiImpl implements MemberUserApi { | ||||
|     @Resource | ||||
|     private MemberUserService userService; | ||||
|  | ||||
|     @Resource | ||||
|     private MemberPointRecordService memberPointRecordService; | ||||
|  | ||||
|     @Override | ||||
|     public MemberUserRespDTO getUser(Long id) { | ||||
|         MemberUserDO user = userService.getUser(id); | ||||
| @@ -44,4 +52,13 @@ public class MemberUserApiImpl implements MemberUserApi { | ||||
|         return MemberUserConvert.INSTANCE.convert2(userService.getUserByMobile(mobile)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void addPoint(Long userId, Integer point, Integer bizType, String bizId) { | ||||
|         MemberPointBizTypeEnum bizTypeEnum = MemberPointBizTypeEnum.getByType(bizType); | ||||
|         if (bizTypeEnum == null) { | ||||
|             throw exception(POINT_RECORD_BIZ_NOT_SUPPORT); | ||||
|         } | ||||
|         memberPointRecordService.createPointRecord(userId, point, bizTypeEnum, bizId); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdat | ||||
| import cn.iocoder.yudao.module.member.convert.group.MemberGroupConvert; | ||||
| import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; | ||||
| import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; | ||||
| import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; | ||||
| import cn.iocoder.yudao.module.member.service.user.MemberUserService; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| @@ -33,7 +33,7 @@ public class MemberGroupServiceImpl implements MemberGroupService { | ||||
|     @Resource | ||||
|     private MemberGroupMapper groupMapper; | ||||
|     @Resource | ||||
|     private MemberUserMapper memberUserMapper; | ||||
|     private MemberUserService memberUserService; | ||||
|  | ||||
|     @Override | ||||
|     public Long createGroup(MemberGroupCreateReqVO createReqVO) { | ||||
| @@ -69,9 +69,8 @@ public class MemberGroupServiceImpl implements MemberGroupService { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // TODO @疯狂:不要直接调用 memberUserMapper,需要对方 service 提供方法 | ||||
|     void validateGroupHasUser(Long id) { | ||||
|         Long count = memberUserMapper.selectCountByGroupId(id); | ||||
|         Long count = memberUserService.getUserCountByGroupId(id); | ||||
|         if (count > 0) { | ||||
|             throw exception(GROUP_HAS_USER); | ||||
|         } | ||||
|   | ||||
| @@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; | ||||
| import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelRecordDO; | ||||
| import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; | ||||
| import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper; | ||||
| import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; | ||||
| import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.member.service.user.MemberUserService; | ||||
| import com.google.common.annotations.VisibleForTesting; | ||||
| @@ -49,8 +48,6 @@ public class MemberLevelServiceImpl implements MemberLevelService { | ||||
|     @Resource | ||||
|     private MemberExperienceRecordService memberExperienceRecordService; | ||||
|     @Resource | ||||
|     private MemberUserMapper memberUserMapper; | ||||
|     @Resource | ||||
|     private MemberUserService memberUserService; | ||||
|  | ||||
|     @Override | ||||
| @@ -157,7 +154,7 @@ public class MemberLevelServiceImpl implements MemberLevelService { | ||||
|     // TODO 有 Service 提供接口哈,不直接调用对方的 memberUserMapper | ||||
|     @VisibleForTesting | ||||
|     void validateLevelHasUser(Long id) { | ||||
|         Long count = memberUserMapper.selectCountByLevelId(id); | ||||
|         Long count = memberUserService.getUserCountByLevelId(id); | ||||
|         if (count > 0) { | ||||
|             throw exception(LEVEL_HAS_USER); | ||||
|         } | ||||
| @@ -238,8 +235,11 @@ public class MemberLevelServiceImpl implements MemberLevelService { | ||||
|         if (experience == 0) { | ||||
|             return; | ||||
|         } | ||||
|         if (bizType.isReduce() && experience > 0) { | ||||
|             experience = -experience; | ||||
|         } | ||||
|  | ||||
|         MemberUserDO user = memberUserMapper.selectById(userId); | ||||
|         MemberUserDO user = memberUserService.getUser(userId); | ||||
|  | ||||
|         int userExperience = NumberUtil.max(user.getExperience() + experience, 0); | ||||
|         MemberLevelRecordDO levelRecord = new MemberLevelRecordDO() | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.member.controller.admin.point.vo.recrod.MemberPointRecordPageReqVO; | ||||
| import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointRecordDO; | ||||
| import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; | ||||
|  | ||||
| /** | ||||
|  * 用户积分记录 Service 接口 | ||||
| @@ -29,4 +30,13 @@ public interface MemberPointRecordService { | ||||
|      */ | ||||
|     PageResult<MemberPointRecordDO> getPointRecordPage(Long userId, PageParam pageVO); | ||||
|  | ||||
|     /** | ||||
|      * 创建用户积分记录 | ||||
|      * | ||||
|      * @param userId  用户ID | ||||
|      * @param point   变动积分 | ||||
|      * @param bizType 业务类型 | ||||
|      * @param bizId   业务编号 | ||||
|      */ | ||||
|     void createPointRecord(Long userId, Integer point, MemberPointBizTypeEnum bizType, String bizId); | ||||
| } | ||||
|   | ||||
| @@ -1,12 +1,20 @@ | ||||
| package cn.iocoder.yudao.module.member.service.point; | ||||
|  | ||||
| import cn.hutool.core.util.NumberUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| 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.dal.dataobject.point.MemberPointConfigDO; | ||||
| 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.dal.mysql.point.MemberPointRecordMapper; | ||||
| import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.member.service.user.MemberUserService; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.util.CollectionUtils; | ||||
| @@ -24,15 +32,20 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. | ||||
|  * | ||||
|  * @author QingX | ||||
|  */ | ||||
| @Slf4j | ||||
| @Service | ||||
| @Validated | ||||
| public class MemberPointRecordServiceImpl implements MemberPointRecordService { | ||||
|  | ||||
|     @Resource | ||||
|     private MemberPointRecordMapper recordMapper; | ||||
|     @Resource | ||||
|     private MemberPointConfigService memberPointConfigService; | ||||
|  | ||||
|     @Resource | ||||
|     private MemberUserApi memberUserApi; | ||||
|     @Resource | ||||
|     private MemberUserService memberUserService; | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<MemberPointRecordDO> getPointRecordPage(MemberPointRecordPageReqVO pageReqVO) { | ||||
| @@ -55,4 +68,38 @@ public class MemberPointRecordServiceImpl implements MemberPointRecordService { | ||||
|         return recordMapper.selectPage(userId, pageVO); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void createPointRecord(Long userId, Integer point, MemberPointBizTypeEnum bizType, String bizId) { | ||||
|         MemberPointConfigDO pointConfig = memberPointConfigService.getPointConfig(); | ||||
|         if (pointConfig == null || pointConfig.getTradeGivePoint() == null) { | ||||
|             log.warn("增加积分失败:积分配置”1 元赠送多少分“未设置, userId={}, point={}, bizType={}, bizId={}", | ||||
|                     userId, point, bizType.getType(), bizId); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // 根据配置的比例,换算实际的积分 | ||||
|         point = point * pointConfig.getTradeGivePoint(); | ||||
|         if (bizType.isReduce() && point > 0) { | ||||
|             point = -point; | ||||
|         } | ||||
|  | ||||
|         MemberUserDO user = memberUserService.getUser(userId); | ||||
|         Integer userPoint = ObjectUtil.defaultIfNull(user.getPoint(), 0); | ||||
|         // 用户变动后的积分,防止扣出负数 | ||||
|         Integer totalPoint = NumberUtil.max(userPoint + point, 0); | ||||
|         // 增加积分记录 | ||||
|         MemberPointRecordDO recordDO = new MemberPointRecordDO() | ||||
|                 .setUserId(userId) | ||||
|                 .setBizId(bizId) | ||||
|                 .setBizType(bizType.getType()) | ||||
|                 .setTitle(bizType.getName()) | ||||
|                 .setDescription(StrUtil.format(bizType.getDescription(), point)) | ||||
|                 .setPoint(point) | ||||
|                 .setTotalPoint(totalPoint); | ||||
|         recordMapper.insert(recordDO); | ||||
|  | ||||
|         // 更新用户积分 | ||||
|         memberUserService.updateUserPoint(userId, totalPoint); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.member.controller.admin.tag.vo.MemberTagUpdateReq | ||||
| import cn.iocoder.yudao.module.member.convert.tag.MemberTagConvert; | ||||
| import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; | ||||
| import cn.iocoder.yudao.module.member.dal.mysql.tag.MemberTagMapper; | ||||
| import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; | ||||
| import cn.iocoder.yudao.module.member.service.user.MemberUserService; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| @@ -33,7 +33,7 @@ public class MemberTagServiceImpl implements MemberTagService { | ||||
|     @Resource | ||||
|     private MemberTagMapper tagMapper; | ||||
|     @Resource | ||||
|     private MemberUserMapper memberUserMapper; | ||||
|     private MemberUserService memberUserService; | ||||
|  | ||||
|     @Override | ||||
|     public Long createTag(MemberTagCreateReqVO createReqVO) { | ||||
| @@ -92,7 +92,7 @@ public class MemberTagServiceImpl implements MemberTagService { | ||||
|     } | ||||
|  | ||||
|     void validateTagHasUser(Long id) { | ||||
|         Long count = memberUserMapper.selectCountByTagId(id); | ||||
|         Long count = memberUserService.getUserCountByTagId(id); | ||||
|         if (count > 0) { | ||||
|             throw exception(TAG_HAS_USER); | ||||
|         } | ||||
|   | ||||
| @@ -5,9 +5,9 @@ import cn.iocoder.yudao.framework.common.validation.Mobile; | ||||
| import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; | ||||
| import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; | ||||
| import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; | ||||
| import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO; | ||||
| import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO; | ||||
| import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
| @@ -41,7 +41,7 @@ public interface MemberUserService { | ||||
|      * 基于手机号创建用户。 | ||||
|      * 如果用户已经存在,则直接进行返回 | ||||
|      * | ||||
|      * @param mobile 手机号 | ||||
|      * @param mobile     手机号 | ||||
|      * @param registerIp 注册 IP | ||||
|      * @return 用户对象 | ||||
|      */ | ||||
| @@ -50,7 +50,7 @@ public interface MemberUserService { | ||||
|     /** | ||||
|      * 更新用户的最后登陆信息 | ||||
|      * | ||||
|      * @param id 用户编号 | ||||
|      * @param id      用户编号 | ||||
|      * @param loginIp 登陆 IP | ||||
|      */ | ||||
|     void updateUserLogin(Long id, String loginIp); | ||||
| @@ -75,7 +75,7 @@ public interface MemberUserService { | ||||
|      * 【会员】修改基本信息 | ||||
|      * | ||||
|      * @param userId 用户编号 | ||||
|      * @param reqVO 基本信息 | ||||
|      * @param reqVO  基本信息 | ||||
|      */ | ||||
|     void updateUser(Long userId, AppMemberUserUpdateReqVO reqVO); | ||||
|  | ||||
| @@ -83,7 +83,7 @@ public interface MemberUserService { | ||||
|      * 【会员】修改手机 | ||||
|      * | ||||
|      * @param userId 用户编号 | ||||
|      * @param reqVO 请求信息 | ||||
|      * @param reqVO  请求信息 | ||||
|      */ | ||||
|     void updateUserMobile(Long userId, AppMemberUserUpdateMobileReqVO reqVO); | ||||
|  | ||||
| @@ -91,7 +91,7 @@ public interface MemberUserService { | ||||
|      * 【会员】修改密码 | ||||
|      * | ||||
|      * @param userId 用户编号 | ||||
|      * @param reqVO 请求信息 | ||||
|      * @param reqVO  请求信息 | ||||
|      */ | ||||
|     void updateUserPassword(Long userId, AppMemberUserUpdatePasswordReqVO reqVO); | ||||
|  | ||||
| @@ -105,7 +105,7 @@ public interface MemberUserService { | ||||
|     /** | ||||
|      * 判断密码是否匹配 | ||||
|      * | ||||
|      * @param rawPassword 未加密的密码 | ||||
|      * @param rawPassword     未加密的密码 | ||||
|      * @param encodedPassword 加密后的密码 | ||||
|      * @return 是否匹配 | ||||
|      */ | ||||
| @@ -135,4 +135,35 @@ public interface MemberUserService { | ||||
|      */ | ||||
|     void updateUserLevel(Long id, Long levelId, Integer experience); | ||||
|  | ||||
|     /** | ||||
|      * 获得指定用户分组下的用户数量 | ||||
|      * | ||||
|      * @param groupId 用户分组编号 | ||||
|      * @return 用户数量 | ||||
|      */ | ||||
|     Long getUserCountByGroupId(Long groupId); | ||||
|  | ||||
|     /** | ||||
|      * 获得指定用户等级下的用户数量 | ||||
|      * | ||||
|      * @param levelId 用户等级编号 | ||||
|      * @return 用户数量 | ||||
|      */ | ||||
|     Long getUserCountByLevelId(Long levelId); | ||||
|  | ||||
|     /** | ||||
|      * 获得指定会员标签下的用户数量 | ||||
|      * | ||||
|      * @param tagId 用户标签编号 | ||||
|      * @return 用户数量 | ||||
|      */ | ||||
|     Long getUserCountByTagId(Long tagId); | ||||
|  | ||||
|     /** | ||||
|      * 更新用户的积分 | ||||
|      * | ||||
|      * @param userId 用户ID | ||||
|      * @param point  积分数量 | ||||
|      */ | ||||
|     void updateUserPoint(Long userId, Integer point); | ||||
| } | ||||
|   | ||||
| @@ -239,4 +239,24 @@ public class MemberUserServiceImpl implements MemberUserService { | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long getUserCountByGroupId(Long groupId) { | ||||
|         return memberUserMapper.selectCountByGroupId(groupId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long getUserCountByLevelId(Long levelId) { | ||||
|         return memberUserMapper.selectCountByLevelId(levelId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long getUserCountByTagId(Long tagId) { | ||||
|         return memberUserMapper.selectCountByTagId(tagId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void updateUserPoint(Long userId, Integer point) { | ||||
|         memberUserMapper.updateById(new MemberUserDO().setId(userId).setPoint(point)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 芋道源码
					芋道源码