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