增加字典模块-增加批量查询接口

This commit is contained in:
xudawei 2024-05-06 11:00:20 +08:00
parent 099fdb2fee
commit 8a9e52baf6
7 changed files with 159 additions and 7 deletions

View File

@ -1,6 +1,7 @@
package cn.axzo.nanopart.dictionary.api;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.nanopart.dictionary.api.request.QueryByBatchDictTypeReq;
import cn.axzo.nanopart.dictionary.api.request.QueryByDictTypeReq;
import cn.axzo.nanopart.dictionary.api.response.QueryByDictTypeResp;
import org.springframework.cloud.openfeign.FeignClient;
@ -8,6 +9,8 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
/**
* 字典相关 api
@ -20,9 +23,15 @@ import javax.validation.Valid;
public interface DictionaryApi {
/**
* 分页查询banner
* 分页查询
*/
@PostMapping("/api/dictionary/page")
ApiPageResult<QueryByDictTypeResp> queryByType(@RequestBody @Valid QueryByDictTypeReq req);
/**
* 通过dictType批量查询
*/
@PostMapping("/api/dictionary/batchQuery")
Map<String, List<QueryByDictTypeResp>> queryByBatchType(@RequestBody @Valid QueryByBatchDictTypeReq req);
}

View File

@ -0,0 +1,30 @@
package cn.axzo.nanopart.dictionary.api.request;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* @author xudawei
* @date 2024/4/29
*/
@Data
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class QueryByBatchDictTypeReq {
/**
* 字典类型
*/
@NotEmpty(message = "dictTypeList is blank")
private List<String> dictTypes;
}

View File

@ -0,0 +1,31 @@
package cn.axzo.nanopart.dictionary.api.request;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author xudawei
* @date 2024/5/6
*/
@Data
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class QueryDictReq {
/**
* 字典类型集合
*/
private List<String> dictTypes;
/**
* 字典key
*/
private String dictKey;
}

View File

@ -0,0 +1,30 @@
package cn.axzo.nanopart.dictionary.api.response;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author xudawei
* @date 2024/4/29
*/
@Data
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class QueryByBatchDictTypeResp {
/**
* 类型
*/
private String dictType;
/**
* 集合
*/
private List<QueryByDictTypeResp> dataList;
}

View File

@ -2,7 +2,9 @@ package cn.axzo.nanopart.dictionary.server.controller;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.nanopart.dictionary.api.DictionaryApi;
import cn.axzo.nanopart.dictionary.api.request.QueryByBatchDictTypeReq;
import cn.axzo.nanopart.dictionary.api.request.QueryByDictTypeReq;
import cn.axzo.nanopart.dictionary.api.request.QueryDictReq;
import cn.axzo.nanopart.dictionary.api.request.QueryPageDictReq;
import cn.axzo.nanopart.dictionary.api.response.QueryByDictTypeResp;
import cn.axzo.nanopart.dictionary.server.domain.Dictionary;
@ -10,6 +12,7 @@ import cn.axzo.nanopart.dictionary.server.service.DictionaryService;
import cn.axzo.pokonyan.dao.converter.PageConverter;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -17,6 +20,9 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 字典
@ -36,4 +42,20 @@ public class DictionaryController implements DictionaryApi {
Page<Dictionary> page = dictionaryService.page(BeanUtil.copyProperties(req, QueryPageDictReq.class));
return ApiPageResult.ok(PageConverter.convert(page, record -> BeanUtil.toBean(record, QueryByDictTypeResp.class)));
}
/**
* 通过dictType批量查询
*/
@Override
public Map<String, List<QueryByDictTypeResp>> queryByBatchType(@RequestBody @Valid QueryByBatchDictTypeReq req) {
List<Dictionary> list = dictionaryService.query(BeanUtil.copyProperties(req, QueryDictReq.class));
Map<String, List<Dictionary>> map = list.stream().collect(Collectors.groupingBy(Dictionary::getDictType, Collectors.toList()));
Map<String, List<QueryByDictTypeResp>> resultMap = Maps.newHashMap();
map.forEach((dictType, dictList) -> {
List<QueryByDictTypeResp> respList = BeanUtil.copyToList(dictList, QueryByDictTypeResp.class);
resultMap.put(dictType, respList);
});
return resultMap;
}
}

