cloudroam
2024-09-03 6ffd8818ebf72ec80accb96634c994f7274dce5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
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(Member member) {
        if (StringUtils.isEmpty(member.getName())) {
            throw new ValidationException("会员等级名称不能为空");
        }
 
        if (StringUtils.isEmpty(member.getDiscountType())) {
            throw new ValidationException("会员折扣类型不能为空");
        }
        if (Constants.DISCOUNT_TYPE.amount.name().equals(member.getDiscountType()) && StringUtils.isEmpty(member.getDiscountAmount())) {
            throw new ValidationException("会员折扣固定金额不能为空");
        }
        if (Constants.DISCOUNT_TYPE.ratio.name().equals(member.getDiscountType()) && StringUtils.isEmpty(member.getDiscountRatio())) {
            throw new ValidationException("会员折扣百分比不能为空");
        }
        if (member.getStartPoint() > member.getEndPoint()) {
            throw new ValidationException("成长点开始不能大于结束");
        }
        if (!StringUtils.isEmpty(member.getDiscountRatio())) {
            int discountRatio1 = member.getDiscountRatio().compareTo(BigDecimal.ZERO);
            if (discountRatio1 == -1) {
                throw new ValidationException("会员折扣百分比不能小于0");
            }
            int discountRatio2 = member.getDiscountRatio().compareTo(new BigDecimal(100));
            if (discountRatio2 == 1) {
                throw new ValidationException("会员折扣百分比不能大于100");
            }
        }
        if (!StringUtils.isEmpty(member.getDiscountAmount())) {
            int discountAmount = member.getDiscountAmount().compareTo(BigDecimal.ZERO);
            if (discountAmount == -1) {
                throw new ValidationException("会员折扣固定金额不能小于0");
            }
        }
 
        //保存时判断是否有重复的名称
        Member memberByName = memberMapper.getMemberByName(member.getName());
        if (!ObjectUtils.isEmpty(memberByName)) {
            throw new ValidationException("会员等级名称重复");
        }
        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 (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");
            }
        }
        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("已存在会员等级名称,无法修改");
            }
        }
        //更新会员等级
        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;
    }
}