feat(icon_manage): 支持根据图标类型筛选图标

This commit is contained in:
chenwenjian 2024-03-11 14:16:21 +08:00
parent 0638c16837
commit ece9bdf777
8 changed files with 108 additions and 2 deletions

View File

@ -5,8 +5,10 @@ import cn.axzo.oss.client.icon.vo.request.IconDetailAddReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailListReq; import cn.axzo.oss.client.icon.vo.request.IconDetailListReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateReq; import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateStatus; import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateStatus;
import cn.axzo.oss.client.icon.vo.request.IconTypeListReq;
import cn.axzo.oss.client.icon.vo.response.IconDetailListResp; import cn.axzo.oss.client.icon.vo.response.IconDetailListResp;
import cn.azxo.framework.common.model.CommonResponse; import cn.azxo.framework.common.model.CommonResponse;
import cn.hutool.json.JSONNull;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -92,6 +94,19 @@ public class IconDetailController {
*/ */
@PostMapping("/list") @PostMapping("/list")
public CommonResponse<List<IconDetailListResp>> list(@RequestBody IconDetailListReq req) { public CommonResponse<List<IconDetailListResp>> list(@RequestBody IconDetailListReq req) {
log.info("图标列表req = {}", JSONUtil.toJsonStr(req));
return CommonResponse.success(iconDetailService.list(req)); return CommonResponse.success(iconDetailService.list(req));
} }
/**
* 获取所有图标文件格式
*
* @param req 图标信息 {@link IconTypeListReq}
* @return 图标文件格式列表
*/
@PostMapping("/getAllTypes")
public CommonResponse<List<String>> getAllTypes(@RequestBody IconTypeListReq req) {
log.info("获取所有图标文件格式req = {}", JSONUtil.toJsonStr(req));
return CommonResponse.success(iconDetailService.getAllTypes(req));
}
} }

View File

@ -45,6 +45,12 @@ public class IconDetail extends Model<IconDetail> {
@TableField("name") @TableField("name")
private String name; private String name;
/**
* 图标类型
*/
@TableField("type")
private String type;
/** /**
* 图标地址 * 图标地址
*/ */

View File

@ -4,6 +4,7 @@ import cn.axzo.oss.client.icon.vo.request.IconDetailAddReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailListReq; import cn.axzo.oss.client.icon.vo.request.IconDetailListReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateReq; import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateStatus; import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateStatus;
import cn.axzo.oss.client.icon.vo.request.IconTypeListReq;
import cn.axzo.oss.client.icon.vo.response.IconDetailListResp; import cn.axzo.oss.client.icon.vo.response.IconDetailListResp;
import java.util.List; import java.util.List;
@ -55,4 +56,12 @@ public interface IconDetailService {
* @return 图标详情 * @return 图标详情
*/ */
IconDetailListResp detailById(Long id); IconDetailListResp detailById(Long id);
/**
* 获取所有图标类型
*
* @param req 图标类型请求 {@link IconTypeListReq}
* @return 图标类型
*/
List<String> getAllTypes(IconTypeListReq req);
} }

View File