View File

@ -1,15 +1,23 @@
package cn.axzo.nanopart.dictionary.server.service;
import cn.axzo.nanopart.dictionary.api.request.QueryDictReq;
import cn.axzo.nanopart.dictionary.api.request.QueryPageDictReq;
import cn.axzo.nanopart.dictionary.server.domain.Dictionary;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* @author xudawei
* @date 2024/4/29
*/
public interface DictionaryService {
/**
* 列表查询
*/
List<Dictionary> query(QueryDictReq req);
/**
* 分页查询
*/

View File

@ -1,5 +1,6 @@
package cn.axzo.nanopart.dictionary.server.service.impl;
import cn.axzo.nanopart.dictionary.api.request.QueryDictReq;
import cn.axzo.nanopart.dictionary.api.request.QueryPageDictReq;
import cn.axzo.nanopart.dictionary.server.domain.Dictionary;
import cn.axzo.nanopart.dictionary.server.mapper.DictionaryDao;
@ -9,9 +10,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
/**
@ -23,14 +27,31 @@ import java.util.Objects;
@RequiredArgsConstructor
public class DictionaryServiceImpl extends ServiceImpl<DictionaryDao, Dictionary> implements DictionaryService {
/**
* 列表查询
*/
@Override
public List<Dictionary> query(QueryDictReq req) {
if (StringUtils.isBlank(req.getDictKey()) && CollectionUtils.isEmpty(req.getDictTypes())) {
return Lists.newArrayList();
}
LambdaQueryWrapper<Dictionary> queryWrapper = buildLambdaQueryWrapper(StringUtils.EMPTY, req.getDictKey(), req.getDictTypes());
return this.list(queryWrapper);
}
/**
* 分页查询
*/
@Override
public Page<Dictionary> page(QueryPageDictReq req) {
LambdaQueryWrapper<Dictionary> pageLambdaQueryWrapper = buildPageLambdaQueryWrapper(req);
if (StringUtils.isBlank(req.getDictKey()) && StringUtils.isBlank(req.getDictType())) {
return new Page<>(req.getPageNumber(), req.getPageSize(), 0);
}
Page<Dictionary> dictionaryPage = page(new Page<>(req.getPageNumber(), req.getPageSize()), pageLambdaQueryWrapper);
LambdaQueryWrapper<Dictionary> pageLambdaQueryWrapper = buildLambdaQueryWrapper(req.getDictType(), req.getDictKey(), Lists.newArrayList());
Page<Dictionary> dictionaryPage = this.page(new Page<>(req.getPageNumber(), req.getPageSize()), pageLambdaQueryWrapper);
if (Objects.isNull(dictionaryPage) || dictionaryPage.getTotal() == 0) {
return new Page<>(req.getPageNumber(), req.getPageSize(), 0);
}
@ -40,13 +61,14 @@ public class DictionaryServiceImpl extends ServiceImpl<DictionaryDao, Dictionar
/**
* 构建分页查询条件
*/
private LambdaQueryWrapper<Dictionary> buildPageLambdaQueryWrapper(QueryPageDictReq req) {
private LambdaQueryWrapper<Dictionary> buildLambdaQueryWrapper(String dictType, String dictKey, List<String> dictTypes) {
LambdaQueryWrapper<Dictionary> lambdaQueryWrapper = new LambdaQueryWrapper<Dictionary>();
return lambdaQueryWrapper
.like(StringUtils.isNotEmpty(req.getDictType()), Dictionary::getDictType, req.getDictType())
.eq(Objects.nonNull(req.getDictKey()), Dictionary::getDictKey, req.getDictKey())
.like(StringUtils.isNotEmpty(dictType), Dictionary::getDictType, dictType)
.in(!CollectionUtils.isEmpty(dictTypes), Dictionary::getDictType, dictTypes)
.eq(StringUtils.isNotEmpty(dictKey), Dictionary::getDictKey, dictKey)
.eq(Dictionary::getIsDelete, 0)
.orderByDesc(Dictionary::getCreateAt);
.orderByDesc(Dictionary::getOrderBy);
}
}