Commit 1f6f50e9 by Jony.L

Merge remote-tracking branch 'origin/fixbug' into compute

parents 95512b4d f06e277a
......@@ -6,5 +6,6 @@ import lombok.Data;
public class ApiDTO {
private Long apiId;
private String apiName;
private String trialUrl;
}
......@@ -6,5 +6,6 @@ import lombok.Data;
public class ApiEndpointDTO {
private Long apiEndpointId;
private String apiEndpointName;
private Boolean isShelf;
}
......@@ -8,6 +8,8 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Service
@Validated
......@@ -16,9 +18,17 @@ public class ApiApiServiceImpl implements ApiApi {
@Resource
private ApiMapper apiMapper;
private static final Logger logger = LoggerFactory.getLogger(ApiApiServiceImpl.class);
@Override
public List<ApiDTO> getApisByIndustryApplicationId(Long industryApplicationId) {
return apiMapper.selectApisByIndustryApplicationId(industryApplicationId);
List<ApiDTO> apis = apiMapper.selectApisByIndustryApplicationId(industryApplicationId);
try {
logger.info("ApiApiServiceImpl.getApisByIndustryApplicationId for id {} returned {} entries: {}", industryApplicationId, apis == null ? 0 : apis.size(), apis);
} catch (Exception e) {
logger.warn("Failed to log apis in ApiApiServiceImpl for id {}", industryApplicationId, e);
}
return apis;
}
}
......@@ -9,6 +9,7 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
* API 调用日志 Service 实现类
......@@ -30,7 +31,11 @@ public class ApiEndpointApiServiceImpl implements ApiEndpointApi {
@Override
public List<ApiEndpointDTO> getApiEndpointsByIndustryApplicationId(Long industryApplicationId) {
return apiEndpointMapper.selectApiEndpointsByIndustryApplicationId(industryApplicationId);
List<ApiEndpointDTO> apiEndpoints = apiEndpointMapper.selectApiEndpointsByIndustryApplicationId(industryApplicationId);
// 过滤掉 isShelf 不为 true 的 apiEndpoint
return apiEndpoints.stream()
.filter(endpoint -> Boolean.TRUE.equals(endpoint.getIsShelf()))
.collect(Collectors.toList());
}
}
......@@ -64,6 +64,9 @@ public class ApiRespVO {
@ExcelProperty("供应商联系方式")
private String vendorContact;
@Schema(description = "试用地址")
@ExcelProperty("试用地址")
private String trialUrl;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
......
......@@ -48,6 +48,9 @@ public class ApiSaveReqVO {
@Schema(description = "供应商联系方式", example = "13333333333")
private String vendorContact;
@Schema(description = "试用地址", example = "http://...")
private String trialUrl;
@Schema(description = "备注", example = "随便")
private String remark;
......
......@@ -5,6 +5,8 @@ import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.luhu.computility.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import software.amazon.awssdk.services.s3.endpoints.internal.Value;
import java.time.LocalDateTime;
import static com.luhu.computility.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
......@@ -37,6 +39,9 @@ public class ApiEndpointPageReqVO extends PageParam {
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "是否上架")
private Boolean isShelf;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
......
......@@ -60,6 +60,10 @@ public class ApiEndpointRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "是否上架", example = "true")
@ExcelProperty("是否上架")
private Boolean isShelf;
@Schema(description = "关联行业应用", example = "[{}]")
@ExcelProperty("关联行业应用")
......
......@@ -46,6 +46,8 @@ public class ApiEndpointSaveReqVO {
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "是否上架")
private Boolean isShelf;
@Schema(description = "关联行业应用", example = "[{}]")
@NotEmpty(message = "行业应用至少填写一个")
......
......@@ -28,6 +28,7 @@ import static com.luhu.computility.framework.apilog.core.enums.OperateTypeEnum.*
import com.luhu.computility.module.apihub.controller.admin.apiendpointrel.vo.*;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointrel.ApiEndpointRelDO;
import com.luhu.computility.module.apihub.service.apiendpointrel.ApiEndpointRelService;
import com.luhu.computility.module.biz.api.industryapplication.dto.IndustryApplicationRespDTO;
@Tag(name = "管理后台 - API 应用与接口关系")
@RestController
......@@ -100,5 +101,13 @@ public class ApiEndpointRelController {
ExcelUtils.write(response, "API 应用与接口关系.xls", "数据", ApiEndpointRelRespVO.class,
BeanUtils.toBean(list, ApiEndpointRelRespVO.class));
}
@GetMapping("/list-by-endpoint")
@Operation(summary = "根据API接口ID查询所有关联的API应用信息列表")
@Parameter(name = "apiEndpointId", description = "API接口ID", required = true, example = "1024")
public CommonResult<List<com.luhu.computility.module.apihub.controller.admin.api.vo.ApiRespVO>> getApisByEndpointId(@RequestParam("apiEndpointId") Long apiEndpointId) {
List<com.luhu.computility.module.apihub.controller.admin.api.vo.ApiRespVO> apis = apiEndpointRelService.getApisByEndpointId(apiEndpointId);
return success(apis);
}
}
\ No newline at end of file
......@@ -37,6 +37,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import static com.luhu.computility.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static com.luhu.computility.framework.common.pojo.CommonResult.success;
......@@ -80,7 +81,12 @@ public class AppApiController {
List<ApiEndpointRespVO> apiEndpointRespVOS = apiEndpointRelService.getApiEndpointByApiId(id);
for (ApiEndpointRespVO apiEndpointRespVO : apiEndpointRespVOS) {
// 过滤掉 isShelf 不为 true 的 apiEndpoint
List<ApiEndpointRespVO> filteredApiEndpoints = apiEndpointRespVOS.stream()
.filter(endpoint -> Boolean.TRUE.equals(endpoint.getIsShelf()))
.collect(Collectors.toList());
for (ApiEndpointRespVO apiEndpointRespVO : filteredApiEndpoints) {
List<IndustryApplicationRespDTO> industryApplicationRespDTOS = apiEndpointApplicationRelService.getApplicationByApiEndpointId(apiEndpointRespVO.getId());
apiEndpointRespVO.setIndustryApplications(industryApplicationRespDTOS);
}
......
......@@ -32,6 +32,11 @@ public class ApiDO extends BaseDO {
*/
private String name;
/**
* API 试用地址
*/
private String trialUrl;
/**
* API 最低价格描述
......
......@@ -64,6 +64,9 @@ public class ApiEndpointDO extends BaseDO {
* 备注
*/
private String remark;
/**
* 是否上架
*/
@TableField("is_shelf")
private Boolean isShelf;
}
\ No newline at end of file
......@@ -33,11 +33,12 @@ public interface ApiMapper extends BaseMapperX<ApiDO> {
.orderByDesc(ApiDO::getId));
}
@Select("SELECT DISTINCT a.id AS apiId, a.name AS apiName " +
"FROM apihub_api a " +
"INNER JOIN apihub_api_endpoint_rel r ON r.api_id = a.id AND r.deleted = 0 " +
"INNER JOIN apihub_api_endpoint_application_rel ar ON ar.api_endpoint_id = r.api_endpoint_id AND ar.deleted = 0 " +
"WHERE ar.industry_application_id = #{industryApplicationId} AND a.deleted = 0")
@Select("SELECT DISTINCT a.id AS apiId, a.name AS apiName, a.trial_url AS trialUrl " +
"FROM apihub_api a " +
"INNER JOIN apihub_api_endpoint_rel r ON r.api_id = a.id AND r.deleted = 0 " +
"INNER JOIN apihub_api_endpoint_application_rel ar ON ar.api_endpoint_id = r.api_endpoint_id AND ar.deleted = 0 " +
"INNER JOIN apihub_api_endpoint e ON e.id = r.api_endpoint_id AND e.deleted = 0 " +
"WHERE ar.industry_application_id = #{industryApplicationId} AND a.deleted = 0 AND a.status = 1 AND e.is_shelf = 1")
List<ApiDTO> selectApisByIndustryApplicationId(@Param("industryApplicationId") Long industryApplicationId);
default PageResult<ApiRespVO> selectJoinPage(ApiPageReqVO reqVO) {
......
......@@ -34,13 +34,15 @@ public interface ApiEndpointMapper extends BaseMapperX<ApiEndpointDO> {
.eqIfPresent(ApiEndpointDO::getAuthType, reqVO.getAuthType())
.eqIfPresent(ApiEndpointDO::getRateLimit, reqVO.getRateLimit())
.eqIfPresent(ApiEndpointDO::getRemark, reqVO.getRemark())
.eqIfPresent(ApiEndpointDO::getIsShelf, reqVO.getIsShelf())
.betweenIfPresent(ApiEndpointDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ApiEndpointDO::getId));
}
@Select("SELECT DISTINCT e.id AS apiEndpointId, e.name AS apiEndpointName " +
@Select("SELECT DISTINCT e.id AS apiEndpointId, e.name AS apiEndpointName, e.is_shelf AS isShelf " +
"FROM apihub_api_endpoint e " +
"INNER JOIN apihub_api_endpoint_application_rel ar ON ar.api_endpoint_id = e.id AND ar.deleted = 0 " +
"INNER JOIN apihub_api_endpoint_rel r ON r.api_endpoint_id = e.id AND r.deleted = 0 " +
"WHERE ar.industry_application_id = #{industryApplicationId} AND e.deleted = 0")
List<ApiEndpointDTO> selectApiEndpointsByIndustryApplicationId(@Param("industryApplicationId") Long industryApplicationId);
......
......@@ -46,4 +46,14 @@ public interface ApiEndpointRelMapper extends BaseMapperX<ApiEndpointRelDO> {
);
}
/**
* 根据apiEndpointId查询所有关联的API信息
*/
@org.apache.ibatis.annotations.Select(
"SELECT a.* FROM apihub_api a " +
"INNER JOIN apihub_api_endpoint_rel r ON r.api_id = a.id AND r.deleted = 0 " +
"WHERE r.api_endpoint_id = #{apiEndpointId} AND a.deleted = 0 AND a.status = 1"
)
List<com.luhu.computility.module.apihub.dal.dataobject.api.ApiDO> selectApisByEndpointId(Long apiEndpointId);
}
\ No newline at end of file
......@@ -6,6 +6,8 @@ import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.luhu.computility.module.apihub.controller.admin.api.vo.*;
import com.luhu.computility.module.apihub.dal.dataobject.api.ApiDO;
import com.luhu.computility.framework.common.pojo.PageResult;
......@@ -29,6 +31,8 @@ public class ApiServiceImpl implements ApiService {
@Resource
private ApiMapper apiMapper;
private static final Logger logger = LoggerFactory.getLogger(ApiServiceImpl.class);
@Override
public Long createApi(ApiSaveReqVO createReqVO) {
// 插入
......@@ -81,7 +85,13 @@ public class ApiServiceImpl implements ApiService {
@Override
public List<ApiDTO> getApisByIndustryApplicationId(Long industryApplicationId) {
return apiMapper.selectApisByIndustryApplicationId(industryApplicationId);
List<ApiDTO> apis = apiMapper.selectApisByIndustryApplicationId(industryApplicationId);
try {
logger.info("ApiServiceImpl.getApisByIndustryApplicationId for id {} returned {} entries: {}", industryApplicationId, apis == null ? 0 : apis.size(), apis);
} catch (Exception e) {
logger.warn("Failed to log apis in ApiServiceImpl for id {}", industryApplicationId, e);
}
return apis;
}
}
......@@ -8,6 +8,7 @@ import com.luhu.computility.module.apihub.controller.admin.apiendpointrel.vo.*;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointrel.ApiEndpointRelDO;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.pojo.PageParam;
import com.luhu.computility.module.biz.api.industryapplication.dto.IndustryApplicationRespDTO;
/**
* API 应用与接口关系 Service 接口
......@@ -74,4 +75,19 @@ public interface ApiEndpointRelService {
* 根据apiId删除关联的ApiEndpoint
*/
Integer deleteByApiId(Long apiId);
/**
* 根据API接口ID查询所有关联的API应用列表
*
* @param apiEndpointId API接口ID
* @return API应用列表
*/
List<IndustryApplicationRespDTO> getApplicationsByApiEndpointId(Long apiEndpointId);
/**
* 根据API接口ID查询所有关联的API信息
* @param apiEndpointId API接口ID
* @return API信息列表
*/
List<com.luhu.computility.module.apihub.controller.admin.api.vo.ApiRespVO> getApisByEndpointId(Long apiEndpointId);
}
\ No newline at end of file
......@@ -12,6 +12,8 @@ import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.module.apihub.dal.mysql.apiendpointrel.ApiEndpointRelMapper;
import com.luhu.computility.module.apihub.service.apiendpointapplicationrel.ApiEndpointApplicationRelService;
import com.luhu.computility.module.biz.api.industryapplication.dto.IndustryApplicationRespDTO;
import static com.luhu.computility.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.luhu.computility.framework.common.util.collection.CollectionUtils.convertList;
......@@ -28,6 +30,9 @@ public class ApiEndpointRelServiceImpl implements ApiEndpointRelService {
@Resource
private ApiEndpointRelMapper apiEndpointRelMapper;
@Resource
private ApiEndpointApplicationRelService apiEndpointApplicationRelService;
@Override
public Long createApiEndpointRel(ApiEndpointRelSaveReqVO createReqVO) {
......@@ -89,7 +94,13 @@ public class ApiEndpointRelServiceImpl implements ApiEndpointRelService {
return apiEndpointRelMapper.deleteByApiId(apiId);
}
@Override
public List<IndustryApplicationRespDTO> getApplicationsByApiEndpointId(Long apiEndpointId) {
return apiEndpointApplicationRelService.getApplicationByApiEndpointId(apiEndpointId);
}
@Override
public List<com.luhu.computility.module.apihub.controller.admin.api.vo.ApiRespVO> getApisByEndpointId(Long apiEndpointId) {
List<com.luhu.computility.module.apihub.dal.dataobject.api.ApiDO> apiList = apiEndpointRelMapper.selectApisByEndpointId(apiEndpointId);
return com.luhu.computility.framework.common.util.object.BeanUtils.toBean(apiList, com.luhu.computility.module.apihub.controller.admin.api.vo.ApiRespVO.class);
}
}
\ No newline at end of file
......@@ -19,6 +19,8 @@ import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.luhu.computility.framework.common.pojo.CommonResult.success;
......@@ -27,6 +29,8 @@ import static com.luhu.computility.framework.common.pojo.CommonResult.success;
@RequestMapping("/biz/industry-application")
public class AppIndustryApplicationController {
private static final Logger logger = LoggerFactory.getLogger(AppIndustryApplicationController.class);
@Resource
private IndustryApplicationService industryApplicationService;
@Resource
......@@ -65,6 +69,13 @@ public class AppIndustryApplicationController {
respVO.setApis(apiApi.getApisByIndustryApplicationId(id));
respVO.setApiEndpoints(apiEndpointApi.getApiEndpointsByIndustryApplicationId(id));
// Debug: log the apis returned to verify filtering
try {
logger.info("AppIndustryApplication apis for id {}: {}", id, respVO.getApis());
} catch (Exception e) {
logger.warn("Failed to log apis for industry application {}", id, e);
}
return success(respVO);
}
......
......@@ -91,7 +91,8 @@ public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> {
.leftJoin(ProductSpuDO.class, ProductSpuDO::getId, ProductSkuDO::getSpuId)
.eq(!ObjectUtil.isEmpty(queryVO.getCategoryId()), ProductSpuDO::getCategoryId, queryVO.getCategoryId() )
.eqIfExists( ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus())
.gt(ProductSpuDO::getStock, 1)
.ge(ProductSkuDO::getStock, 1)
.ge(ProductSpuDO::getStock, 1)
.orderByDesc(ProductSkuDO::getCreator));
}
......
......@@ -61,6 +61,11 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version> <!-- 可根据实际情况调整版本号 -->
</dependency>
</dependencies>
</dependencyManagement>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment