AdminRiderLevelServiceImpl.java
5.42 KB
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
package com.diligrp.rider.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.diligrp.rider.common.exception.BizException;
import com.diligrp.rider.dto.AdminRiderLevelSaveDTO;
import com.diligrp.rider.entity.Rider;
import com.diligrp.rider.entity.RiderLevel;
import com.diligrp.rider.mapper.RiderLevelMapper;
import com.diligrp.rider.mapper.RiderMapper;
import com.diligrp.rider.service.AdminRiderLevelService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
@Service
@RequiredArgsConstructor
public class AdminRiderLevelServiceImpl implements AdminRiderLevelService {
private final RiderLevelMapper riderLevelMapper;
private final RiderMapper riderMapper;
@Override
public List<RiderLevel> list(Long cityId) {
return riderLevelMapper.selectList(new LambdaQueryWrapper<RiderLevel>()
.eq(RiderLevel::getCityId, cityId)
.orderByAsc(RiderLevel::getLevelId)
.orderByDesc(RiderLevel::getIsDefault));
}
@Override
public void add(AdminRiderLevelSaveDTO dto, Long cityId) {
validateCity(cityId);
ensureLevelIdUnique(cityId, dto.getLevelId(), null);
RiderLevel level = new RiderLevel();
fillLevel(level, dto, cityId);
level.setIsDefault(hasDefault(cityId) ? 0 : 1);
riderLevelMapper.insert(level);
}
@Override
public void edit(AdminRiderLevelSaveDTO dto, Long cityId) {
validateCity(cityId);
RiderLevel existing = getOwnedLevel(dto.getId(), cityId);
ensureLevelIdUnique(cityId, dto.getLevelId(), existing.getId());
fillLevel(existing, dto, cityId);
riderLevelMapper.updateById(existing);
}
@Override
public void setDefault(Long id, Long cityId) {
validateCity(cityId);
RiderLevel existing = getOwnedLevel(id, cityId);
riderLevelMapper.update(null, new LambdaUpdateWrapper<RiderLevel>()
.eq(RiderLevel::getCityId, cityId)
.set(RiderLevel::getIsDefault, 0));
riderLevelMapper.update(null, new LambdaUpdateWrapper<RiderLevel>()
.eq(RiderLevel::getId, existing.getId())
.set(RiderLevel::getIsDefault, 1));
}
@Override
public void delete(Long id, Long cityId) {
validateCity(cityId);
RiderLevel existing = getOwnedLevel(id, cityId);
if (existing.getIsDefault() != null && existing.getIsDefault() == 1) {
throw new BizException("默认等级不能删除");
}
Long riderCount = riderMapper.selectCount(new LambdaQueryWrapper<Rider>()
.eq(Rider::getLevelId, existing.getId()));
if (riderCount != null && riderCount > 0) {
throw new BizException("该等级已有骑手使用,不能删除");
}
riderLevelMapper.deleteById(existing.getId());
}
private void fillLevel(RiderLevel level, AdminRiderLevelSaveDTO dto, Long cityId) {
level.setCityId(cityId);
level.setLevelId(dto.getLevelId());
level.setName(dto.getName());
level.setTransNums(dto.getTransNums());
level.setRunFeeMode(dto.getRunFeeMode());
level.setRunFixMoney(nvl(dto.getRunFixMoney()));
level.setRunRate(nvl(dto.getRunRate()));
level.setDistanceBasic(dto.getDistanceBasic() == null ? 0 : dto.getDistanceBasic());
level.setDistanceBasicMoney(nvl(dto.getDistanceBasicMoney()));
level.setDistanceMoreMoney(nvl(dto.getDistanceMoreMoney()));
level.setDistanceMaxMoney(nvl(dto.getDistanceMaxMoney()));
level.setWorkFeeMode(level.getWorkFeeMode() == null ? 1 : level.getWorkFeeMode());
level.setWorkFixMoney(level.getWorkFixMoney() == null ? BigDecimal.ZERO : level.getWorkFixMoney());
level.setWorkRate(level.getWorkRate() == null ? BigDecimal.ZERO : level.getWorkRate());
}
private RiderLevel getOwnedLevel(Long id, Long cityId) {
RiderLevel level = riderLevelMapper.selectById(id);
if (level == null) throw new BizException("等级不存在");
if (!cityId.equals(level.getCityId())) {
throw new BizException("等级不属于当前城市");
}
return level;
}
private void ensureLevelIdUnique(Long cityId, Integer levelId, Long excludeId) {
LambdaQueryWrapper<RiderLevel> wrapper = new LambdaQueryWrapper<RiderLevel>()
.eq(RiderLevel::getCityId, cityId)
.eq(RiderLevel::getLevelId, levelId);
if (excludeId != null) {
wrapper.ne(RiderLevel::getId, excludeId);
}
Long exists = riderLevelMapper.selectCount(wrapper);
if (exists != null && exists > 0) {
throw new BizException("同城市下等级编号不能重复");
}
}
private boolean hasDefault(Long cityId) {
Long count = riderLevelMapper.selectCount(new LambdaQueryWrapper<RiderLevel>()
.eq(RiderLevel::getCityId, cityId)
.eq(RiderLevel::getIsDefault, 1));
return count != null && count > 0;
}
private void validateCity(Long cityId) {
if (cityId == null || cityId < 1) {
throw new BizException("城市不能为空");
}
}
private BigDecimal nvl(BigDecimal value) {
return value == null ? BigDecimal.ZERO : value;
}
}