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