diff --git a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/Portal.java b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/Portal.java index b33e50e..cd72111 100644 --- a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/Portal.java +++ b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/Portal.java @@ -33,6 +33,16 @@ public class Portal extends BaseEntity { */ private Long queryId; + /** + * 菜单id + */ + private Long menuId; + + /** + * 接口id + */ + private Long interfaceId; + /** * 数据适配器id */ @@ -73,11 +83,6 @@ public class Portal extends BaseEntity { */ private String path; - /** - * 第三方接口地址 - */ - private String url; - /** * 状态 */ diff --git a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/PortalInterface.java b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/PortalInterface.java new file mode 100644 index 0000000..115b55d --- /dev/null +++ b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/PortalInterface.java @@ -0,0 +1,34 @@ +package cn.fateverse.query.entity; + +import lombok.Data; + +/** + * 第三方接口信息 + * + * @author Clay + * @date 2024/4/26 11:17 + */ +@Data +public class PortalInterface { + + /** + * 接口id + */ + private Long interfaceId; + + /** + * 请求地址 + */ + private String url; + + /** + * 请求类型 + */ + private String contentType; + + /** + * 请求类型 + */ + private String requestMethod; + +} diff --git a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/bo/PortalBo.java b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/bo/PortalBo.java index 6627664..32b1b01 100644 --- a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/bo/PortalBo.java +++ b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/bo/PortalBo.java @@ -22,6 +22,7 @@ import java.util.List; public class PortalBo implements Serializable { private Long portalId; private Long queryId; + private Long interfaceId; private Long adapterId; private PortalEnum type; private String requestMethod; @@ -36,13 +37,13 @@ public class PortalBo implements Serializable { return PortalBo.builder() .portalId(portal.getPortalId()) .queryId(portal.getQueryId()) + .interfaceId(portal.getInterfaceId()) .adapterId(portal.getAdapterId()) .type(portal.getType()) .requestMethod(portal.getRequestMethod()) .createDataAdapter(portal.getCreateDataAdapter()) .page(portal.getPage()) .path(portal.getPath()) - .url(portal.getUrl()) .state(portal.getState()) .mappings(mappings) .build(); diff --git a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/dto/PortalDto.java b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/dto/PortalDto.java index 6ee3695..310a4ce 100644 --- a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/dto/PortalDto.java +++ b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/entity/dto/PortalDto.java @@ -72,6 +72,16 @@ public class PortalDto { @NotNull(message = "是否创建数据适配器不能为空!") private Boolean createDataAdapter; + @ApiModelProperty("请求地址") + private String url; + + @ApiModelProperty("请求类型") + private String contentType; + + + @ApiModelProperty("接口请求方法类型") + private String interfaceRequestMethod; + /** * 是否分页 */ @@ -84,13 +94,6 @@ public class PortalDto { @NotBlank(message = "系统暴露地址不能为空") private String path; - /** - * 第三方接口地址 - */ - @ApiModelProperty("第三方接口地址") - private String url; - - /** * 状态 */ @@ -121,7 +124,6 @@ public class PortalDto { .page(page) .type(type) .path(path) - .url(url) .state(state) .build(); try { diff --git a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/mapper/PortalInterfaceMapper.java b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/mapper/PortalInterfaceMapper.java new file mode 100644 index 0000000..006debd --- /dev/null +++ b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/mapper/PortalInterfaceMapper.java @@ -0,0 +1,44 @@ +package cn.fateverse.query.mapper; + +import cn.fateverse.query.entity.PortalInterface; + +/** + * @author Clay + * @date 2024/4/26 11:23 + */ +public interface PortalInterfaceMapper { + + /** + * 根据id查询 + * + * @param interfaceId 接口id + * @return 接口信息 + */ + PortalInterface selectById(Long interfaceId); + + /** + * 新增 + * + * @param portalInterface 接口信息 + * @return 影响行数 + */ + Integer insert(PortalInterface portalInterface); + + /** + * 修改 + * + * @param portalInterface 接口信息 + * @return 影响行数 + */ + Integer update(PortalInterface portalInterface); + + /** + * 删除 + * + * @param interfaceId 接口id + * @return 影响行数 + */ + Integer deleteById(Long interfaceId); + + +} diff --git a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/service/impl/PortalServiceImpl.java b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/service/impl/PortalServiceImpl.java index 7865128..b6d6963 100644 --- a/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/service/impl/PortalServiceImpl.java +++ b/custom-query/custom-query-biz/src/main/java/cn/fateverse/query/service/impl/PortalServiceImpl.java @@ -12,6 +12,7 @@ import cn.fateverse.query.entity.vo.PortalIdWrapper; import cn.fateverse.query.enums.DataAdapterType; import cn.fateverse.query.enums.PortalPremEnum; import cn.fateverse.query.handler.reader.DataAdapterHandlerReader; +import cn.fateverse.query.mapper.*; import cn.fateverse.query.portal.service.HandlerMethodService; import cn.fateverse.query.constant.QueryConstant; import cn.fateverse.query.entity.dto.PortalDto; @@ -19,10 +20,6 @@ import cn.fateverse.query.entity.query.PortalQuery; import cn.fateverse.query.entity.vo.PortalVo; import cn.fateverse.query.entity.vo.SimplePortalVo; import cn.fateverse.query.enums.PortalEnum; -import cn.fateverse.query.mapper.DataAdapterMapper; -import cn.fateverse.query.mapper.PortalMapper; -import cn.fateverse.query.mapper.PortalMappingMapper; -import cn.fateverse.query.mapper.UniQueryMapper; import cn.fateverse.query.service.PortalService; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; @@ -58,6 +55,8 @@ public class PortalServiceImpl implements PortalService { private final PortalMappingMapper portalMappingMapper; + private final PortalInterfaceMapper portalInterfaceMapper; + private final DataAdapterHandlerReader handlerReader; @@ -67,12 +66,14 @@ public class PortalServiceImpl implements PortalService { PortalMappingMapper portalMappingMapper, ThreadPoolTaskExecutor taskExecuteExecutor, HandlerMethodService methodService, + PortalInterfaceMapper portalInterfaceMapper, DataAdapterHandlerReader handlerReader) { this.portalMapper = portalMapper; this.queryMapper = queryMapper; this.adapterMapper = adapterMapper; this.portalMappingMapper = portalMappingMapper; this.methodService = methodService; + this.portalInterfaceMapper = portalInterfaceMapper; this.handlerReader = handlerReader; taskExecuteExecutor.execute(() -> { PortalQuery query = new PortalQuery(); @@ -240,8 +241,8 @@ public class PortalServiceImpl implements PortalService { @Override @Transactional(rollbackFor = Exception.class) public PortalIdWrapper save(PortalDto portalDto) { + checkPortalType(portalDto); Portal portal = portalDto.toPortal(); - checkPortalType(portal); Portal old = portalMapper.selectByPath(portal.getPath(), portal.getRequestMethod()); if (!ObjectUtils.isEmpty(old)) { throw new CustomException("系统中存在当前请求路径"); @@ -260,6 +261,9 @@ public class PortalServiceImpl implements PortalService { throw new CustomException("未找到对应的数据适配器!"); } } + if (PortalEnum.EXTERNAL.equals(portal.getType())) { + createPortalInterface(portalDto, portal); + } portalMapper.insert(portal); List mappings = portalDto.getMappings(); if (!ObjectUtils.isEmpty(mappings)) { @@ -279,8 +283,8 @@ public class PortalServiceImpl implements PortalService { @Override @Transactional(rollbackFor = Exception.class) public PortalIdWrapper edit(PortalDto portalDto) { + checkPortalType(portalDto); Portal portal = portalDto.toPortal(); - checkPortalType(portal); Portal old = portalMapper.selectByPath(portal.getPath(), portal.getRequestMethod()); if (!QueryConstant.PORTAL_DEV.equals(old.getState())) { throw new CustomException("当前状态不允许修改"); @@ -295,6 +299,22 @@ public class PortalServiceImpl implements PortalService { adapterMapper.deleteById(old.getAdapterId()); } } + if (!old.getType().equals(portal.getType())) { + if (PortalEnum.LOCAL.equals(portal.getType())) { + portalInterfaceMapper.deleteById(old.getInterfaceId()); + } else { + createPortalInterface(portalDto, portal); + } + } else { + if (PortalEnum.EXTERNAL.equals(portal.getType())) { + PortalInterface portalInterface = new PortalInterface(); + portalInterface.setInterfaceId(old.getInterfaceId()); + portalInterface.setContentType(portalDto.getContentType()); + portalInterface.setRequestMethod(portalDto.getInterfaceRequestMethod()); + portalInterface.setUrl(portalDto.getUrl()); + portalInterfaceMapper.update(portalInterface); + } + } portalMappingMapper.deleteByPortalId(portal.getPortalId()); portalMapper.update(portal); if (!ObjectUtils.isEmpty(portalDto.getMappings())) { @@ -340,6 +360,9 @@ public class PortalServiceImpl implements PortalService { adapterMapper.deleteById(portal.getAdapterId()); } portalMappingMapper.deleteByPortalId(portalId); + if (PortalEnum.EXTERNAL.equals(portal.getType())) { + portalInterfaceMapper.deleteById(portal.getInterfaceId()); + } portalMapper.deleteById(portalId); } @@ -393,19 +416,40 @@ public class PortalServiceImpl implements PortalService { portal.setAdapterId(dataAdapter.getAdapterId()); } + /** + * 创建第三方接口 + * + * @param portalDto 接口dto对象 + * @param portal 接口对象 + */ + private void createPortalInterface(PortalDto portalDto, Portal portal) { + PortalInterface portalInterface = new PortalInterface(); + portalInterface.setContentType(portalDto.getContentType()); + portalInterface.setRequestMethod(portalDto.getInterfaceRequestMethod()); + portalInterface.setUrl(portalDto.getUrl()); + portalInterfaceMapper.insert(portalInterface); + portal.setInterfaceId(portalInterface.getInterfaceId()); + } + + /** * 检查接口类型是否正确 * - * @param portal 接口信息 + * @param portalDto 接口信息 */ - private void checkPortalType(Portal portal) { - if (PortalEnum.LOCAL.equals(portal.getType())) { - if (ObjectUtils.isEmpty(portal.getQueryId())) { + private void checkPortalType(PortalDto portalDto) { + if (PortalEnum.LOCAL.equals(portalDto.getType())) { + if (ObjectUtils.isEmpty(portalDto.getQueryId())) { throw new CustomException("请选择查询接口!"); } - portal.setUrl(null); - } else if (PortalEnum.EXTERNAL.equals(portal.getType())) { - if (ObjectUtils.isEmpty(portal.getUrl())) { + } else if (PortalEnum.EXTERNAL.equals(portalDto.getType())) { + if (ObjectUtils.isEmpty(portalDto.getContentType())) { + throw new CustomException("外部接口请求类型不能为空"); + } + if (ObjectUtils.isEmpty(portalDto.getInterfaceRequestMethod())) { + throw new CustomException("外部接口请求方法不能为空"); + } + if (ObjectUtils.isEmpty(portalDto.getUrl())) { throw new CustomException("第三方接口地址不能为空!"); } } else { diff --git a/custom-query/custom-query-biz/src/main/resources/mapper/PortalInterfaceMapper.xml b/custom-query/custom-query-biz/src/main/resources/mapper/PortalInterfaceMapper.xml new file mode 100644 index 0000000..c1d54dd --- /dev/null +++ b/custom-query/custom-query-biz/src/main/resources/mapper/PortalInterfaceMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + insert into portal_interface (interface_id, content_type, request_method) + values (#{interfaceId}, #{contentType}, #{requestMethod}) + + + + update portal_interface + set content_type = #{contentType}, + request_method = #{requestMethod} + where interface_id = #{interfaceId} + + + + delete + from portal_interface + where interface_id = #{interfaceId} + + + \ No newline at end of file diff --git a/custom-query/custom-query-biz/src/main/resources/mapper/PortalMapper.xml b/custom-query/custom-query-biz/src/main/resources/mapper/PortalMapper.xml index d1e89c4..22f4273 100644 --- a/custom-query/custom-query-biz/src/main/resources/mapper/PortalMapper.xml +++ b/custom-query/custom-query-biz/src/main/resources/mapper/PortalMapper.xml @@ -7,6 +7,8 @@ select portal_id, query_id, + menu_id, + interface_id, adapter_id, portal_name, permission_type, @@ -15,7 +17,6 @@ create_data_adapter, page, path, - url, state, create_by, create_time, @@ -32,7 +33,8 @@