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