🎨 字典查询修改为支持批量查询,减少前后端通讯

This commit is contained in:
b2baccline
2020-07-31 16:34:28 +08:00
parent 2bd971cec7
commit 7464b31443
5 changed files with 48 additions and 35 deletions

View File

@@ -37,12 +37,12 @@ public class SysDictController {
/**
* 通过字典标识查找对应字典项
* @param dictCode 字典标识
* @param dictCodes 字典标识列表
* @return 同类型字典
*/
@GetMapping("/data-hash/{dictCode}")
public R<DictDataAndHashVO> getDictDataAndHash(@PathVariable String dictCode) {
return R.ok(sysDictManager.queryDictDataAndHashVO(dictCode));
@GetMapping("/data-hash")
public R<List<DictDataAndHashVO>> getDictDataAndHash(@RequestParam("dictCodes") String[] dictCodes) {
return R.ok(sysDictManager.queryDictDataAndHashVO(dictCodes));
}
/**
@@ -77,7 +77,7 @@ public class SysDictController {
@CreateOperationLogging(msg = "新增字典表")
@PostMapping
@PreAuthorize("@per.hasPermission('sys:dict:add')")
public R save(@RequestBody SysDict sysDict) {
public R<?> save(@RequestBody SysDict sysDict) {
return sysDictManager.dictSave(sysDict) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "新增字典表失败");
}
@@ -90,7 +90,7 @@ public class SysDictController {
@UpdateOperationLogging(msg = "修改字典表")
@PutMapping
@PreAuthorize("@per.hasPermission('sys:dict:edit')")
public R updateById(@RequestBody SysDict sysDict) {
public R<?> updateById(@RequestBody SysDict sysDict) {
return sysDictManager.updateDictById(sysDict) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改字典表失败");
}
@@ -104,7 +104,7 @@ public class SysDictController {
@DeleteOperationLogging(msg = "通过id删除字典表")
@DeleteMapping("/{id}")
@PreAuthorize("@per.hasPermission('sys:dict:del')")
public R removeById(@PathVariable Integer id) {
public R<?> removeById(@PathVariable Integer id) {
return sysDictManager.removeDictById(id) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "通过id删除字典表失败");
}
@@ -131,7 +131,7 @@ public class SysDictController {
@CreateOperationLogging(msg = "新增字典项")
@PostMapping("item")
@PreAuthorize("@per.hasPermission('sys:dict:add')")
public R saveItem(@RequestBody SysDictItem sysDictItem) {
public R<?> saveItem(@RequestBody SysDictItem sysDictItem) {
return sysDictManager.saveDictItem(sysDictItem) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "新增字典项失败");
}
@@ -145,7 +145,7 @@ public class SysDictController {
@UpdateOperationLogging(msg = "修改字典项")
@PutMapping("item")
@PreAuthorize("@per.hasPermission('sys:dict:edit')")
public R updateItemById(@RequestBody SysDictItem sysDictItem) {
public R<?> updateItemById(@RequestBody SysDictItem sysDictItem) {
return sysDictManager.updateDictItemById(sysDictItem) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改字典项失败");
}
@@ -159,7 +159,7 @@ public class SysDictController {
@DeleteOperationLogging(msg = "通过id删除字典项")
@DeleteMapping("/item/{id}")
@PreAuthorize("@per.hasPermission('sys:dict:del')")
public R removeItemById(@PathVariable Integer id) {
public R<?> removeItemById(@PathVariable Integer id) {
return sysDictManager.removeDictItemById(id) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "通过id删除字典项失败");
}

View File

@@ -1,5 +1,6 @@
package com.hccake.ballcat.admin.modules.sys.manager;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -19,6 +20,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -108,12 +110,13 @@ public class SysDictManager {
* @param sysDictItem 字典项
* @return 执行是否成功
*/
@Transactional(rollbackFor = Exception.class)
public boolean saveDictItem(SysDictItem sysDictItem) {
// 更新字典项Hash值
if (!sysDictService.updateHashCode(sysDictItem.getDictCode())) {
return false;
if (sysDictService.updateHashCode(sysDictItem.getDictCode())) {
return sysDictItemService.save(sysDictItem);
}
return sysDictItemService.save(sysDictItem);
return false;
}
/**
@@ -154,31 +157,35 @@ public class SysDictManager {
/**
* 查询字典数据
* @param dictCode
* @return
* @param dictCodes 字典标识
* @return DictDataAndHashVO
*/
public DictDataAndHashVO queryDictDataAndHashVO(String dictCode) {
public List<DictDataAndHashVO> queryDictDataAndHashVO(String[] dictCodes) {
List<DictDataAndHashVO> list = new ArrayList<>();
// 查询对应hash值以及字典项数据
SysDict sysDict = sysDictService.getByCode(dictCode);
if (sysDict == null) {
return null;
}
List<SysDictItem> dictItems = sysDictItemService.getByDictCode(dictCode);
// 排序并转换为VO
List<DictItemVO> dictList = dictItems.stream().sorted(Comparator.comparingInt(SysDictItem::getSort))
.map(SysDictConverter.INSTANCE::itemPoToVo).collect(Collectors.toList());
List<SysDict> sysDictList = sysDictService.getByCode(dictCodes);
if (CollectionUtil.isNotEmpty(sysDictList)) {
for (SysDict sysDict : sysDictList) {
List<SysDictItem> dictItems = sysDictItemService.getByDictCode(sysDict.getCode());
// 排序并转换为VO
List<DictItemVO> dictList = dictItems.stream().sorted(Comparator.comparingInt(SysDictItem::getSort))
.map(SysDictConverter.INSTANCE::itemPoToVo).collect(Collectors.toList());
// 组装DataVO
DictDataAndHashVO dictDataAndHashVO = new DictDataAndHashVO();
dictDataAndHashVO.setDictCode(sysDict.getCode());
dictDataAndHashVO.setHashCode(sysDict.getHashCode());
dictDataAndHashVO.setDictList(dictList);
// 组装DataVO
DictDataAndHashVO dictDataAndHashVO = new DictDataAndHashVO();
dictDataAndHashVO.setHashCode(sysDict.getHashCode());
dictDataAndHashVO.setDictList(dictList);
return dictDataAndHashVO;
list.add(dictDataAndHashVO);
}
}
return list;
}
/**
* 返回失效的Hash
* @param dictHashCode 校验的hashCodeMap
* @return
* @return List<String> 失效的字典标识集合
*/
public List<String> invalidDictHash(Map<String, String> dictHashCode) {
List<SysDict> byCode = sysDictService.getByCode(dictHashCode.keySet().toArray(new String[] {}));

View File

@@ -15,6 +15,12 @@ import java.util.List;
@ApiModel(value = "字典数据VO")
public class DictDataAndHashVO {
/**
* 字典标识
*/
@ApiModelProperty(value = "字典标识")
private String dictCode;
/**
* 字典Hash值
*/

View File

@@ -39,8 +39,8 @@ public interface SysDictService extends IService<SysDict> {
/**
* 更新字典HashCode
* @param dictCode
* @return
* @param dictCode 字典标识
* @return 更新状态 成功true or 失败 (false)
*/
boolean updateHashCode(String dictCode);

View File

@@ -7,9 +7,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.hccake.ballcat.admin.modules.sys.mapper.SysDictMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDict;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysDictQO;
import com.hccake.ballcat.admin.modules.sys.mapper.SysDictMapper;
import com.hccake.ballcat.admin.modules.sys.service.SysDictService;
import org.springframework.stereotype.Service;
@@ -63,8 +63,8 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
/**
* 更新字典HashCode
* @param dictCode
* @return
* @param dictCode 字典标识
* @return 更新状态: 成功(true) 失败(false)
*/
@Override
public boolean updateHashCode(String dictCode) {