From 0eace7110d0c6875807ccebb281a52962ae6d6fb Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期一, 26 八月 2024 13:46:11 +0800
Subject: [PATCH] add:会员管理

---
 src/main/java/com/mzl/flower/entity/menber/Member.java                  |   47 +++++++++
 src/main/java/com/mzl/flower/web/member/MemberController.java           |   70 ++++++++++++++
 src/main/resources/mapper/member/MemberMapper.xml                       |    5 +
 src/main/java/com/mzl/flower/mapper/member/MemberMapper.java            |   25 +++++
 src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java |   73 ++++++++++++++
 src/main/java/com/mzl/flower/dto/request/menber/MemberQueryDTO.java     |   10 ++
 src/main/java/com/mzl/flower/vo/member/MemberVO.java                    |    4 
 src/main/java/com/mzl/flower/service/menber/MemberService.java          |   15 +++
 src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java          |   39 +++++++
 9 files changed, 288 insertions(+), 0 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
new file mode 100644
index 0000000..4f5fc92
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java
@@ -0,0 +1,39 @@
+package com.mzl.flower.dto.request.menber;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class MemberDTO {
+    @ApiModelProperty(value = "会员等级id")
+    private Long id;
+
+    @ApiModelProperty("会员等级名称")
+    private String levelName;
+
+    @ApiModelProperty("该等级所需的最低成长值")
+    private int minGrowthValue;
+
+    @ApiModelProperty("该等级所需的最高成长值")
+    private int maxGrowthValue;
+
+    @ApiModelProperty("会员折扣类型(百分比、固定金额)")
+    private int discountType;
+
+    @ApiModelProperty("会员折扣百分比")
+    private BigDecimal discountRatio;
+
+    @ApiModelProperty("会员折扣固定金额")
+    private BigDecimal discountAmount;
+
+    @ApiModelProperty("消费金额(元)")
+    private int consumptionAmount;
+
+    @ApiModelProperty("已消费产生的成长值")
+    private int upGrowthValue;
+
+    @ApiModelProperty("未消费产生的下降值")
+    private int downGrowthValue;
+}
diff --git a/src/main/java/com/mzl/flower/dto/request/menber/MemberQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/menber/MemberQueryDTO.java
new file mode 100644
index 0000000..b6f24b3
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/menber/MemberQueryDTO.java
@@ -0,0 +1,10 @@
+package com.mzl.flower.dto.request.menber;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MemberQueryDTO {
+    @ApiModelProperty(value = "会员等级")
+    private String levelName;
+}
diff --git a/src/main/java/com/mzl/flower/entity/menber/Member.java b/src/main/java/com/mzl/flower/entity/menber/Member.java
new file mode 100644
index 0000000..04edbf2
--- /dev/null
+++ b/src/main/java/com/mzl/flower/entity/menber/Member.java
@@ -0,0 +1,47 @@
+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.BigDecimal;
+
+/**
+ * @author fanghaowei
+ * @version version2.0
+ * @className Member
+ * @date 2024/8/26
+ * @description 会员管理功能实体类
+ */
+@Data
+@TableName("t_member")
+public class Member extends BaseAutoEntity {
+
+    @ApiModelProperty("会员等级名称")
+    private String levelName;
+
+    @ApiModelProperty("该等级所需的最低成长值")
+    private int minGrowthValue;
+
+    @ApiModelProperty("该等级所需的最高成长值")
+    private int maxGrowthValue;
+
+    @ApiModelProperty("会员折扣类型(百分比、固定金额)")
+    private int discountType;
+
+    @ApiModelProperty("会员折扣百分比")
+    private BigDecimal discountRatio;
+
+    @ApiModelProperty("会员折扣固定金额")
+    private BigDecimal discountAmount;
+
+    @ApiModelProperty("消费金额(元)")
+    private int consumptionAmount;
+
+    @ApiModelProperty("已消费产生的成长值")
+    private int upGrowthValue;
+
+    @ApiModelProperty("未消费产生的下降值")
+    private int downGrowthValue;
+}
diff --git a/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java b/src/main/java/com/mzl/flower/mapper/member/MemberMapper.java
new file mode 100644
index 0000000..82051de
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/member/MemberMapper.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 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/26
+ * @description 会员管理功能mapper
+ */
+@SuppressWarnings("ALL")
+@Repository
+public interface MemberMapper extends BaseMapper<Member> {
+
+    @SuppressWarnings("AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc")
+    @Select("select * from t_member where level_name = #{levelName} and deleted = '0' limit 1")
+    Member getMemberByName(@Param("levelName") String levelName);
+
+}
diff --git a/src/main/java/com/mzl/flower/service/menber/MemberService.java b/src/main/java/com/mzl/flower/service/menber/MemberService.java
new file mode 100644
index 0000000..31c6659
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/MemberService.java
@@ -0,0 +1,15 @@
+package com.mzl.flower.service.menber;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mzl.flower.dto.request.menber.MemberDTO;
+import com.mzl.flower.entity.menber.Member;
+
+
+public interface MemberService extends IService<Member> {
+
+    void saveMember(Member member);
+
+    void updateMember(MemberDTO memberDTO);
+    void deleteMember(String id);
+}
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java b/src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java
new file mode 100644
index 0000000..8cb47bf
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java
@@ -0,0 +1,73 @@
+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.MemberDTO;
+import com.mzl.flower.entity.menber.Member;
+import com.mzl.flower.mapper.member.MemberMapper;
+import com.mzl.flower.service.menber.MemberService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * @author fanghaowei
+ * @version version2.0
+ * @className MemberServiceImpl
+ * @date 2024/8/26
+ * @description 会员管理功能逻辑层
+ */
+@Service
+@RequiredArgsConstructor
+public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
+
+    private final MemberMapper memberMapper;
+
+    @Override
+    public void saveMember(Member member) {
+        if (StringUtils.isEmpty(member.getLevelName())) {
+            throw new ValidationException("会员等级名称不能为空");
+        }
+        //保存时判断是否有重复的名称
+        Member memberByName = memberMapper.getMemberByName(member.getLevelName());
+        if (!ObjectUtils.isEmpty(memberByName)) {
+            throw new ValidationException("会员等级名称重复");
+        }
+        memberMapper.insert(member);
+    }
+
+    @Override
+    public void updateMember(MemberDTO memberDTO) {
+        Member memberInfo = memberMapper.selectById(memberDTO.getId());
+        if (memberInfo == null) {
+            throw new ValidationException("会员等级信息不存在");
+        }
+        if (!memberInfo.getCreateBy().equals(SecurityUtils.getUserId())) {
+            throw new ValidationException("无权限修改");
+        }
+        Member memberTemp = memberMapper.getMemberByName(memberDTO.getLevelName());
+        //判断如果按照会员等级查询到得名称和当前得Id不一致,不能修改。
+        if (!ObjectUtils.isEmpty(memberTemp)) {
+            if (memberTemp.getLevelName().equals(memberDTO.getLevelName())) {
+                throw new ValidationException("已存在会员等级名称,无法修改");
+            }
+        }
+        BeanUtils.copyProperties(memberDTO,memberInfo);
+        memberInfo.update(SecurityUtils.getUserId());
+        memberMapper.updateById(memberInfo);
+    }
+
+    @Override
+    public void deleteMember(String id) {
+        Member member = memberMapper.selectById(id);
+        if (member == null) {
+            throw new ValidationException("会员等级信息不存在");
+        }
+
+        // TODO: 2024/8/26 如果当前会员绑定了优惠券,不能删除,等优惠券逻辑完成。 
+        memberMapper.deleteById(id);
+    }
+}
diff --git a/src/main/java/com/mzl/flower/vo/member/MemberVO.java b/src/main/java/com/mzl/flower/vo/member/MemberVO.java
new file mode 100644
index 0000000..4108c79
--- /dev/null
+++ b/src/main/java/com/mzl/flower/vo/member/MemberVO.java
@@ -0,0 +1,4 @@
+package com.mzl.flower.vo.member;
+
+public class MemberVO {
+}
diff --git a/src/main/java/com/mzl/flower/web/member/MemberController.java b/src/main/java/com/mzl/flower/web/member/MemberController.java
new file mode 100644
index 0000000..108b798
--- /dev/null
+++ b/src/main/java/com/mzl/flower/web/member/MemberController.java
@@ -0,0 +1,70 @@
+package com.mzl.flower.web.member;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.base.BaseController;
+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.entity.menber.Member;
+import com.mzl.flower.service.menber.MemberService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import static com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotNull;
+
+/**
+ * @author fanghaowei
+ * @version version2.0
+ * @className MemberController
+ * @date 2024/8/26
+ * @description 会员管理功能开发
+ */
+@Api(value = "会员管理", tags = "会员管理")
+@RestController
+@RequestMapping("/api")
+@RequiredArgsConstructor
+public class MemberController extends BaseController {
+
+    private final MemberService memberService;
+
+    @PostMapping("/member/list")
+    @ApiOperation(value = "会员列表", httpMethod = "POST")
+    public ResponseEntity<ReturnDataDTO> getMemberList(Page page, MemberQueryDTO dto) {
+        QueryWrapper<Member> queryWrapper = new QueryWrapper();
+        queryWrapper.lambda().eq(isNotNull(dto.getLevelName()), Member::getLevelName, dto.getLevelName());
+        page = (Page) memberService.page(page, queryWrapper);
+        return returnData(R.SUCCESS.getCode(), page);
+    }
+
+    @DeleteMapping(value = "/member/delete/{id}")
+    @ApiOperation(value = "删除会员 ", httpMethod = "DELETE", notes = "ID")
+    public ResponseEntity delete(@PathVariable("id") Long id) {
+        memberService.deleteMember(String.valueOf(id));
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @PostMapping(value = "/member/save")
+    @ApiOperation(value = "保存会员", httpMethod = "POST")
+    public ResponseEntity insert(@RequestBody MemberDTO memberDTO) {
+        Member member = new Member();
+        BeanUtils.copyProperties(memberDTO, member);
+        member.create(SecurityUtils.getUserId());
+        memberService.saveMember(member);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @PutMapping(value = "/member/update")
+    @ApiOperation(value = "更新会员", httpMethod = "PUT")
+    public ResponseEntity update(@RequestBody MemberDTO memberDTO) {
+        memberService.updateMember(memberDTO);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+}
+
diff --git a/src/main/resources/mapper/member/MemberMapper.xml b/src/main/resources/mapper/member/MemberMapper.xml
new file mode 100644
index 0000000..e7600ca
--- /dev/null
+++ b/src/main/resources/mapper/member/MemberMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.mzl.flower.mapper.member.MemberMapper">
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3