diff --git a/oss-client/src/main/java/cn/axzo/oss/client/icon/controller/IconDetailController.java b/oss-client/src/main/java/cn/axzo/oss/client/icon/controller/IconDetailController.java index 59089ab..035caec 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/icon/controller/IconDetailController.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/icon/controller/IconDetailController.java @@ -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.IconDetailUpdateReq; 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.azxo.framework.common.model.CommonResponse; +import cn.hutool.json.JSONNull; import cn.hutool.json.JSONUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -92,6 +94,19 @@ public class IconDetailController { */ @PostMapping("/list") public CommonResponse> list(@RequestBody IconDetailListReq req) { + log.info("图标列表:req = {}", JSONUtil.toJsonStr(req)); return CommonResponse.success(iconDetailService.list(req)); } + + /** + * 获取所有图标文件格式 + * + * @param req 图标信息 {@link IconTypeListReq} + * @return 图标文件格式列表 + */ + @PostMapping("/getAllTypes") + public CommonResponse> getAllTypes(@RequestBody IconTypeListReq req) { + log.info("获取所有图标文件格式:req = {}", JSONUtil.toJsonStr(req)); + return CommonResponse.success(iconDetailService.getAllTypes(req)); + } } diff --git a/oss-client/src/main/java/cn/axzo/oss/client/icon/entity/IconDetail.java b/oss-client/src/main/java/cn/axzo/oss/client/icon/entity/IconDetail.java index 1835606..6cc890e 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/icon/entity/IconDetail.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/icon/entity/IconDetail.java @@ -45,6 +45,12 @@ public class IconDetail extends Model { @TableField("name") private String name; + /** + * 图标类型 + */ + @TableField("type") + private String type; + /** * 图标地址 */ diff --git a/oss-client/src/main/java/cn/axzo/oss/client/icon/service/IconDetailService.java b/oss-client/src/main/java/cn/axzo/oss/client/icon/service/IconDetailService.java index a653881..e76567c 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/icon/service/IconDetailService.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/icon/service/IconDetailService.java @@ -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.IconDetailUpdateReq; 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 java.util.List; @@ -55,4 +56,12 @@ public interface IconDetailService { * @return 图标详情 */ IconDetailListResp detailById(Long id); + + /** + * 获取所有图标类型 + * + * @param req 图标类型请求 {@link IconTypeListReq} + * @return 图标类型 + */ + List getAllTypes(IconTypeListReq req); } diff --git a/oss-client/src/main/java/cn/axzo/oss/client/icon/service/impl/IconDetailServiceImpl.java b/oss-client/src/main/java/cn/axzo/oss/client/icon/service/impl/IconDetailServiceImpl.java index e15235f..c3d7616 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/icon/service/impl/IconDetailServiceImpl.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/icon/service/impl/IconDetailServiceImpl.java @@ -1,6 +1,7 @@ package cn.axzo.oss.client.icon.service.impl; 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.IconGroup; 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.IconDetailListReq; 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.common.enums.CodeEnum; import cn.axzo.oss.common.exception.BizException; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.json.JSONUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -20,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -66,7 +70,15 @@ public class IconDetailServiceImpl implements IconDetailService { .one(); // 存在 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.getIds()), IconDetail::getId, req.getIds()) .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()) .list(); if (CollectionUtils.isEmpty(iconDetailList)) { @@ -183,4 +198,27 @@ public class IconDetailServiceImpl implements IconDetailService { r.setGroupName(iconGroup.getGroup()); }); } + + /** + * 获取图标所有类型 + * + * @param req 查询参数 {@link IconTypeListReq} + * @return 所有类型 {@link List} + */ + @Override + public List getAllTypes(IconTypeListReq req) { + List 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()); + } } diff --git a/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/request/IconDetailListReq.java b/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/request/IconDetailListReq.java index fe3cbc1..e334174 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/request/IconDetailListReq.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/request/IconDetailListReq.java @@ -33,6 +33,11 @@ public class IconDetailListReq { */ private String name; + /** + * 类型,如:svg,png,多个用逗号分隔 + */ + private List types; + /** * 状态,0:正常,1:禁用,多个用逗号分隔 */ diff --git a/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/request/IconTypeListReq.java b/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/request/IconTypeListReq.java new file mode 100644 index 0000000..9538050 --- /dev/null +++ b/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/request/IconTypeListReq.java @@ -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 groupIds; + +} diff --git a/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/response/IconDetailListResp.java b/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/response/IconDetailListResp.java index fd930cd..a58dfe6 100644 --- a/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/response/IconDetailListResp.java +++ b/oss-client/src/main/java/cn/axzo/oss/client/icon/vo/response/IconDetailListResp.java @@ -45,6 +45,11 @@ public class IconDetailListResp { */ private String name; + /** + * 图标类型,如svg,png + */ + private String type; + /** * 图标地址 */ diff --git a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java index 0bd21b9..bcc2e4a 100644 --- a/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java +++ b/oss-common/src/main/java/cn/axzo/oss/common/enums/CodeEnum.java @@ -50,7 +50,8 @@ public enum CodeEnum implements EnumBase { ICON_GROUP_EXIST(116, "图标组已存在"), ICON_GROUP_NOT_EXIST(117, "图标组不存在"), - ICON_EXIST(118, "图标已存在") + ICON_EXIST(118, "图标已存在"), + FILE_FORMAT_MAY_ERROR(119, "文件格式可能错误") ;