@ -1,6 +1,7 @@
package cn.axzo.oss.client.icon.service.impl; package cn.axzo.oss.client.icon.service.impl;
import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.exception.ServiceException;
import cn.axzo.oss.client.icon.entity.IconDetail; import cn.axzo.oss.client.icon.entity.IconDetail;
import cn.axzo.oss.client.icon.entity.IconGroup; import cn.axzo.oss.client.icon.entity.IconGroup;
import cn.axzo.oss.client.icon.repository.IconDetailRepository; import cn.axzo.oss.client.icon.repository.IconDetailRepository;
@ -9,9 +10,11 @@ import cn.axzo.oss.client.icon.service.IconDetailService;
import cn.axzo.oss.client.icon.vo.request.IconDetailAddReq; import cn.axzo.oss.client.icon.vo.request.IconDetailAddReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailListReq; import cn.axzo.oss.client.icon.vo.request.IconDetailListReq;
import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateReq; import cn.axzo.oss.client.icon.vo.request.IconDetailUpdateReq;
import cn.axzo.oss.client.icon.vo.request.IconTypeListReq;
import cn.axzo.oss.client.icon.vo.response.IconDetailListResp; import cn.axzo.oss.client.icon.vo.response.IconDetailListResp;
import cn.axzo.oss.common.enums.CodeEnum; import cn.axzo.oss.common.enums.CodeEnum;
import cn.axzo.oss.common.exception.BizException; import cn.axzo.oss.common.exception.BizException;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -20,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -66,7 +70,15 @@ public class IconDetailServiceImpl implements IconDetailService {
.one(); .one();
// 存在 // 存在
BizException.error(Objects.isNull(iconDetail), CodeEnum.ICON_EXIST); BizException.error(Objects.isNull(iconDetail), CodeEnum.ICON_EXIST);
return iconDetailRepository.save(BeanMapper.copyBean(req, IconDetail.class, (r, i) -> i.setExt(JSONUtil.toJsonStr(r.getExt())))); return iconDetailRepository.save(BeanMapper.copyBean(req, IconDetail.class, (r, i) -> {
i.setExt(JSONUtil.toJsonStr(r.getExt()));
// 获取图标格式
String[] split = r.getName().split("\\.");
if (ArrayUtil.isEmpty(split)){
throw new ServiceException(CodeEnum.FILE_FORMAT_MAY_ERROR.getMessage());
}
i.setType(split[split.length-1].toLowerCase());
}));
} }
/** /**
@ -140,6 +152,9 @@ public class IconDetailServiceImpl implements IconDetailService {
.in(!CollectionUtils.isEmpty(req.getGroupIds()), IconDetail::getGroupId, req.getGroupIds()) .in(!CollectionUtils.isEmpty(req.getGroupIds()), IconDetail::getGroupId, req.getGroupIds())
.in(!CollectionUtils.isEmpty(req.getIds()), IconDetail::getId, req.getIds()) .in(!CollectionUtils.isEmpty(req.getIds()), IconDetail::getId, req.getIds())
.like(StringUtils.hasText(req.getName()), IconDetail::getName, req) .like(StringUtils.hasText(req.getName()), IconDetail::getName, req)
.in(!CollectionUtils.isEmpty(req.getTypes()), IconDetail::getType, req.getTypes().stream()
.map(e -> e.trim().toLowerCase())
.collect(Collectors.toList()))
.in(!CollectionUtils.isEmpty(req.getStatuses()), IconDetail::getStatus, req.getStatuses()) .in(!CollectionUtils.isEmpty(req.getStatuses()), IconDetail::getStatus, req.getStatuses())
.list(); .list();
if (CollectionUtils.isEmpty(iconDetailList)) { if (CollectionUtils.isEmpty(iconDetailList)) {
@ -183,4 +198,27 @@ public class IconDetailServiceImpl implements IconDetailService {
r.setGroupName(iconGroup.getGroup()); r.setGroupName(iconGroup.getGroup());
}); });
} }
/**
* 获取图标所有类型
*
* @param req 查询参数 {@link IconTypeListReq}
* @return 所有类型 {@link List<String>}
*/
@Override
public List<String> getAllTypes(IconTypeListReq req) {
List<IconDetail> iconDetailList = iconDetailRepository.lambdaQuery()
.eq(IconDetail::getIsDelete, 0)
.in(!CollectionUtils.isEmpty(req.getGroupIds()), IconDetail::getGroupId, req.getGroupIds().stream()
.distinct()
.collect(Collectors.toList()))
.list();
if (CollectionUtils.isEmpty(iconDetailList)) {
return Collections.emptyList();
}
return iconDetailList.stream()
.map(IconDetail::getType)
.distinct()
.collect(Collectors.toList());
}
} }

View File

@ -33,6 +33,11 @@ public class IconDetailListReq {
*/ */
private String name; private String name;
/**
* 类型svgpng多个用逗号分隔
*/
private List<String> types;
/** /**
* 状态0正常1禁用多个用逗号分隔 * 状态0正常1禁用多个用逗号分隔
*/ */

View File

@ -0,0 +1,27 @@
package cn.axzo.oss.client.icon.vo.request;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 图标类型列表请求
* @author chenwenjian
* @version 1.0
* @date 2024/3/11 10:39
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class IconTypeListReq {
/**
* 分组ID多个用逗号分隔
*/
private List<Long> groupIds;
}

View File

@ -45,6 +45,11 @@ public class IconDetailListResp {
*/ */
private String name; private String name;
/**
* 图标类型如svgpng
*/
private String type;
/** /**
* 图标地址 * 图标地址
*/ */

View File

@ -50,7 +50,8 @@ public enum CodeEnum implements EnumBase<Integer> {
ICON_GROUP_EXIST(116, "图标组已存在"), ICON_GROUP_EXIST(116, "图标组已存在"),
ICON_GROUP_NOT_EXIST(117, "图标组不存在"), ICON_GROUP_NOT_EXIST(117, "图标组不存在"),
ICON_EXIST(118, "图标已存在") ICON_EXIST(118, "图标已存在"),
FILE_FORMAT_MAY_ERROR(119, "文件格式可能错误")
; ;