package com.mzl.flower.service.menber.impl;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.constant.Constants;
|
import com.mzl.flower.dto.request.menber.MemberDTO;
|
import com.mzl.flower.dto.request.menber.MemberQueryDTO;
|
import com.mzl.flower.dto.response.member.MemberVO;
|
import com.mzl.flower.entity.menber.Member;
|
import com.mzl.flower.mapper.customer.CustomerMapper;
|
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.transaction.annotation.Transactional;
|
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.StringUtils;
|
|
import java.math.BigDecimal;
|
import java.util.List;
|
|
/**
|
* @author fanghaowei
|
* @version version2.0
|
* @className MemberServiceImpl
|
* @date 2024/8/26
|
* @description 会员管理功能逻辑层
|
*/
|
@Service
|
@Transactional
|
@RequiredArgsConstructor
|
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
|
|
private final MemberMapper memberMapper;
|
|
private final CustomerMapper customerMapper;
|
|
@Override
|
public void saveMember(MemberDTO memberDTO) {
|
//是否已经存在endpoint已经有最大值了,有的话需要删除或者修改
|
if (memberDTO.getEndPoint() == null) {
|
// Member pointByIntegerMaxValue = memberMapper.getEndPointByIntegerMaxValue(Integer.MAX_VALUE);
|
// if (!ObjectUtils.isEmpty(pointByIntegerMaxValue)) {
|
// throw new ValidationException("系统中已经有一条最大值或者空值记录,请删除或者修改再保存");
|
// } else {
|
memberDTO.setEndPoint(Integer.MAX_VALUE);
|
// }
|
}
|
if (StringUtils.isEmpty(memberDTO.getName())) {
|
throw new ValidationException("会员等级名称不能为空");
|
}
|
|
if (StringUtils.isEmpty(memberDTO.getDiscountType())) {
|
throw new ValidationException("会员折扣类型不能为空");
|
}
|
if (Constants.DISCOUNT_TYPE.amount.name().equals(memberDTO.getDiscountType()) && StringUtils.isEmpty(memberDTO.getDiscountAmount())) {
|
throw new ValidationException("会员折扣固定金额不能为空");
|
}
|
if (Constants.DISCOUNT_TYPE.ratio.name().equals(memberDTO.getDiscountType()) && StringUtils.isEmpty(memberDTO.getDiscountRatio())) {
|
throw new ValidationException("会员折扣百分比不能为空");
|
}
|
|
if (memberDTO.getStartPoint() > memberDTO.getEndPoint()) {
|
throw new ValidationException("成长点开始不能大于结束点");
|
}
|
if (!StringUtils.isEmpty(memberDTO.getDiscountRatio())) {
|
int discountRatio1 = memberDTO.getDiscountRatio().compareTo(BigDecimal.ZERO);
|
if (discountRatio1 == -1) {
|
throw new ValidationException("会员折扣百分比不能小于0");
|
}
|
int discountRatio2 = memberDTO.getDiscountRatio().compareTo(new BigDecimal(100));
|
if (discountRatio2 == 1) {
|
throw new ValidationException("会员折扣百分比不能大于100");
|
}
|
}
|
//区间交集判断
|
//查询所有等级
|
List<Member> allMember = memberMapper.getAllMember();
|
allMember.forEach(a -> {
|
if (a.getStartPoint() < memberDTO.getEndPoint() && a.getEndPoint() > memberDTO.getStartPoint()) {
|
throw new ValidationException("存在交集,不允许保存");
|
}
|
});
|
if (!StringUtils.isEmpty(memberDTO.getDiscountAmount())) {
|
int discountAmount = memberDTO.getDiscountAmount().compareTo(BigDecimal.ZERO);
|
if (discountAmount == -1) {
|
throw new ValidationException("会员折扣固定金额不能小于0");
|
}
|
}
|
|
//保存时判断是否有重复的名称
|
Member memberByName = memberMapper.getMemberByName(memberDTO.getName());
|
if (!ObjectUtils.isEmpty(memberByName)) {
|
throw new ValidationException("会员等级名称重复");
|
}
|
Member member = new Member();
|
BeanUtils.copyProperties(memberDTO, member);
|
member.create(SecurityUtils.getUserId());
|
memberMapper.insert(member);
|
//更新会员等级
|
customerMapper.updateMemberLevelByPoint(member.getId(), member.getStartPoint(), member.getEndPoint());
|
|
}
|
|
@Override
|
public void updateMember(MemberDTO memberDTO) {
|
Member memberInfo = memberMapper.selectById(memberDTO.getId());
|
if (memberInfo == null) {
|
throw new ValidationException("会员等级信息不存在");
|
}
|
if (StringUtils.isEmpty(memberDTO.getDiscountType())) {
|
throw new ValidationException("会员折扣类型不能为空");
|
}
|
if (Constants.DISCOUNT_TYPE.amount.name().equals(memberDTO.getDiscountType()) && StringUtils.isEmpty(memberDTO.getDiscountAmount())) {
|
throw new ValidationException("会员折扣固定金额不能为空");
|
}
|
if (Constants.DISCOUNT_TYPE.ratio.name().equals(memberDTO.getDiscountType()) && StringUtils.isEmpty(memberDTO.getDiscountRatio())) {
|
throw new ValidationException("会员折扣百分比不能为空");
|
}
|
if (!StringUtils.isEmpty(memberDTO.getDiscountRatio())) {
|
int discountRatio1 = memberDTO.getDiscountRatio().compareTo(BigDecimal.ZERO);
|
if (discountRatio1 == -1) {
|
throw new ValidationException("会员折扣百分比不能小于0");
|
}
|
int discountRatio2 = memberDTO.getDiscountRatio().compareTo(new BigDecimal(100));
|
if (discountRatio2 == 1) {
|
throw new ValidationException("会员折扣百分比不能大于100");
|
}
|
}
|
if (!StringUtils.isEmpty(memberDTO.getDiscountAmount())) {
|
int discountAmount = memberDTO.getDiscountAmount().compareTo(BigDecimal.ZERO);
|
if (discountAmount == -1) {
|
throw new ValidationException("会员折扣固定金额不能小于0");
|
}
|
}
|
Member memberTemp = memberMapper.getMemberByName(memberDTO.getName());
|
//判断如果按照会员等级查询到得名称和当前得Id不一致,不能修改。
|
if (!ObjectUtils.isEmpty(memberTemp)) {
|
if (memberTemp.getId() != memberDTO.getId()) {
|
throw new ValidationException("已存在会员等级名称,无法修改");
|
}
|
}
|
//是否已经存在endpoint已经有最大值了,有的话需要删除或者修改
|
// if (memberDTO.getEndPoint() == null && memberInfo.getEndPoint() != Integer.MAX_VALUE) {
|
// Member pointByIntegerMaxValue = memberMapper.getEndPointByIntegerMaxValue(Integer.MAX_VALUE);
|
// if (!ObjectUtils.isEmpty(pointByIntegerMaxValue)) {
|
// throw new ValidationException("系统中已经有一条最大值或者空值记录,请删除或者修改再保存");
|
// } else {
|
// memberDTO.setEndPoint(Integer.MAX_VALUE);
|
// }
|
// } else if (memberDTO.getEndPoint() == null && memberInfo.getEndPoint() == Integer.MAX_VALUE) {
|
// memberDTO.setEndPoint(Integer.MAX_VALUE);
|
// }
|
|
if (memberDTO.getEndPoint() == null) {
|
if (memberInfo.getEndPoint() != Integer.MAX_VALUE) {
|
Member pointByIntegerMaxValue = memberMapper.getEndPointByIntegerMaxValue(Integer.MAX_VALUE);
|
if (!ObjectUtils.isEmpty(pointByIntegerMaxValue)) {
|
throw new ValidationException("系统中已经有一条最大值或者空值记录,请删除或者修改再保存");
|
} else {
|
memberDTO.setEndPoint(Integer.MAX_VALUE);
|
}
|
} else {
|
memberDTO.setEndPoint(Integer.MAX_VALUE);
|
}
|
}
|
|
if (memberDTO.getStartPoint() > memberDTO.getEndPoint()) {
|
throw new ValidationException("成长点开始不能大于结束");
|
}
|
//区间交集判断
|
//查询所有等级
|
List<Member> allMember = memberMapper.getOtherAllMember(memberDTO.getId());
|
allMember.forEach(a -> {
|
if (a.getStartPoint() < memberDTO.getEndPoint() && a.getEndPoint() > memberDTO.getStartPoint()) {
|
throw new ValidationException("存在交集,不允许修改");
|
}
|
});
|
|
//更新会员等级
|
if (memberInfo.getStartPoint() != memberDTO.getStartPoint() || memberInfo.getEndPoint() != memberDTO.getEndPoint()) {
|
customerMapper.updateMemberLevelByPoint(memberInfo.getId(), memberInfo.getStartPoint(), memberInfo.getEndPoint());
|
}
|
|
BeanUtils.copyProperties(memberDTO,memberInfo);
|
memberInfo.update(SecurityUtils.getUserId());
|
memberMapper.updateById(memberInfo);
|
|
}
|
|
@Override
|
public void deleteMember(String id) {
|
if(id.equals(Constants.DEFAULT_MEMBER_ID)){
|
throw new ValidationException("默认普通会员只能编辑,不能删除");
|
}
|
Member member = memberMapper.selectById(id);
|
if (member == null) {
|
throw new ValidationException("会员等级信息不存在");
|
}
|
Integer levelId = customerMapper.getByLevelId(id);
|
if (levelId > 0) {
|
throw new ValidationException("当前会员等级用户已使用,无法删除");
|
}
|
memberMapper.deleteById(id);
|
}
|
|
@Override
|
public Page<MemberVO> queryPage(MemberQueryDTO memberQueryDTO, Page page) {
|
List<MemberVO> list = memberMapper.queryPage(memberQueryDTO, page);
|
page.setRecords(list);
|
return page;
|
}
|
}
|