From d845b016623f7f6314aab739b485fe5d3400bb22 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期二, 27 八月 2024 16:28:26 +0800 Subject: [PATCH] add:会员成长记录;个人会员信息查看 --- src/main/java/com/mzl/flower/dto/request/menber/TargetMemberDTO.java | 23 +++ src/main/java/com/mzl/flower/entity/menber/Member.java | 3 src/main/java/com/mzl/flower/web/member/MemberController.java | 52 ++++++++ src/main/java/com/mzl/flower/entity/menber/MemberGrowthRecord.java | 42 +++++++ src/main/java/com/mzl/flower/mapper/member/MemberMapper.java | 9 + src/main/java/com/mzl/flower/dto/request/menber/MemberRecordQueryDTO.java | 18 +++ src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java | 25 ++++ src/main/java/com/mzl/flower/dto/request/menber/MemberGrowthRecordDTO.java | 34 +++++ src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java | 90 +++++++++++++++ src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java | 3 src/main/java/com/mzl/flower/dto/request/menber/UserGrowthRecordDTO.java | 18 +++ src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java | 16 ++ 12 files changed, 331 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java b/src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java index 08bf50e..9f377eb 100644 --- a/src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java +++ b/src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java @@ -36,4 +36,7 @@ @ApiModelProperty("未消费产生的下降值") private int downgradeValue; + + @ApiModelProperty("成长值规则") + private String growthRule; } diff --git a/src/main/java/com/mzl/flower/dto/request/menber/MemberGrowthRecordDTO.java b/src/main/java/com/mzl/flower/dto/request/menber/MemberGrowthRecordDTO.java new file mode 100644 index 0000000..e5ac834 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/menber/MemberGrowthRecordDTO.java @@ -0,0 +1,34 @@ +package com.mzl.flower.dto.request.menber; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigInteger; +import java.util.Date; + +@Data +public class MemberGrowthRecordDTO { + @ApiModelProperty(value = "会员成长记录表ID") + private Long id; + + @ApiModelProperty("记录日期") + private Date recordDate; + + @ApiModelProperty("成长值") + private int growth; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("商户ID") + private BigInteger customerId; + + @ApiModelProperty("成长值来源(growth_source:签到、消费)") + private String source; + + @ApiModelProperty("新增、扣除(growth_type)") + private String type; + + @ApiModelProperty("备注") + private String remarks; +} diff --git a/src/main/java/com/mzl/flower/dto/request/menber/MemberRecordQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/menber/MemberRecordQueryDTO.java new file mode 100644 index 0000000..29306ce --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/menber/MemberRecordQueryDTO.java @@ -0,0 +1,18 @@ +package com.mzl.flower.dto.request.menber; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class MemberRecordQueryDTO { + @ApiModelProperty(value = "新增、扣除(growth_type)") + private String type; + @ApiModelProperty(value = "成长值来源(growth_source:签到、消费)") + private String source; + @ApiModelProperty(value = "记录开始日期") + private Date startRecordDate; + @ApiModelProperty(value = "记录结束日期") + private Date endRecordDate; +} diff --git a/src/main/java/com/mzl/flower/dto/request/menber/TargetMemberDTO.java b/src/main/java/com/mzl/flower/dto/request/menber/TargetMemberDTO.java new file mode 100644 index 0000000..820d107 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/menber/TargetMemberDTO.java @@ -0,0 +1,23 @@ +package com.mzl.flower.dto.request.menber; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + + +@Data +public class TargetMemberDTO { + @ApiModelProperty(value = "目标会员等级") + private String targetMemberLevel; + + @ApiModelProperty("目标会员等级要求成长值") + private int targetStartPoint; + + @ApiModelProperty("达到目标所需成长值") + private int targetGap; + + @ApiModelProperty("目标会员等级优惠金额") + private BigDecimal targetDiscountAmount; + +} diff --git a/src/main/java/com/mzl/flower/dto/request/menber/UserGrowthRecordDTO.java b/src/main/java/com/mzl/flower/dto/request/menber/UserGrowthRecordDTO.java new file mode 100644 index 0000000..53b7acf --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/menber/UserGrowthRecordDTO.java @@ -0,0 +1,18 @@ +package com.mzl.flower.dto.request.menber; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class UserGrowthRecordDTO { + @ApiModelProperty(value = "当前会员等级") + private String currentMemberLevel; + + @ApiModelProperty("当前成长值") + private int currentGrowthValue; + + List<TargetMemberDTO> targetMemberInfos; + +} diff --git a/src/main/java/com/mzl/flower/entity/menber/Member.java b/src/main/java/com/mzl/flower/entity/menber/Member.java index 66b602c..b79250e 100644 --- a/src/main/java/com/mzl/flower/entity/menber/Member.java +++ b/src/main/java/com/mzl/flower/entity/menber/Member.java @@ -44,4 +44,7 @@ @ApiModelProperty("未消费产生的下降值") private int downgradeValue; + + @ApiModelProperty("成长值规则") + private String growthRule; } diff --git a/src/main/java/com/mzl/flower/entity/menber/MemberGrowthRecord.java b/src/main/java/com/mzl/flower/entity/menber/MemberGrowthRecord.java new file mode 100644 index 0000000..c73f69f --- /dev/null +++ b/src/main/java/com/mzl/flower/entity/menber/MemberGrowthRecord.java @@ -0,0 +1,42 @@ +package com.mzl.flower.entity.menber; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.mzl.flower.base.BaseAutoEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigInteger; +import java.util.Date; + +/** + * @author fanghaowei + * @version version2.0 + * @className Member + * @date 2024/8/27 + * @description 会员成长记录表ID + */ +@Data +@TableName("t_member_growth_record") +public class MemberGrowthRecord extends BaseAutoEntity { + + @ApiModelProperty("记录日期") + private Date recordDate; + + @ApiModelProperty("成长值") + private int growth; + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("商户ID") + private BigInteger customerId; + + @ApiModelProperty("成长值来源(growth_source:签到、消费)") + private String source; + + @ApiModelProperty("新增、扣除(growth_type)") + private String type; + + @ApiModelProperty("备注") + private String remarks; +} diff --git a/src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java b/src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java new file mode 100644 index 0000000..ae9a99a --- /dev/null +++ b/src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java @@ -0,0 +1,25 @@ +package com.mzl.flower.mapper.member; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mzl.flower.entity.menber.Member; +import com.mzl.flower.entity.menber.MemberGrowthRecord; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.stereotype.Repository; + + +/** + * @author fanghaowei + * @version version2.0 + * @className MemberMapper + * @date 2024/8/27 + * @description 会员成记录mapper + */ +@SuppressWarnings("ALL") +@Repository +public interface MemberGrowthRecordMapper extends BaseMapper<MemberGrowthRecord> { + + @Select("SELECT CASE WHEN SUM(growth) < 0 THEN 0 ELSE SUM(growth) END as total_growth from t_member_growth_record WHERE user_id = #{userId} and deleted = '0'") + Integer getSumGrowthByUsertId(@Param("userId") String userId); + +} diff --git a/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java b/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java index 3493ede..81f25a7 100644 --- a/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java +++ b/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java @@ -6,6 +6,8 @@ import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; +import java.util.List; + /** * @author fanghaowei @@ -21,4 +23,11 @@ @Select("select * from t_member where name = #{name} and deleted = '0' limit 1") Member getMemberByName(@Param("name") String name); + @Select("select * from t_member where start_point <= #{growthValue} and end_point > #{growthValue} and deleted = '0' limit 1") + Member getMemberByGrowthValue(@Param("growthValue") Integer growthValue); + + //获取成长值大于当前值的会员 + @Select("select * from t_member where start_point > #{growthValue} and deleted = '0' ") + List<Member> getgtMembersByGrowthValue(@Param("growthValue") Integer growthValue); + } diff --git a/src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java b/src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java new file mode 100644 index 0000000..6752071 --- /dev/null +++ b/src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java @@ -0,0 +1,16 @@ +package com.mzl.flower.service.menber; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.mzl.flower.dto.request.menber.MemberGrowthRecordDTO; +import com.mzl.flower.dto.request.menber.UserGrowthRecordDTO; +import com.mzl.flower.entity.menber.MemberGrowthRecord; + + +public interface MemberGrowthRecordService extends IService<MemberGrowthRecord> { + + void saveMemberGrowthRecord(MemberGrowthRecord memberGrowthRecord); + void updateMemberGrowthRecord(MemberGrowthRecordDTO memberGrowthRecordDTO); + void deleteMemberGrowthRecord(String id); + UserGrowthRecordDTO getInfoByUserId(String userId); +} diff --git a/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java new file mode 100644 index 0000000..8351ecb --- /dev/null +++ b/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java @@ -0,0 +1,90 @@ +package com.mzl.flower.service.menber.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mzl.flower.config.exception.ValidationException; +import com.mzl.flower.config.security.SecurityUtils; +import com.mzl.flower.dto.request.menber.MemberGrowthRecordDTO; +import com.mzl.flower.dto.request.menber.TargetMemberDTO; +import com.mzl.flower.dto.request.menber.UserGrowthRecordDTO; +import com.mzl.flower.entity.menber.Member; +import com.mzl.flower.entity.menber.MemberGrowthRecord; +import com.mzl.flower.mapper.member.MemberGrowthRecordMapper; +import com.mzl.flower.mapper.member.MemberMapper; +import com.mzl.flower.service.menber.MemberGrowthRecordService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author fanghaowei + * @version version2.0 + * @className MemberGrowthRecordServiceImpl + * @date 2024/8/26 + * @description 会员记录功能逻辑层 + */ +@Service +@RequiredArgsConstructor +public class MemberGrowthRecordServiceImpl extends ServiceImpl<MemberGrowthRecordMapper, MemberGrowthRecord> implements MemberGrowthRecordService { + + private final MemberGrowthRecordMapper memberGrowthRecordMapper; + + private final MemberMapper memberMapper; + + @Override + public void saveMemberGrowthRecord(MemberGrowthRecord memberGrowthRecord) { + memberGrowthRecord.setRecordDate(new Date()); + memberGrowthRecordMapper.insert(memberGrowthRecord); + } + + @Override + public void updateMemberGrowthRecord(MemberGrowthRecordDTO memberGrowthRecordDTO) { + MemberGrowthRecord memberGrowthRecord = memberGrowthRecordMapper.selectById(memberGrowthRecordDTO.getId()); + if (memberGrowthRecord == null) { + throw new ValidationException("成长记录信息不存在"); + } + BeanUtils.copyProperties(memberGrowthRecordDTO, memberGrowthRecord); + memberGrowthRecord.update(SecurityUtils.getUserId()); + memberGrowthRecordMapper.updateById(memberGrowthRecord); + } + + @Override + public void deleteMemberGrowthRecord(String id) { + MemberGrowthRecord memberGrowthRecord = memberGrowthRecordMapper.selectById(id); + if (memberGrowthRecord == null) { + throw new ValidationException("成长记录信息不存在"); + } + memberGrowthRecordMapper.deleteById(id); + } + + @Override + public UserGrowthRecordDTO getInfoByUserId(String userId) { + UserGrowthRecordDTO userGrowthRecordDTO = new UserGrowthRecordDTO(); + List<TargetMemberDTO> targetMemberDTOList = new ArrayList<>(); + //查询当前人员的成长值 最少是0 + Integer sumGrowth = memberGrowthRecordMapper.getSumGrowthByUsertId(userId); + userGrowthRecordDTO.setCurrentGrowthValue(sumGrowth); + //查询当前会员等级 + Member member = memberMapper.getMemberByGrowthValue(sumGrowth); + userGrowthRecordDTO.setCurrentMemberLevel(member.getName()); + //查询比当前等级高的会员等级信息 + List<Member> memberList = memberMapper.getgtMembersByGrowthValue(sumGrowth); + if (!CollectionUtils.isEmpty(memberList)) { + memberList.forEach(m -> { + TargetMemberDTO targetMemberDTO = new TargetMemberDTO(); + targetMemberDTO.setTargetMemberLevel(m.getName()); + targetMemberDTO.setTargetStartPoint(m.getStartPoint()); + targetMemberDTO.setTargetGap(m.getStartPoint() - sumGrowth); + targetMemberDTO.setTargetDiscountAmount(m.getDiscountAmount()); + targetMemberDTOList.add(targetMemberDTO); + }); + } + userGrowthRecordDTO.setTargetMemberInfos(targetMemberDTOList); + + return userGrowthRecordDTO; + } +} diff --git a/src/main/java/com/mzl/flower/web/member/MemberController.java b/src/main/java/com/mzl/flower/web/member/MemberController.java index 7ff6050..5f14fb0 100644 --- a/src/main/java/com/mzl/flower/web/member/MemberController.java +++ b/src/main/java/com/mzl/flower/web/member/MemberController.java @@ -6,9 +6,10 @@ import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; import com.mzl.flower.config.security.SecurityUtils; -import com.mzl.flower.dto.request.menber.MemberDTO; -import com.mzl.flower.dto.request.menber.MemberQueryDTO; +import com.mzl.flower.dto.request.menber.*; import com.mzl.flower.entity.menber.Member; +import com.mzl.flower.entity.menber.MemberGrowthRecord; +import com.mzl.flower.service.menber.MemberGrowthRecordService; import com.mzl.flower.service.menber.MemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -33,6 +34,8 @@ public class MemberController extends BaseController { private final MemberService memberService; + + private final MemberGrowthRecordService memberGrowthRecordService; @PostMapping("/member/list") @ApiOperation(value = "会员列表", httpMethod = "POST") @@ -66,5 +69,50 @@ memberService.updateMember(memberDTO); return returnData(R.SUCCESS.getCode(), null); } + + + + @PostMapping("/memberGrowthRecord/list") + @ApiOperation(value = "会员记录列表", httpMethod = "POST") + public ResponseEntity<ReturnDataDTO> getMemberRecordList(Page page, MemberRecordQueryDTO dto) { + QueryWrapper<MemberGrowthRecord> queryWrapper = new QueryWrapper(); + queryWrapper.lambda().eq(isNotNull(dto.getType()), MemberGrowthRecord::getType, dto.getType()) + .eq(isNotNull(dto.getSource()), MemberGrowthRecord::getSource, dto.getSource()) + .ge(isNotNull(dto.getStartRecordDate()), MemberGrowthRecord::getRecordDate, dto.getStartRecordDate()) + .le(isNotNull(dto.getEndRecordDate()), MemberGrowthRecord::getRecordDate, dto.getEndRecordDate()); + page = (Page) memberGrowthRecordService.page(page, queryWrapper); + return returnData(R.SUCCESS.getCode(), page); + } + + @DeleteMapping(value = "/memberGrowthRecord/delete/{id}") + @ApiOperation(value = "删除会员记录 ", httpMethod = "DELETE", notes = "ID") + public ResponseEntity deleteGrowthRecord(@PathVariable("id") Long id) { + memberGrowthRecordService.deleteMemberGrowthRecord(String.valueOf(id)); + return returnData(R.SUCCESS.getCode(), null); + } + + @PostMapping(value = "/memberGrowthRecord/save") + @ApiOperation(value = "保存会员记录", httpMethod = "POST") + public ResponseEntity insertGrowthRecord(@RequestBody MemberGrowthRecordDTO memberGrowthRecordDTO) { + MemberGrowthRecord memberGrowthRecord = new MemberGrowthRecord(); + BeanUtils.copyProperties(memberGrowthRecordDTO, memberGrowthRecord); + memberGrowthRecord.create(SecurityUtils.getUserId()); + memberGrowthRecordService.saveMemberGrowthRecord(memberGrowthRecord); + return returnData(R.SUCCESS.getCode(), null); + } + + @PutMapping(value = "/memberGrowthRecord/update") + @ApiOperation(value = "更新会员记录", httpMethod = "PUT") + public ResponseEntity updateGrowthRecord(@RequestBody MemberGrowthRecordDTO memberGrowthRecordDTO) { + memberGrowthRecordService.updateMemberGrowthRecord(memberGrowthRecordDTO); + return returnData(R.SUCCESS.getCode(), null); + } + + @GetMapping(value = "/member/info/{userId}") + @ApiOperation(value = "当前用户会员信息 ", httpMethod = "GET", notes = "ID") + public ResponseEntity memberInfo(@PathVariable("userId") Long userId) { + UserGrowthRecordDTO userGrowthRecordDTO = memberGrowthRecordService.getInfoByUserId(String.valueOf(userId)); + return returnData(R.SUCCESS.getCode(), userGrowthRecordDTO); + } } -- Gitblit v1.9.3