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

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

View File

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

View File

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

View File

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