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