Commit 4cabaec9 by lijinqi

管理端-Api订单管理已完成(搜索未完成)

管理端-用户Api管理已完成
客户端-api订单已完成
客户端-api资源已完成
parent 401032c1
...@@ -42,6 +42,19 @@ ...@@ -42,6 +42,19 @@
<artifactId>computility-spring-boot-starter-test</artifactId> <artifactId>computility-spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>com.luhu</groupId>-->
<!-- <artifactId>computility-module-external</artifactId>-->
<!-- <version>${revision}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.luhu</groupId>
<artifactId>computility-module-apihub</artifactId>
<version>${revision}</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -75,5 +75,11 @@ ...@@ -75,5 +75,11 @@
<groupId>com.luhu</groupId> <groupId>com.luhu</groupId>
<artifactId>computility-spring-boot-starter-excel</artifactId> <artifactId>computility-spring-boot-starter-excel</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.luhu</groupId>
<artifactId>computility-module-biz</artifactId>
<version>${revision}</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -11,8 +11,10 @@ import com.luhu.computility.module.apihub.controller.admin.apipackage.vo.ApiPack ...@@ -11,8 +11,10 @@ import com.luhu.computility.module.apihub.controller.admin.apipackage.vo.ApiPack
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointrel.ApiEndpointRelDO; import com.luhu.computility.module.apihub.dal.dataobject.apiendpointrel.ApiEndpointRelDO;
import com.luhu.computility.module.apihub.dal.dataobject.apipackage.ApiPackageDO; import com.luhu.computility.module.apihub.dal.dataobject.apipackage.ApiPackageDO;
import com.luhu.computility.module.apihub.service.apiendpoint.ApiEndpointService; import com.luhu.computility.module.apihub.service.apiendpoint.ApiEndpointService;
import com.luhu.computility.module.apihub.service.apiendpointapplicationrel.ApiEndpointApplicationRelService;
import com.luhu.computility.module.apihub.service.apiendpointrel.ApiEndpointRelService; import com.luhu.computility.module.apihub.service.apiendpointrel.ApiEndpointRelService;
import com.luhu.computility.module.apihub.service.apipackage.ApiPackageService; import com.luhu.computility.module.apihub.service.apipackage.ApiPackageService;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
import org.checkerframework.checker.units.qual.A; import org.checkerframework.checker.units.qual.A;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -60,6 +62,10 @@ public class ApiController { ...@@ -60,6 +62,10 @@ public class ApiController {
private ApiPackageService apiPackageService; private ApiPackageService apiPackageService;
@Resource
private ApiEndpointApplicationRelService apiEndpointApplicationRelService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建API信息") @Operation(summary = "创建API信息")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -119,6 +125,7 @@ public class ApiController { ...@@ -119,6 +125,7 @@ public class ApiController {
@PreAuthorize("@ss.hasPermission('apihub:api:delete')") @PreAuthorize("@ss.hasPermission('apihub:api:delete')")
public CommonResult<Boolean> deleteApi(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteApi(@RequestParam("id") Long id) {
apiService.deleteApi(id); apiService.deleteApi(id);
apiEndpointRelService.deleteByApiId(id);
return success(true); return success(true);
} }
...@@ -128,6 +135,9 @@ public class ApiController { ...@@ -128,6 +135,9 @@ public class ApiController {
@PreAuthorize("@ss.hasPermission('apihub:api:delete')") @PreAuthorize("@ss.hasPermission('apihub:api:delete')")
public CommonResult<Boolean> deleteApiList(@RequestParam("ids") List<Long> ids) { public CommonResult<Boolean> deleteApiList(@RequestParam("ids") List<Long> ids) {
apiService.deleteApiListByIds(ids); apiService.deleteApiListByIds(ids);
for (Long id : ids) {
apiEndpointRelService.deleteByApiId(id);
}
return success(true); return success(true);
} }
...@@ -142,6 +152,11 @@ public class ApiController { ...@@ -142,6 +152,11 @@ public class ApiController {
apiRespVO.setApiPackages(BeanUtils.toBean(apiPackageDOS, ApiPackageRespVO.class)); apiRespVO.setApiPackages(BeanUtils.toBean(apiPackageDOS, ApiPackageRespVO.class));
List<ApiEndpointRespVO> apiEndpointRespVOS = apiEndpointRelService.getApiEndpointByApiId(id); List<ApiEndpointRespVO> apiEndpointRespVOS = apiEndpointRelService.getApiEndpointByApiId(id);
/*
for (ApiEndpointRespVO apiEndpointRespVO : apiEndpointRespVOS) {
List<IndustryApplicationRespVO> industryApplicationRespVOS = apiEndpointApplicationRelService.getApplicationByApiEndpointId(apiEndpointRespVO.getId());
apiEndpointRespVO.setIndustryApplications(industryApplicationRespVOS);
}*/
apiRespVO.setApiEndPoints(apiEndpointRespVOS); apiRespVO.setApiEndPoints(apiEndpointRespVOS);
return success(apiRespVO); return success(apiRespVO);
......
package com.luhu.computility.module.apihub.controller.admin.apiendpoint; package com.luhu.computility.module.apihub.controller.admin.apiendpoint;
import com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo.ApiEndpointApplicationRelSaveReqVO;
import com.luhu.computility.module.apihub.service.apiendpointapplicationrel.ApiEndpointApplicationRelService;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -38,11 +42,23 @@ public class ApiEndpointController { ...@@ -38,11 +42,23 @@ public class ApiEndpointController {
@Resource @Resource
private ApiEndpointService apiEndpointService; private ApiEndpointService apiEndpointService;
@Resource
private ApiEndpointApplicationRelService apiEndpointApplicationRelService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建API 接口") @Operation(summary = "创建API 接口")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint:create')") @PreAuthorize("@ss.hasPermission('apihub:api-endpoint:create')")
@Transactional(rollbackFor = Exception.class)
public CommonResult<Long> createApiEndpoint(@Valid @RequestBody ApiEndpointSaveReqVO createReqVO) { public CommonResult<Long> createApiEndpoint(@Valid @RequestBody ApiEndpointSaveReqVO createReqVO) {
return success(apiEndpointService.createApiEndpoint(createReqVO)); Long apiEndpointId = apiEndpointService.createApiEndpoint(createReqVO);
for (IndustryApplicationRespVO industryApplicationRespVO : createReqVO.getIndustryApplications()) {
apiEndpointApplicationRelService.createApiEndpointApplicationRel(
new ApiEndpointApplicationRelSaveReqVO()
.setIndustryApplicationId(industryApplicationRespVO.getId())
.setApiEndpointId(apiEndpointId));
}
return success(apiEndpointId);
} }
@PutMapping("/update") @PutMapping("/update")
...@@ -50,6 +66,15 @@ public class ApiEndpointController { ...@@ -50,6 +66,15 @@ public class ApiEndpointController {
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint:update')") @PreAuthorize("@ss.hasPermission('apihub:api-endpoint:update')")
public CommonResult<Boolean> updateApiEndpoint(@Valid @RequestBody ApiEndpointSaveReqVO updateReqVO) { public CommonResult<Boolean> updateApiEndpoint(@Valid @RequestBody ApiEndpointSaveReqVO updateReqVO) {
apiEndpointService.updateApiEndpoint(updateReqVO); apiEndpointService.updateApiEndpoint(updateReqVO);
//删除以前的
apiEndpointApplicationRelService.deleteApiEndpointApplicationRelByApiEndpointId(updateReqVO.getId());
//插入新数据
for (IndustryApplicationRespVO industryApplicationRespVO : updateReqVO.getIndustryApplications()) {
apiEndpointApplicationRelService.createApiEndpointApplicationRel(
new ApiEndpointApplicationRelSaveReqVO()
.setIndustryApplicationId(industryApplicationRespVO.getId())
.setApiEndpointId(updateReqVO.getId()));
}
return success(true); return success(true);
} }
...@@ -59,6 +84,7 @@ public class ApiEndpointController { ...@@ -59,6 +84,7 @@ public class ApiEndpointController {
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint:delete')") @PreAuthorize("@ss.hasPermission('apihub:api-endpoint:delete')")
public CommonResult<Boolean> deleteApiEndpoint(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteApiEndpoint(@RequestParam("id") Long id) {
apiEndpointService.deleteApiEndpoint(id); apiEndpointService.deleteApiEndpoint(id);
apiEndpointApplicationRelService.deleteApiEndpointApplicationRelByApiEndpointId(id);
return success(true); return success(true);
} }
...@@ -68,6 +94,10 @@ public class ApiEndpointController { ...@@ -68,6 +94,10 @@ public class ApiEndpointController {
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint:delete')") @PreAuthorize("@ss.hasPermission('apihub:api-endpoint:delete')")
public CommonResult<Boolean> deleteApiEndpointList(@RequestParam("ids") List<Long> ids) { public CommonResult<Boolean> deleteApiEndpointList(@RequestParam("ids") List<Long> ids) {
apiEndpointService.deleteApiEndpointListByIds(ids); apiEndpointService.deleteApiEndpointListByIds(ids);
//不常用,先偷懒循环delete
for(Long id : ids){
apiEndpointApplicationRelService.deleteApiEndpointApplicationRelByApiEndpointId(id);
}
return success(true); return success(true);
} }
...@@ -77,7 +107,10 @@ public class ApiEndpointController { ...@@ -77,7 +107,10 @@ public class ApiEndpointController {
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint:query')") @PreAuthorize("@ss.hasPermission('apihub:api-endpoint:query')")
public CommonResult<ApiEndpointRespVO> getApiEndpoint(@RequestParam("id") Long id) { public CommonResult<ApiEndpointRespVO> getApiEndpoint(@RequestParam("id") Long id) {
ApiEndpointDO apiEndpoint = apiEndpointService.getApiEndpoint(id); ApiEndpointDO apiEndpoint = apiEndpointService.getApiEndpoint(id);
return success(BeanUtils.toBean(apiEndpoint, ApiEndpointRespVO.class)); ApiEndpointRespVO apiEndpointRespVO = BeanUtils.toBean(apiEndpoint, ApiEndpointRespVO.class);
List<IndustryApplicationRespVO> industryApplicationRespVOS = apiEndpointApplicationRelService.getApplicationByApiEndpointId(id);
apiEndpointRespVO.setIndustryApplications(industryApplicationRespVOS);
return success(apiEndpointRespVO);
} }
@GetMapping("/page") @GetMapping("/page")
...@@ -93,8 +126,13 @@ public class ApiEndpointController { ...@@ -93,8 +126,13 @@ public class ApiEndpointController {
@Operation(summary = "获得API 接口") @Operation(summary = "获得API 接口")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint:query')") @PreAuthorize("@ss.hasPermission('apihub:api-endpoint:query')")
public CommonResult<List<ApiEndpointRespVO>> getApiEndpointPage() { public CommonResult<List<ApiEndpointRespVO>> getApiEndpointPage() {
List<ApiEndpointDO> pageResult = apiEndpointService.getApiEndpointList(); List<ApiEndpointDO> apiEndpointDOS = apiEndpointService.getApiEndpointList();
return success(BeanUtils.toBean(pageResult, ApiEndpointRespVO.class)); List<ApiEndpointRespVO> apiEndpointRespVOS = BeanUtils.toBean(apiEndpointDOS, ApiEndpointRespVO.class);
for (ApiEndpointRespVO apiEndpointRespVO : apiEndpointRespVOS) {
List<IndustryApplicationRespVO> industryApplicationRespVOS = apiEndpointApplicationRelService.getApplicationByApiEndpointId(apiEndpointRespVO.getId());
apiEndpointRespVO.setIndustryApplications(industryApplicationRespVOS);
}
return success(apiEndpointRespVOS);
} }
......
package com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo; package com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
...@@ -7,6 +8,8 @@ import org.springframework.format.annotation.DateTimeFormat; ...@@ -7,6 +8,8 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*; import com.alibaba.excel.annotation.*;
import javax.validation.constraints.NotEmpty;
@Schema(description = "管理后台 - API 接口 Response VO") @Schema(description = "管理后台 - API 接口 Response VO")
@Data @Data
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
...@@ -52,4 +55,9 @@ public class ApiEndpointRespVO { ...@@ -52,4 +55,9 @@ public class ApiEndpointRespVO {
@ExcelProperty("创建时间") @ExcelProperty("创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
@Schema(description = "关联行业应用", example = "[{}]")
@ExcelProperty("关联行业应用")
private List<IndustryApplicationRespVO> industryApplications;
} }
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo; package com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
...@@ -39,4 +40,10 @@ public class ApiEndpointSaveReqVO { ...@@ -39,4 +40,10 @@ public class ApiEndpointSaveReqVO {
@Schema(description = "备注", example = "你说的对") @Schema(description = "备注", example = "你说的对")
private String remark; private String remark;
@Schema(description = "关联行业应用", example = "[{}]")
@NotEmpty(message = "行业应用至少填写一个")
private List<IndustryApplicationRespVO> industryApplications;
} }
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.luhu.computility.framework.common.pojo.PageParam;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import static com.luhu.computility.framework.common.pojo.CommonResult.success;
import com.luhu.computility.framework.excel.core.util.ExcelUtils;
import com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog;
import static com.luhu.computility.framework.apilog.core.enums.OperateTypeEnum.*;
import com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo.*;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointapplicationrel.ApiEndpointApplicationRelDO;
import com.luhu.computility.module.apihub.service.apiendpointapplicationrel.ApiEndpointApplicationRelService;
@Tag(name = "管理后台 - 行业应用与接口关联")
@RestController
@RequestMapping("/apihub/api-endpoint-application-rel")
@Validated
public class ApiEndpointApplicationRelController {
@Resource
private ApiEndpointApplicationRelService apiEndpointApplicationRelService;
@PostMapping("/create")
@Operation(summary = "创建行业应用与接口关联")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint-application-rel:create')")
public CommonResult<Long> createApiEndpointApplicationRel(@Valid @RequestBody ApiEndpointApplicationRelSaveReqVO createReqVO) {
return success(apiEndpointApplicationRelService.createApiEndpointApplicationRel(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新行业应用与接口关联")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint-application-rel:update')")
public CommonResult<Boolean> updateApiEndpointApplicationRel(@Valid @RequestBody ApiEndpointApplicationRelSaveReqVO updateReqVO) {
apiEndpointApplicationRelService.updateApiEndpointApplicationRel(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除行业应用与接口关联")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint-application-rel:delete')")
public CommonResult<Boolean> deleteApiEndpointApplicationRel(@RequestParam("id") Long id) {
apiEndpointApplicationRelService.deleteApiEndpointApplicationRel(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除行业应用与接口关联")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint-application-rel:delete')")
public CommonResult<Boolean> deleteApiEndpointApplicationRelList(@RequestParam("ids") List<Long> ids) {
apiEndpointApplicationRelService.deleteApiEndpointApplicationRelListByIds(ids);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得行业应用与接口关联")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint-application-rel:query')")
public CommonResult<ApiEndpointApplicationRelRespVO> getApiEndpointApplicationRel(@RequestParam("id") Long id) {
ApiEndpointApplicationRelDO apiEndpointApplicationRel = apiEndpointApplicationRelService.getApiEndpointApplicationRel(id);
return success(BeanUtils.toBean(apiEndpointApplicationRel, ApiEndpointApplicationRelRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得行业应用与接口关联分页")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint-application-rel:query')")
public CommonResult<PageResult<ApiEndpointApplicationRelRespVO>> getApiEndpointApplicationRelPage(@Valid ApiEndpointApplicationRelPageReqVO pageReqVO) {
PageResult<ApiEndpointApplicationRelDO> pageResult = apiEndpointApplicationRelService.getApiEndpointApplicationRelPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ApiEndpointApplicationRelRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出行业应用与接口关联 Excel")
@PreAuthorize("@ss.hasPermission('apihub:api-endpoint-application-rel:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportApiEndpointApplicationRelExcel(@Valid ApiEndpointApplicationRelPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ApiEndpointApplicationRelDO> list = apiEndpointApplicationRelService.getApiEndpointApplicationRelPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "行业应用与接口关联.xls", "数据", ApiEndpointApplicationRelRespVO.class,
BeanUtils.toBean(list, ApiEndpointApplicationRelRespVO.class));
}
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo;
import lombok.*;
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 java.time.LocalDateTime;
import static com.luhu.computility.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 行业应用与接口关联分页 Request VO")
@Data
public class ApiEndpointApplicationRelPageReqVO extends PageParam {
@Schema(description = "行业应用ID,关联 industry_application.id", example = "3247")
private Long industryApplicationId;
@Schema(description = "接口ID,关联 apihub_api_endpoint.id", example = "18744")
private Long apiEndpointId;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 行业应用与接口关联 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ApiEndpointApplicationRelRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25217")
@ExcelProperty("主键")
private Long id;
@Schema(description = "行业应用ID,关联 industry_application.id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3247")
@ExcelProperty("行业应用ID,关联 industry_application.id")
private Long industryApplicationId;
@Schema(description = "接口ID,关联 apihub_api_endpoint.id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18744")
@ExcelProperty("接口ID,关联 apihub_api_endpoint.id")
private Long apiEndpointId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 行业应用与接口关联新增/修改 Request VO")
@Data
public class ApiEndpointApplicationRelSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25217")
private Long id;
@Schema(description = "行业应用ID,关联 industry_application.id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3247")
@NotNull(message = "行业应用ID,关联 industry_application.id不能为空")
private Long industryApplicationId;
@Schema(description = "接口ID,关联 apihub_api_endpoint.id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18744")
@NotNull(message = "接口ID,关联 apihub_api_endpoint.id不能为空")
private Long apiEndpointId;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.admin.apiorder; package com.luhu.computility.module.apihub.controller.admin.apiorder;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.UserApiUsageSaveReqVO; import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.UserApiUsageSaveReqVO;
import com.luhu.computility.module.apihub.enums.ApiOrderPayStatus;
import com.luhu.computility.module.apihub.enums.ApiOrderStatus;
import com.luhu.computility.module.apihub.service.userapiusage.UserApiUsageService; import com.luhu.computility.module.apihub.service.userapiusage.UserApiUsageService;
import com.luhu.computility.module.pay.api.notify.dto.PayOrderNotifyReqDTO; import com.luhu.computility.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -95,8 +98,16 @@ public class ApiOrderController { ...@@ -95,8 +98,16 @@ public class ApiOrderController {
@Operation(summary = "获得api订单分页") @Operation(summary = "获得api订单分页")
@PreAuthorize("@ss.hasPermission('apihub:api-order:query')") @PreAuthorize("@ss.hasPermission('apihub:api-order:query')")
public CommonResult<PageResult<ApiOrderRespVO>> getApiOrderPage(@Valid ApiOrderPageReqVO pageReqVO) { public CommonResult<PageResult<ApiOrderRespVO>> getApiOrderPage(@Valid ApiOrderPageReqVO pageReqVO) {
PageResult<ApiOrderDO> pageResult = apiOrderService.getApiOrderPage(pageReqVO); PageResult<ApiOrderRespVO> pageResult = apiOrderService.getApiOrderPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ApiOrderRespVO.class));
for (ApiOrderRespVO apiOrderRespVO : pageResult.getList()) {
apiOrderRespVO.setStatusName(ApiOrderStatus.getByValue(apiOrderRespVO.getStatus()).getRemark());
if (!ObjectUtil.isEmpty(apiOrderRespVO.getPayStatus())) {
apiOrderRespVO.setPayStatusName(ApiOrderPayStatus.getByValue(apiOrderRespVO.getPayStatus()).getRemark());
}
}
return success(pageResult);
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
...@@ -106,10 +117,9 @@ public class ApiOrderController { ...@@ -106,10 +117,9 @@ public class ApiOrderController {
public void exportApiOrderExcel(@Valid ApiOrderPageReqVO pageReqVO, public void exportApiOrderExcel(@Valid ApiOrderPageReqVO pageReqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ApiOrderDO> list = apiOrderService.getApiOrderPage(pageReqVO).getList();
// 导出 Excel // 导出 Excel
ExcelUtils.write(response, "api订单.xls", "数据", ApiOrderRespVO.class, ExcelUtils.write(response, "api订单.xls", "数据", ApiOrderRespVO.class,
BeanUtils.toBean(list, ApiOrderRespVO.class)); apiOrderService.getApiOrderPage(pageReqVO).getList());
} }
/** /**
......
...@@ -21,6 +21,10 @@ public class ApiOrderRespVO { ...@@ -21,6 +21,10 @@ public class ApiOrderRespVO {
@ExcelProperty("下单用户ID") @ExcelProperty("下单用户ID")
private Long userId; private Long userId;
@Schema(description = "下单用户手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3895")
@ExcelProperty("下单用户手机号")
private String userMobile;
@Schema(description = "购买的API ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10347") @Schema(description = "购买的API ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10347")
@ExcelProperty("购买的API ID") @ExcelProperty("购买的API ID")
private Long apiId; private Long apiId;
...@@ -56,6 +60,15 @@ public class ApiOrderRespVO { ...@@ -56,6 +60,15 @@ public class ApiOrderRespVO {
@ExcelProperty("订单状态:0=待支付,1=已支付,2=已取消") @ExcelProperty("订单状态:0=待支付,1=已支付,2=已取消")
private Integer status; private Integer status;
@Schema(description = "订单状态值:0=待支付,1=已支付,2=已取消", example = "2")
private String statusName;
@Schema(description = "支付状态", example = "2")
private Integer payStatus;
@Schema(description = "支付状态值", example = "2")
private String payStatusName;
@Schema(description = "支付订单编号", example = "14961") @Schema(description = "支付订单编号", example = "14961")
@ExcelProperty("支付订单编号") @ExcelProperty("支付订单编号")
private Long payOrderId; private Long payOrderId;
......
...@@ -53,6 +53,9 @@ public class ApiOrderSaveReqVO { ...@@ -53,6 +53,9 @@ public class ApiOrderSaveReqVO {
@Schema(description = "订单取消时间") @Schema(description = "订单取消时间")
private LocalDateTime cancelTime; private LocalDateTime cancelTime;
@Schema(description = "支付状态", example = "2")
private Integer payStatus;
@Schema(description = "备注", example = "你说的对") @Schema(description = "备注", example = "你说的对")
private String remark; private String remark;
......
...@@ -8,6 +8,7 @@ import com.luhu.computility.framework.common.util.object.BeanUtils; ...@@ -8,6 +8,7 @@ import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.framework.excel.core.util.ExcelUtils; import com.luhu.computility.framework.excel.core.util.ExcelUtils;
import com.luhu.computility.module.apihub.controller.admin.api.vo.ApiPageReqVO; import com.luhu.computility.module.apihub.controller.admin.api.vo.ApiPageReqVO;
import com.luhu.computility.module.apihub.controller.admin.api.vo.ApiRespVO; import com.luhu.computility.module.apihub.controller.admin.api.vo.ApiRespVO;
import com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo.ApiEndpointRespVO;
import com.luhu.computility.module.apihub.controller.admin.apipackage.vo.ApiPackageRespVO; import com.luhu.computility.module.apihub.controller.admin.apipackage.vo.ApiPackageRespVO;
import com.luhu.computility.module.apihub.controller.app.api.vo.AppApiPackageRespVO; import com.luhu.computility.module.apihub.controller.app.api.vo.AppApiPackageRespVO;
import com.luhu.computility.module.apihub.controller.app.api.vo.AppApiRespVO; import com.luhu.computility.module.apihub.controller.app.api.vo.AppApiRespVO;
...@@ -16,7 +17,10 @@ import com.luhu.computility.module.apihub.dal.dataobject.apicategory.ApiCategory ...@@ -16,7 +17,10 @@ import com.luhu.computility.module.apihub.dal.dataobject.apicategory.ApiCategory
import com.luhu.computility.module.apihub.dal.dataobject.apipackage.ApiPackageDO; import com.luhu.computility.module.apihub.dal.dataobject.apipackage.ApiPackageDO;
import com.luhu.computility.module.apihub.service.api.ApiService; import com.luhu.computility.module.apihub.service.api.ApiService;
import com.luhu.computility.module.apihub.service.apicategory.ApiCategoryService; import com.luhu.computility.module.apihub.service.apicategory.ApiCategoryService;
import com.luhu.computility.module.apihub.service.apiendpointapplicationrel.ApiEndpointApplicationRelService;
import com.luhu.computility.module.apihub.service.apiendpointrel.ApiEndpointRelService;
import com.luhu.computility.module.apihub.service.apipackage.ApiPackageService; import com.luhu.computility.module.apihub.service.apipackage.ApiPackageService;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
...@@ -53,6 +57,14 @@ public class AppApiController { ...@@ -53,6 +57,14 @@ public class AppApiController {
@Resource @Resource
private ApiPackageService apiPackageService; private ApiPackageService apiPackageService;
@Resource
private ApiEndpointRelService apiEndpointRelService;
@Resource
private ApiEndpointApplicationRelService apiEndpointApplicationRelService;
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得API信息") @Operation(summary = "获得API信息")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
...@@ -64,6 +76,16 @@ public class AppApiController { ...@@ -64,6 +76,16 @@ public class AppApiController {
apiRespVO.setCategoryName(apiCategory.getName()); apiRespVO.setCategoryName(apiCategory.getName());
List<ApiPackageDO> apiPackageDOS = apiPackageService.selectByApiId(id); List<ApiPackageDO> apiPackageDOS = apiPackageService.selectByApiId(id);
apiRespVO.setApiPackages(BeanUtils.toBean(apiPackageDOS, AppApiPackageRespVO.class)); apiRespVO.setApiPackages(BeanUtils.toBean(apiPackageDOS, AppApiPackageRespVO.class));
List<ApiEndpointRespVO> apiEndpointRespVOS = apiEndpointRelService.getApiEndpointByApiId(id);
for (ApiEndpointRespVO apiEndpointRespVO : apiEndpointRespVOS) {
List<IndustryApplicationRespVO> industryApplicationRespVOS = apiEndpointApplicationRelService.getApplicationByApiEndpointId(apiEndpointRespVO.getId());
apiEndpointRespVO.setIndustryApplications(industryApplicationRespVOS);
}
apiRespVO.setApiEndPoints(apiEndpointRespVOS);
return success(apiRespVO); return success(apiRespVO);
} }
......
...@@ -2,6 +2,8 @@ package com.luhu.computility.module.apihub.controller.app.api.vo; ...@@ -2,6 +2,8 @@ package com.luhu.computility.module.apihub.controller.app.api.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo.ApiEndpointRespVO;
import com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo.ApiEndpointSaveReqVO;
import com.luhu.computility.module.apihub.controller.admin.apipackage.vo.ApiPackageRespVO; import com.luhu.computility.module.apihub.controller.admin.apipackage.vo.ApiPackageRespVO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
...@@ -54,6 +56,9 @@ public class AppApiRespVO { ...@@ -54,6 +56,9 @@ public class AppApiRespVO {
@Schema(description = "套餐包", example = "[{}]") @Schema(description = "套餐包", example = "[{}]")
private List<AppApiPackageRespVO> apiPackages; private List<AppApiPackageRespVO> apiPackages;
@Schema(description = "", example = "[{}]")
private List<ApiEndpointRespVO> apiEndPoints;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间") @ExcelProperty("创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
......
package com.luhu.computility.module.apihub.controller.app.userapiusage;
import com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog;
import com.luhu.computility.framework.common.pojo.CommonResult;
import com.luhu.computility.framework.common.pojo.PageParam;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.framework.excel.core.util.ExcelUtils;
import com.luhu.computility.framework.security.core.util.SecurityFrameworkUtils;
import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.UserApiUsagePageReqVO;
import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.UserApiUsageRespVO;
import com.luhu.computility.module.apihub.controller.app.userapiusage.vo.AppUserApiUsageRespVO;
import com.luhu.computility.module.apihub.dal.dataobject.userapiusage.UserApiUsageDO;
import com.luhu.computility.module.apihub.service.userapiusage.UserApiUsageService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import static com.luhu.computility.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static com.luhu.computility.framework.common.pojo.CommonResult.success;
@Tag(name = "用户端 - 我的资源")
@RestController
@RequestMapping("/apihub/user-api-usage")
@Validated
public class AppUserApiUsageController {
@Resource
private UserApiUsageService userApiUsageService;
@GetMapping("/get")
@Operation(summary = "获得资源管理")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<AppUserApiUsageRespVO> getUserApiUsage(@RequestParam("id") Long id) {
UserApiUsageDO userApiUsage = userApiUsageService.getUserApiUsage(id);
return success(BeanUtils.toBean(userApiUsage, AppUserApiUsageRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得资源管理分页")
public CommonResult<PageResult<AppUserApiUsageRespVO>> getUserApiUsagePage(@Valid UserApiUsagePageReqVO pageReqVO) {
pageReqVO.setUserId(SecurityFrameworkUtils.getLoginUserId());
return success(userApiUsageService.getAppUserApiUsagePage(pageReqVO));
}
@GetMapping("/export-excel")
@Operation(summary = "导出用户API管理 Excel")
@PreAuthorize("@ss.hasPermission('apihub:user-api-usage:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportUserApiUsageExcel(@Valid UserApiUsagePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
// 导出 Excel
ExcelUtils.write(response, "用户API管理.xls", "数据", AppUserApiUsageRespVO.class,
userApiUsageService.getAppUserApiUsagePage(pageReqVO).getList());
}
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.app.userapiusage.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "用户端 - 用户 API 使用统计 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AppUserApiUsageRespVO {
@Schema(description = "记录ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2826")
@ExcelProperty("记录ID")
private Long id;
@Schema(description = "用户手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26592")
@ExcelProperty("用户手机号")
private String userMobile;
@Schema(description = "购买的API 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "10347")
private String apiName;
@Schema(description = "购买的套餐名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private String packageName;
@Schema(description = "套餐最大可用次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private Integer packageTimes;
@Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private Integer packagePrice;
@Schema(description = "套餐有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private Integer packageValidDays;
@Schema(description = "已使用次数", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("已使用次数")
private Integer usedTimes;
@Schema(description = "过期时间")
@ExcelProperty("过期时间")
private LocalDateTime expireTime;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
private String remark;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.controller.app.userapiusage.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 用户 API 使用统计新增/修改 Request VO")
@Data
public class UserApiUsageSaveReqVO {
@Schema(description = "记录ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2826")
private Long id;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26592")
@NotNull(message = "用户ID不能为空")
private Long userId;
@Schema(description = "API ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8522")
@NotNull(message = "API ID不能为空")
private Long apiId;
@Schema(description = "购买的API 名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "10347")
private String apiName;
@Schema(description = "购买的套餐ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
@ExcelProperty("购买的套餐ID")
private Long packageId;
@Schema(description = "购买的套餐名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private String packageName;
@Schema(description = "套餐可用次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private Integer packageTimes;
@Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private Integer packagePrice;
@Schema(description = "套餐有效期", requiredMode = Schema.RequiredMode.REQUIRED, example = "8957")
private Integer packageValidDays;
@Schema(description = "已使用次数", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "已使用次数不能为空")
private Integer usedTimes;
@Schema(description = "过期时间")
private LocalDateTime expireTime;
@Schema(description = "备注", example = "随便")
private String remark;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.dal.dataobject.apiendpointapplicationrel;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.luhu.computility.framework.mybatis.core.dataobject.BaseDO;
/**
* 行业应用与接口关联 DO
*
* @author ljq
*/
@TableName("apihub_api_endpoint_application_rel")
@KeySequence("apihub_api_endpoint_application_rel_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ApiEndpointApplicationRelDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 行业应用ID,关联 industry_application.id
*/
private Long industryApplicationId;
/**
* 接口ID,关联 apihub_api_endpoint.id
*/
private Long apiEndpointId;
}
\ No newline at end of file
package com.luhu.computility.module.apihub.dal.mysql.apiendpointapplicationrel;
import java.util.*;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX;
import com.luhu.computility.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo.ApiEndpointRespVO;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpoint.ApiEndpointDO;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointapplicationrel.ApiEndpointApplicationRelDO;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointrel.ApiEndpointRelDO;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
import com.luhu.computility.module.biz.dal.dataobject.industryapplication.IndustryApplicationDO;
import org.apache.ibatis.annotations.Mapper;
import com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo.*;
/**
* 行业应用与接口关联 Mapper
*
* @author ljq
*/
@Mapper
public interface ApiEndpointApplicationRelMapper extends BaseMapperX<ApiEndpointApplicationRelDO> {
default PageResult<ApiEndpointApplicationRelDO> selectPage(ApiEndpointApplicationRelPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ApiEndpointApplicationRelDO>()
.eqIfPresent(ApiEndpointApplicationRelDO::getIndustryApplicationId, reqVO.getIndustryApplicationId())
.eqIfPresent(ApiEndpointApplicationRelDO::getApiEndpointId, reqVO.getApiEndpointId())
.betweenIfPresent(ApiEndpointApplicationRelDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ApiEndpointApplicationRelDO::getId));
}
default int deleteByApiEndpointId(Long apiEndpointId) {
return delete(new LambdaQueryWrapperX<ApiEndpointApplicationRelDO>()
.eqIfPresent(ApiEndpointApplicationRelDO::getApiEndpointId, apiEndpointId));
}
default List<IndustryApplicationRespVO> getApiEndpointByApiId(Long apiEndpointId) {
return selectJoinList(IndustryApplicationRespVO.class, new MPJLambdaWrapperX<ApiEndpointApplicationRelDO>()
.selectAs(IndustryApplicationDO::getTitle, IndustryApplicationRespVO::getTitle)
.selectAs(ApiEndpointApplicationRelDO::getIndustryApplicationId, IndustryApplicationRespVO::getId)
.leftJoin(IndustryApplicationDO.class, IndustryApplicationDO::getId, ApiEndpointApplicationRelDO::getIndustryApplicationId)
.eqIfPresent(ApiEndpointApplicationRelDO::getApiEndpointId, apiEndpointId)
);
}
}
\ No newline at end of file
...@@ -7,10 +7,12 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; ...@@ -7,10 +7,12 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.luhu.computility.framework.common.pojo.PageResult; import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX; import com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX; import com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX;
import com.luhu.computility.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.luhu.computility.module.apihub.controller.app.apiorder.vo.AppApiOrderPageReqVO; import com.luhu.computility.module.apihub.controller.app.apiorder.vo.AppApiOrderPageReqVO;
import com.luhu.computility.module.apihub.dal.dataobject.api.ApiDO; import com.luhu.computility.module.apihub.dal.dataobject.api.ApiDO;
import com.luhu.computility.module.apihub.dal.dataobject.apicategory.ApiCategoryDO; import com.luhu.computility.module.apihub.dal.dataobject.apicategory.ApiCategoryDO;
import com.luhu.computility.module.apihub.dal.dataobject.apiorder.ApiOrderDO; import com.luhu.computility.module.apihub.dal.dataobject.apiorder.ApiOrderDO;
import com.luhu.computility.module.member.dal.dataobject.user.MemberUserDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.luhu.computility.module.apihub.controller.admin.apiorder.vo.*; import com.luhu.computility.module.apihub.controller.admin.apiorder.vo.*;
...@@ -22,8 +24,11 @@ import com.luhu.computility.module.apihub.controller.admin.apiorder.vo.*; ...@@ -22,8 +24,11 @@ import com.luhu.computility.module.apihub.controller.admin.apiorder.vo.*;
@Mapper @Mapper
public interface ApiOrderMapper extends BaseMapperX<ApiOrderDO> { public interface ApiOrderMapper extends BaseMapperX<ApiOrderDO> {
default PageResult<ApiOrderDO> selectPage(ApiOrderPageReqVO reqVO) { default PageResult<ApiOrderRespVO> selectPage(ApiOrderPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ApiOrderDO>() return selectJoinPage(reqVO, ApiOrderRespVO.class, new MPJLambdaWrapperX<ApiOrderDO>()
.selectAll(ApiOrderDO.class)
.selectAs(MemberUserDO::getMobile, ApiOrderRespVO::getUserMobile)
.leftJoin(MemberUserDO.class, MemberUserDO::getId, ApiOrderDO::getUserId)
.eqIfPresent(ApiOrderDO::getUserId, reqVO.getUserId()) .eqIfPresent(ApiOrderDO::getUserId, reqVO.getUserId())
.eqIfPresent(ApiOrderDO::getApiId, reqVO.getApiId()) .eqIfPresent(ApiOrderDO::getApiId, reqVO.getApiId())
.eqIfPresent(ApiOrderDO::getPackageId, reqVO.getPackageId()) .eqIfPresent(ApiOrderDO::getPackageId, reqVO.getPackageId())
......
...@@ -7,6 +7,7 @@ import com.luhu.computility.framework.common.pojo.PageResult; ...@@ -7,6 +7,7 @@ import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX; import com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX; import com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX;
import com.luhu.computility.framework.mybatis.core.query.MPJLambdaWrapperX; import com.luhu.computility.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.luhu.computility.module.apihub.controller.app.userapiusage.vo.AppUserApiUsageRespVO;
import com.luhu.computility.module.apihub.dal.dataobject.api.ApiDO; import com.luhu.computility.module.apihub.dal.dataobject.api.ApiDO;
import com.luhu.computility.module.apihub.dal.dataobject.apicategory.ApiCategoryDO; import com.luhu.computility.module.apihub.dal.dataobject.apicategory.ApiCategoryDO;
import com.luhu.computility.module.apihub.dal.dataobject.userapiusage.UserApiUsageDO; import com.luhu.computility.module.apihub.dal.dataobject.userapiusage.UserApiUsageDO;
...@@ -29,6 +30,19 @@ public interface UserApiUsageMapper extends BaseMapperX<UserApiUsageDO> { ...@@ -29,6 +30,19 @@ public interface UserApiUsageMapper extends BaseMapperX<UserApiUsageDO> {
.leftJoin(MemberUserDO.class, MemberUserDO::getId,UserApiUsageDO::getUserId) .leftJoin(MemberUserDO.class, MemberUserDO::getId,UserApiUsageDO::getUserId)
.like(!StringUtils.isEmpty(reqVO.getPackageName()), UserApiUsageDO::getPackageName, reqVO.getPackageName()) .like(!StringUtils.isEmpty(reqVO.getPackageName()), UserApiUsageDO::getPackageName, reqVO.getPackageName())
.like(!StringUtils.isEmpty(reqVO.getApiName()), UserApiUsageDO::getApiName, reqVO.getApiName()) .like(!StringUtils.isEmpty(reqVO.getApiName()), UserApiUsageDO::getApiName, reqVO.getApiName())
.like(!StringUtils.isEmpty(reqVO.getUserMobile()), MemberUserDO::getMobile, reqVO.getUserMobile())
.orderByDesc(UserApiUsageDO::getCreateTime));
}
default PageResult<AppUserApiUsageRespVO> selectAppPage(UserApiUsagePageReqVO reqVO) {
return selectJoinPage(reqVO, AppUserApiUsageRespVO.class, new MPJLambdaWrapperX<UserApiUsageDO>()
.selectAll(UserApiUsageDO.class)
.selectAs(MemberUserDO :: getMobile, UserApiUsageRespVO :: getUserMobile)
.leftJoin(MemberUserDO.class, MemberUserDO::getId,UserApiUsageDO::getUserId)
.eqIfPresent(UserApiUsageDO::getUserId, reqVO.getUserId())
.like(!StringUtils.isEmpty(reqVO.getPackageName()), UserApiUsageDO::getPackageName, reqVO.getPackageName())
.like(!StringUtils.isEmpty(reqVO.getApiName()), UserApiUsageDO::getApiName, reqVO.getApiName())
.like(!StringUtils.isEmpty(reqVO.getUserMobile()), MemberUserDO::getMobile, reqVO.getUserMobile())
.orderByDesc(UserApiUsageDO::getCreateTime)); .orderByDesc(UserApiUsageDO::getCreateTime));
} }
......
...@@ -22,4 +22,5 @@ public interface ErrorCodeConstants { ...@@ -22,4 +22,5 @@ public interface ErrorCodeConstants {
ErrorCode API_ENDPOINT_NOT_EXISTS = new ErrorCode(1_010_001_017, "API 接口不存在"); ErrorCode API_ENDPOINT_NOT_EXISTS = new ErrorCode(1_010_001_017, "API 接口不存在");
ErrorCode API_ENDPOINT_REL_NOT_EXISTS = new ErrorCode(1_010_001_018, "API 应用与接口关系不存在"); ErrorCode API_ENDPOINT_REL_NOT_EXISTS = new ErrorCode(1_010_001_018, "API 应用与接口关系不存在");
ErrorCode APP_CREDENTIAL_NOT_EXISTS = new ErrorCode(1_010_001_019, "用户密钥信息不存在"); ErrorCode APP_CREDENTIAL_NOT_EXISTS = new ErrorCode(1_010_001_019, "用户密钥信息不存在");
ErrorCode API_ENDPOINT_APPLICATION_REL_NOT_EXISTS = new ErrorCode(1_010_001_020, "行业应用与接口关联不存在");
} }
package com.luhu.computility.module.apihub.service.apiendpointapplicationrel;
import java.util.*;
import javax.validation.*;
import com.luhu.computility.module.apihub.controller.admin.apiendpoint.vo.ApiEndpointRespVO;
import com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo.*;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointapplicationrel.ApiEndpointApplicationRelDO;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.pojo.PageParam;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
/**
* 行业应用与接口关联 Service 接口
*
* @author ljq
*/
public interface ApiEndpointApplicationRelService {
/**
* 创建行业应用与接口关联
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createApiEndpointApplicationRel(@Valid ApiEndpointApplicationRelSaveReqVO createReqVO);
/**
* 更新行业应用与接口关联
*
* @param updateReqVO 更新信息
*/
void updateApiEndpointApplicationRel(@Valid ApiEndpointApplicationRelSaveReqVO updateReqVO);
/**
* 删除行业应用与接口关联
*
* @param id 编号
*/
void deleteApiEndpointApplicationRel(Long id);
/**
* 删除行业应用与接口关联(根据接口id)
*
* @param apiEndpointId 编号
*/
void deleteApiEndpointApplicationRelByApiEndpointId(Long apiEndpointId);
/**
* 获得行业应用 (根据接口id)
*
* @param apiEndpointId
* @return 行业应用
*/
List<IndustryApplicationRespVO> getApplicationByApiEndpointId(Long apiEndpointId);
/**
* 批量删除行业应用与接口关联
*
* @param ids 编号
*/
void deleteApiEndpointApplicationRelListByIds(List<Long> ids);
/**
* 获得行业应用与接口关联
*
* @param id 编号
* @return 行业应用与接口关联
*/
ApiEndpointApplicationRelDO getApiEndpointApplicationRel(Long id);
/**
* 获得行业应用与接口关联分页
*
* @param pageReqVO 分页查询
* @return 行业应用与接口关联分页
*/
PageResult<ApiEndpointApplicationRelDO> getApiEndpointApplicationRelPage(ApiEndpointApplicationRelPageReqVO pageReqVO);
}
\ No newline at end of file
package com.luhu.computility.module.apihub.service.apiendpointapplicationrel;
import cn.hutool.core.collection.CollUtil;
import com.luhu.computility.module.biz.controller.admin.industryapplication.vo.IndustryApplicationRespVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.luhu.computility.module.apihub.controller.admin.apiendpointapplicationrel.vo.*;
import com.luhu.computility.module.apihub.dal.dataobject.apiendpointapplicationrel.ApiEndpointApplicationRelDO;
import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.pojo.PageParam;
import com.luhu.computility.framework.common.util.object.BeanUtils;
import com.luhu.computility.module.apihub.dal.mysql.apiendpointapplicationrel.ApiEndpointApplicationRelMapper;
import static com.luhu.computility.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.luhu.computility.framework.common.util.collection.CollectionUtils.convertList;
import static com.luhu.computility.framework.common.util.collection.CollectionUtils.diffList;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.*;
/**
* 行业应用与接口关联 Service 实现类
*
* @author ljq
*/
@Service
@Validated
public class ApiEndpointApplicationRelServiceImpl implements ApiEndpointApplicationRelService {
@Resource
private ApiEndpointApplicationRelMapper apiEndpointApplicationRelMapper;
@Override
public Long createApiEndpointApplicationRel(ApiEndpointApplicationRelSaveReqVO createReqVO) {
// 插入
ApiEndpointApplicationRelDO apiEndpointApplicationRel = BeanUtils.toBean(createReqVO, ApiEndpointApplicationRelDO.class);
apiEndpointApplicationRelMapper.insert(apiEndpointApplicationRel);
// 返回
return apiEndpointApplicationRel.getId();
}
@Override
public void updateApiEndpointApplicationRel(ApiEndpointApplicationRelSaveReqVO updateReqVO) {
// 校验存在
validateApiEndpointApplicationRelExists(updateReqVO.getId());
// 更新
ApiEndpointApplicationRelDO updateObj = BeanUtils.toBean(updateReqVO, ApiEndpointApplicationRelDO.class);
apiEndpointApplicationRelMapper.updateById(updateObj);
}
@Override
public void deleteApiEndpointApplicationRel(Long id) {
// 校验存在
validateApiEndpointApplicationRelExists(id);
// 删除
apiEndpointApplicationRelMapper.deleteById(id);
}
@Override
public void deleteApiEndpointApplicationRelListByIds(List<Long> ids) {
// 删除
apiEndpointApplicationRelMapper.deleteByIds(ids);
}
private void validateApiEndpointApplicationRelExists(Long id) {
if (apiEndpointApplicationRelMapper.selectById(id) == null) {
throw exception(API_ENDPOINT_APPLICATION_REL_NOT_EXISTS);
}
}
@Override
public ApiEndpointApplicationRelDO getApiEndpointApplicationRel(Long id) {
return apiEndpointApplicationRelMapper.selectById(id);
}
@Override
public PageResult<ApiEndpointApplicationRelDO> getApiEndpointApplicationRelPage(ApiEndpointApplicationRelPageReqVO pageReqVO) {
return apiEndpointApplicationRelMapper.selectPage(pageReqVO);
}
@Override
public void deleteApiEndpointApplicationRelByApiEndpointId(Long apiEndpointId) {
// 删除
apiEndpointApplicationRelMapper.deleteByApiEndpointId(apiEndpointId);
}
@Override
public List<IndustryApplicationRespVO> getApplicationByApiEndpointId(Long apiEndpointId) {
return apiEndpointApplicationRelMapper.getApiEndpointByApiId(apiEndpointId);
}
}
\ No newline at end of file
...@@ -63,7 +63,7 @@ public interface ApiOrderService { ...@@ -63,7 +63,7 @@ public interface ApiOrderService {
* @param pageReqVO 分页查询 * @param pageReqVO 分页查询
* @return api订单分页 * @return api订单分页
*/ */
PageResult<ApiOrderDO> getApiOrderPage(ApiOrderPageReqVO pageReqVO); PageResult<ApiOrderRespVO> getApiOrderPage(ApiOrderPageReqVO pageReqVO);
/** /**
......
...@@ -130,7 +130,7 @@ public class ApiOrderServiceImpl implements ApiOrderService { ...@@ -130,7 +130,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
} }
@Override @Override
public PageResult<ApiOrderDO> getApiOrderPage(ApiOrderPageReqVO pageReqVO) { public PageResult<ApiOrderRespVO> getApiOrderPage(ApiOrderPageReqVO pageReqVO) {
return apiOrderMapper.selectPage(pageReqVO); return apiOrderMapper.selectPage(pageReqVO);
} }
......
...@@ -3,6 +3,7 @@ package com.luhu.computility.module.apihub.service.userapiusage; ...@@ -3,6 +3,7 @@ package com.luhu.computility.module.apihub.service.userapiusage;
import java.util.*; import java.util.*;
import javax.validation.*; import javax.validation.*;
import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.*; import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.*;
import com.luhu.computility.module.apihub.controller.app.userapiusage.vo.AppUserApiUsageRespVO;
import com.luhu.computility.module.apihub.dal.dataobject.userapiusage.UserApiUsageDO; import com.luhu.computility.module.apihub.dal.dataobject.userapiusage.UserApiUsageDO;
import com.luhu.computility.framework.common.pojo.PageResult; import com.luhu.computility.framework.common.pojo.PageResult;
import com.luhu.computility.framework.common.pojo.PageParam; import com.luhu.computility.framework.common.pojo.PageParam;
...@@ -59,4 +60,13 @@ public interface UserApiUsageService { ...@@ -59,4 +60,13 @@ public interface UserApiUsageService {
*/ */
PageResult<UserApiUsageRespVO> getUserApiUsagePage(UserApiUsagePageReqVO pageReqVO); PageResult<UserApiUsageRespVO> getUserApiUsagePage(UserApiUsagePageReqVO pageReqVO);
/**
* 获得用户 API 使用统计分页
*
* @param pageReqVO 分页查询
* @return 用户 API 使用统计分页
*/
PageResult<AppUserApiUsageRespVO> getAppUserApiUsagePage(UserApiUsagePageReqVO pageReqVO);
} }
\ No newline at end of file
package com.luhu.computility.module.apihub.service.userapiusage; package com.luhu.computility.module.apihub.service.userapiusage;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.luhu.computility.module.apihub.controller.app.userapiusage.vo.AppUserApiUsageRespVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -82,4 +83,9 @@ public class UserApiUsageServiceImpl implements UserApiUsageService { ...@@ -82,4 +83,9 @@ public class UserApiUsageServiceImpl implements UserApiUsageService {
return userApiUsageMapper.selectPage(pageReqVO); return userApiUsageMapper.selectPage(pageReqVO);
} }
@Override
public PageResult<AppUserApiUsageRespVO> getAppUserApiUsagePage(UserApiUsagePageReqVO pageReqVO) {
return userApiUsageMapper.selectAppPage(pageReqVO);
}
} }
\ No newline at end of file
...@@ -96,6 +96,16 @@ public class IndustryApplicationController { ...@@ -96,6 +96,16 @@ public class IndustryApplicationController {
return success(respResult); return success(respResult);
} }
@GetMapping("/list")
@Operation(summary = "获得行业应用分页")
@PreAuthorize("@ss.hasPermission('biz:industry-application:query')")
public CommonResult<List<IndustryApplicationRespVO>> getIndustryApplicationList() {
List<IndustryApplicationDO> list = industryApplicationService.getAllIndustryApplication(); // 新增Service方法
List<IndustryApplicationRespVO> result = BeanUtils.toBean(list, IndustryApplicationRespVO.class);
return success(result);
}
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出行业应用 Excel") @Operation(summary = "导出行业应用 Excel")
@PreAuthorize("@ss.hasPermission('biz:industry-application:export')") @PreAuthorize("@ss.hasPermission('biz:industry-application:export')")
......
package com.luhu.computility.module.external.utils;
import cn.hutool.crypto.digest.DigestUtil;
import java.util.UUID;
/**
* @version 1.0
* @Author ljq
* @Date 2025/9/9
* @注释
*/
public class AppKeyGenerator {
/**
* 生成 appId(简单唯一标识)
*/
public static String generateAppId() {
// 使用 UUID 去掉“-”,保证长度唯一
return UUID.randomUUID().toString().replace("-", "");
}
/**
* 生成 appSecret(保密,建议加密存储)
*/
public static String generateAppSecret() {
// 随机 UUID + 当前时间戳 + SHA256 加密
String raw = UUID.randomUUID().toString() + System.currentTimeMillis();
return DigestUtil.sha256Hex(raw);
}
public static void main(String[] args) {
String appId = generateAppId();
String appSecret = generateAppSecret();
System.out.println("appId: " + appId);
System.out.println("appSecret: " + appSecret);
}
}
package com.luhu.computility.module.external.utils;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
/**
* @version 1.0
* @Author ljq
* @Date 2025/9/9
* @注释
*/
public class AppSecretEncrypt {
// AES 对称密钥(32 字节,必须安全存储)
private static final String SECRET_KEY = "yoursupersecretkey123456789012";
private static final AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, SECRET_KEY.getBytes());
/** 加密 appSecret 存入数据库 */
public static String encrypt(String appSecret) {
return aes.encryptHex(appSecret);
}
/** 解密数据库中的 appSecret,用于签名校验 */
public static String decrypt(String encryptedAppSecret) {
return aes.decryptStr(encryptedAppSecret);
}
public static void main(String[] args) {
String appSecret = "my-secret-value";
String encrypted = encrypt(appSecret);
String decrypted = decrypt(encrypted);
System.out.println("原始: " + appSecret);
System.out.println("加密后: " + encrypted);
System.out.println("解密后: " + decrypted);
}
}
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