Skip to content

Commit 9f9227b

Browse files
authored
Merge pull request #1083 from xinnan-tech/manager-dict
update:字典前端增删改查
2 parents e1f54b3 + 76f47bc commit 9f9227b

28 files changed

+1653
-222
lines changed

main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,11 @@ public static String getOtaIdKey(String uuid) {
9696
public static String getOtaDownloadCountKey(String uuid) {
9797
return "ota:download:count:" + uuid;
9898
}
99+
100+
/**
101+
* 获取字典数据的缓存key
102+
*/
103+
public static String getDictDataByTypeKey(String dictType) {
104+
return "sys:dict:data:" + dictType;
105+
}
99106
}

main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@
2121
import xiaozhi.common.service.impl.BaseServiceImpl;
2222
import xiaozhi.common.utils.ConvertUtils;
2323
import xiaozhi.modules.agent.dao.AgentDao;
24-
import xiaozhi.modules.agent.dao.AgentTemplateDao;
2524
import xiaozhi.modules.agent.entity.AgentEntity;
26-
import xiaozhi.modules.agent.service.AgentTemplateService;
2725
import xiaozhi.modules.model.dao.ModelConfigDao;
2826
import xiaozhi.modules.model.dto.ModelBasicInfoDTO;
2927
import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
@@ -41,8 +39,6 @@ public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, Mode
4139
private final ModelConfigDao modelConfigDao;
4240
private final ModelProviderService modelProviderService;
4341
private final RedisUtils redisUtils;
44-
private final AgentTemplateDao agentTemplateDao;
45-
private final AgentTemplateService agentTemplateService;
4642
private final AgentDao agentDao;
4743

4844
@Override

main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictDataController.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package xiaozhi.modules.sys.controller;
22

3+
import java.util.List;
34
import java.util.Map;
45

56
import org.apache.commons.lang3.StringUtils;
67
import org.apache.shiro.authz.annotation.RequiresPermissions;
7-
import org.springframework.web.bind.annotation.DeleteMapping;
88
import org.springframework.web.bind.annotation.GetMapping;
99
import org.springframework.web.bind.annotation.PathVariable;
1010
import org.springframework.web.bind.annotation.PostMapping;
@@ -25,6 +25,7 @@
2525
import xiaozhi.common.validator.ValidatorUtils;
2626
import xiaozhi.modules.sys.dto.SysDictDataDTO;
2727
import xiaozhi.modules.sys.service.SysDictDataService;
28+
import xiaozhi.modules.sys.vo.SysDictDataItem;
2829
import xiaozhi.modules.sys.vo.SysDictDataVO;
2930

3031
/**
@@ -43,10 +44,10 @@ public class SysDictDataController {
4344
@GetMapping("/page")
4445
@Operation(summary = "分页查询字典数据")
4546
@RequiresPermissions("sys:role:superAdmin")
46-
@Parameters({@Parameter(name = "dictTypeId", description = "字典类型ID", required = true),
47-
@Parameter(name = "dictLabel", description = "数据标签"), @Parameter(name = "dictValue", description = "数据值"),
48-
@Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
49-
@Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true)})
47+
@Parameters({ @Parameter(name = "dictTypeId", description = "字典类型ID", required = true),
48+
@Parameter(name = "dictLabel", description = "数据标签"), @Parameter(name = "dictValue", description = "数据值"),
49+
@Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
50+
@Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) })
5051
public Result<PageData<SysDictDataVO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
5152
ValidatorUtils.validateEntity(params);
5253
// 强制校验dictTypeId是否存在
@@ -84,7 +85,7 @@ public Result<Void> update(@RequestBody SysDictDataDTO dto) {
8485
return new Result<>();
8586
}
8687

87-
@DeleteMapping("/delete")
88+
@PostMapping("/delete")
8889
@Operation(summary = "删除字典数据")
8990
@RequiresPermissions("sys:role:superAdmin")
9091
@Parameter(name = "ids", description = "ID数组", required = true)
@@ -93,4 +94,12 @@ public Result<Void> delete(@RequestBody Long[] ids) {
9394
return new Result<>();
9495
}
9596

97+
@GetMapping("/type/{dictType}")
98+
@Operation(summary = "获取字典数据列表")
99+
@RequiresPermissions("sys:role:superAdmin")
100+
public Result<List<SysDictDataItem>> getDictDataByType(@PathVariable("dictType") String dictType) {
101+
List<SysDictDataItem> list = sysDictDataService.getDictDataByType(dictType);
102+
return new Result<List<SysDictDataItem>>().ok(list);
103+
}
104+
96105
}

main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysDictTypeController.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.util.Map;
44

55
import org.apache.shiro.authz.annotation.RequiresPermissions;
6-
import org.springframework.web.bind.annotation.DeleteMapping;
76
import org.springframework.web.bind.annotation.GetMapping;
87
import org.springframework.web.bind.annotation.PathVariable;
98
import org.springframework.web.bind.annotation.PostMapping;
@@ -42,10 +41,10 @@ public class SysDictTypeController {
4241
@GetMapping("/page")
4342
@Operation(summary = "分页查询字典类型")
4443
@RequiresPermissions("sys:role:superAdmin")
45-
@Parameters({@Parameter(name = "dictType", description = "字典类型编码"),
46-
@Parameter(name = "dictName", description = "字典类型名称"),
47-
@Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
48-
@Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true)})
44+
@Parameters({ @Parameter(name = "dictType", description = "字典类型编码"),
45+
@Parameter(name = "dictName", description = "字典类型名称"),
46+
@Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
47+
@Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) })
4948
public Result<PageData<SysDictTypeVO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
5049
ValidatorUtils.validateEntity(params);
5150
PageData<SysDictTypeVO> page = sysDictTypeService.page(params);
@@ -82,7 +81,7 @@ public Result<Void> update(@RequestBody SysDictTypeDTO dto) {
8281
return new Result<>();
8382
}
8483

85-
@DeleteMapping("/delete")
84+
@PostMapping("/delete")
8685
@Operation(summary = "删除字典类型")
8786
@RequiresPermissions("sys:role:superAdmin")
8887
@Parameter(name = "ids", description = "ID数组", required = true)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
package xiaozhi.modules.sys.dao;
22

3+
import java.util.List;
4+
35
import org.apache.ibatis.annotations.Mapper;
46

57
import xiaozhi.common.dao.BaseDao;
68
import xiaozhi.modules.sys.entity.SysDictDataEntity;
9+
import xiaozhi.modules.sys.vo.SysDictDataItem;
710

811
/**
912
* 字典数据
1013
*/
1114
@Mapper
1215
public interface SysDictDataDao extends BaseDao<SysDictDataEntity> {
1316

17+
List<SysDictDataItem> getDictDataByType(String dictType);
18+
19+
/**
20+
* 根据字典类型ID获取字典类型编码
21+
*
22+
* @param dictTypeId 字典类型ID
23+
* @return 字典类型编码
24+
*/
25+
String getTypeByTypeId(Long dictTypeId);
1426
}

main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package xiaozhi.modules.sys.service;
22

3+
import java.util.List;
34
import java.util.Map;
45

56
import xiaozhi.common.page.PageData;
67
import xiaozhi.common.service.BaseService;
78
import xiaozhi.modules.sys.dto.SysDictDataDTO;
89
import xiaozhi.modules.sys.entity.SysDictDataEntity;
10+
import xiaozhi.modules.sys.vo.SysDictDataItem;
911
import xiaozhi.modules.sys.vo.SysDictDataVO;
1012

1113
/**
@@ -50,4 +52,19 @@ public interface SysDictDataService extends BaseService<SysDictDataEntity> {
5052
*/
5153
void delete(Long[] ids);
5254

55+
/**
56+
* 根据字典类型ID删除对应的字典数据
57+
*
58+
* @param dictTypeId 字典类型ID
59+
*/
60+
void deleteByTypeId(Long dictTypeId);
61+
62+
/**
63+
* 根据字典类型获取字典数据列表
64+
*
65+
* @param dictType 字典类型
66+
* @return 返回字典数据列表
67+
*/
68+
List<SysDictDataItem> getDictDataByType(String dictType);
69+
5370
}

main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package xiaozhi.modules.sys.service.impl;
22

3-
import java.util.Arrays;
43
import java.util.List;
54
import java.util.Map;
65
import java.util.Objects;
@@ -19,6 +18,8 @@
1918
import lombok.AllArgsConstructor;
2019
import xiaozhi.common.exception.RenException;
2120
import xiaozhi.common.page.PageData;
21+
import xiaozhi.common.redis.RedisKeys;
22+
import xiaozhi.common.redis.RedisUtils;
2223
import xiaozhi.common.service.impl.BaseServiceImpl;
2324
import xiaozhi.common.utils.ConvertUtils;
2425
import xiaozhi.modules.sys.dao.SysDictDataDao;
@@ -27,6 +28,7 @@
2728
import xiaozhi.modules.sys.entity.SysDictDataEntity;
2829
import xiaozhi.modules.sys.entity.SysUserEntity;
2930
import xiaozhi.modules.sys.service.SysDictDataService;
31+
import xiaozhi.modules.sys.vo.SysDictDataItem;
3032
import xiaozhi.modules.sys.vo.SysDictDataVO;
3133

3234
/**
@@ -35,8 +37,9 @@
3537
@Service
3638
@AllArgsConstructor
3739
public class SysDictDataServiceImpl extends BaseServiceImpl<SysDictDataDao, SysDictDataEntity>
38-
implements SysDictDataService {
40+
implements SysDictDataService {
3941
private final SysUserDao sysUserDao;
42+
private final RedisUtils redisUtils;
4043

4144
@Override
4245
public PageData<SysDictDataVO> page(Map<String, Object> params) {
@@ -50,9 +53,9 @@ public PageData<SysDictDataVO> page(Map<String, Object> params) {
5053
}
5154

5255
private QueryWrapper<SysDictDataEntity> getWrapper(Map<String, Object> params) {
53-
String dictTypeId = (String)params.get("dictTypeId");
54-
String dictLabel = (String)params.get("dictLabel");
55-
String dictValue = (String)params.get("dictValue");
56+
String dictTypeId = (String) params.get("dictTypeId");
57+
String dictLabel = (String) params.get("dictLabel");
58+
String dictValue = (String) params.get("dictValue");
5659

5760
QueryWrapper<SysDictDataEntity> wrapper = new QueryWrapper<>();
5861
wrapper.eq("dict_type_id", Long.parseLong(dictTypeId));
@@ -78,6 +81,9 @@ public void save(SysDictDataDTO dto) {
7881
SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class);
7982

8083
insert(entity);
84+
// 删除Redis缓存
85+
String dictType = baseDao.getTypeByTypeId(dto.getDictTypeId());
86+
redisUtils.delete(RedisKeys.getDictDataByTypeKey(dictType));
8187
}
8288

8389
@Override
@@ -89,13 +95,30 @@ public void update(SysDictDataDTO dto) {
8995
SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class);
9096

9197
updateById(entity);
98+
// 删除Redis缓存
99+
String dictType = baseDao.getTypeByTypeId(dto.getDictTypeId());
100+
redisUtils.delete(RedisKeys.getDictDataByTypeKey(dictType));
92101
}
93102

94103
@Override
95104
@Transactional(rollbackFor = Exception.class)
96105
public void delete(Long[] ids) {
97-
// 删除
98-
deleteBatchIds(Arrays.asList(ids));
106+
for (Long id : ids) {
107+
SysDictDataEntity entity = baseDao.selectById(id);
108+
// 删除Redis缓存
109+
String dictType = baseDao.getTypeByTypeId(entity.getDictTypeId());
110+
redisUtils.delete(RedisKeys.getDictDataByTypeKey(dictType));
111+
// 删除
112+
deleteById(id);
113+
}
114+
}
115+
116+
@Override
117+
@Transactional(rollbackFor = Exception.class)
118+
public void deleteByTypeId(Long dictTypeId) {
119+
LambdaQueryWrapper<SysDictDataEntity> wrapper = new LambdaQueryWrapper<>();
120+
wrapper.eq(SysDictDataEntity::getDictTypeId, dictTypeId);
121+
baseDao.delete(wrapper);
99122
}
100123

101124
/**
@@ -106,14 +129,14 @@ public void delete(Long[] ids) {
106129
private void setUserName(List<SysDictDataVO> sysDictDataList) {
107130
// 收集所有用户 ID
108131
Set<Long> userIds = sysDictDataList.stream().flatMap(vo -> Stream.of(vo.getCreator(), vo.getUpdater()))
109-
.filter(Objects::nonNull).collect(Collectors.toSet());
132+
.filter(Objects::nonNull).collect(Collectors.toSet());
110133

111134
// 设置更新者和创建者名称
112135
if (!userIds.isEmpty()) {
113136
List<SysUserEntity> sysUserEntities = sysUserDao.selectBatchIds(userIds);
114137
// 把List转成Map,Map<Long, String>
115138
Map<Long, String> userNameMap = sysUserEntities.stream().collect(Collectors.toMap(SysUserEntity::getId,
116-
SysUserEntity::getUsername, (existing, replacement) -> existing));
139+
SysUserEntity::getUsername, (existing, replacement) -> existing));
117140

118141
sysDictDataList.forEach(vo -> {
119142
vo.setCreatorName(userNameMap.get(vo.getCreator()));
@@ -133,4 +156,28 @@ private void checkDictValueUnique(Long dictTypeId, String dictValue, String excl
133156
throw new RenException("字典标签重复");
134157
}
135158
}
159+
160+
@Override
161+
public List<SysDictDataItem> getDictDataByType(String dictType) {
162+
if (StringUtils.isBlank(dictType)) {
163+
return null;
164+
}
165+
166+
// 先从Redis获取缓存
167+
String key = RedisKeys.getDictDataByTypeKey(dictType);
168+
List<SysDictDataItem> cachedData = (List<SysDictDataItem>) redisUtils.get(key);
169+
if (cachedData != null) {
170+
return cachedData;
171+
}
172+
173+
// 如果缓存中没有,则从数据库获取
174+
List<SysDictDataItem> data = baseDao.getDictDataByType(dictType);
175+
176+
// 存入Redis缓存
177+
if (data != null) {
178+
redisUtils.set(key, data);
179+
}
180+
181+
return data;
182+
}
136183
}

main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import xiaozhi.modules.sys.dto.SysDictTypeDTO;
2727
import xiaozhi.modules.sys.entity.SysDictTypeEntity;
2828
import xiaozhi.modules.sys.entity.SysUserEntity;
29+
import xiaozhi.modules.sys.service.SysDictDataService;
2930
import xiaozhi.modules.sys.service.SysDictTypeService;
3031
import xiaozhi.modules.sys.vo.SysDictTypeVO;
3132

@@ -35,9 +36,9 @@
3536
@Service
3637
@AllArgsConstructor
3738
public class SysDictTypeServiceImpl extends BaseServiceImpl<SysDictTypeDao, SysDictTypeEntity>
38-
implements SysDictTypeService {
39-
39+
implements SysDictTypeService {
4040
private final SysUserDao sysUserDao;
41+
private final SysDictDataService sysDictDataService;
4142

4243
@Override
4344
public PageData<SysDictTypeVO> page(Map<String, Object> params) {
@@ -51,8 +52,8 @@ public PageData<SysDictTypeVO> page(Map<String, Object> params) {
5152
}
5253

5354
private QueryWrapper<SysDictTypeEntity> getWrapper(Map<String, Object> params) {
54-
String dictType = (String)params.get("dictType");
55-
String dictName = (String)params.get("dictName");
55+
String dictType = (String) params.get("dictType");
56+
String dictName = (String) params.get("dictName");
5657

5758
QueryWrapper<SysDictTypeEntity> wrapper = new QueryWrapper<>();
5859
wrapper.like(StringUtils.isNotBlank(dictType), "dict_type", dictType);
@@ -96,7 +97,11 @@ public void update(SysDictTypeDTO dto) {
9697
@Override
9798
@Transactional(rollbackFor = Exception.class)
9899
public void delete(Long[] ids) {
99-
// 删除
100+
// 先删除对应的字典数据
101+
for (Long id : ids) {
102+
sysDictDataService.deleteByTypeId(id);
103+
}
104+
// 再删除字典类型
100105
deleteBatchIds(Arrays.asList(ids));
101106
}
102107

@@ -118,14 +123,14 @@ public List<SysDictTypeVO> list(Map<String, Object> params) {
118123
private void setUserName(List<SysDictTypeVO> sysDictTypeList) {
119124
// 收集所有用户 ID
120125
Set<Long> userIds = sysDictTypeList.stream().flatMap(vo -> Stream.of(vo.getCreator(), vo.getUpdater()))
121-
.filter(Objects::nonNull).collect(Collectors.toSet());
126+
.filter(Objects::nonNull).collect(Collectors.toSet());
122127

123128
// 设置更新者和创建者名称
124129
if (!userIds.isEmpty()) {
125130
List<SysUserEntity> sysUserEntities = sysUserDao.selectBatchIds(userIds);
126131
// 把List转成Map,Map<Long, String>
127132
Map<Long, String> userNameMap = sysUserEntities.stream().collect(Collectors.toMap(SysUserEntity::getId,
128-
SysUserEntity::getUsername, (existing, replacement) -> existing));
133+
SysUserEntity::getUsername, (existing, replacement) -> existing));
129134

130135
sysDictTypeList.forEach(vo -> {
131136
vo.setCreatorName(userNameMap.get(vo.getCreator()));

main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ public PageData<AdminPageUserVO> page(AdminPageUserDTO dto) {
169169
String deviceCount = deviceService.selectCountByUserId(user.getId()).toString();
170170
adminPageUserVO.setDeviceCount(deviceCount);
171171
adminPageUserVO.setStatus(user.getStatus());
172+
adminPageUserVO.setCreateDate(user.getCreateDate());
172173
return adminPageUserVO;
173174
}).toList();
174175
return new PageData<>(list, page.getTotal());

0 commit comments

Comments
 (0)