chore: initialize qiming workspace repository

This commit is contained in:
Codex
2026-05-29 14:22:48 +08:00
commit bfd67a0f2c
10750 changed files with 1885711 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.xspaceagi</groupId>
<artifactId>app-platform-subscription</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>app-platform-subscription-sdk</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.xspaceagi</groupId>
<artifactId>app-platform-subscription-spec</artifactId>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,39 @@
package com.xspaceagi.subscription.sdk.dto;
import com.alibaba.fastjson2.JSON;
import com.xspaceagi.subscription.spec.enums.BizTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Map;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
@Schema(description = "创建订阅请求")
public class CreateSubscriptionRequest implements Serializable {
@Schema(description = "租户ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long tenantId;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long userId;
@Schema(description = "计划ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long planId;
@Schema(description = "业务类型")
private BizTypeEnum bizType;
@Schema(description = "扩展信息,记录订阅快照等")
private Map<String, Object> extra;
public String getExtraJsonString() {
return extra == null ? null : JSON.toJSONString(extra);
}
}

View File

@@ -0,0 +1,87 @@
package com.xspaceagi.subscription.sdk.dto;
import com.xspaceagi.subscription.spec.enums.BizTypeEnum;
import com.xspaceagi.subscription.spec.enums.PlanPeriodEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Schema(description = "订阅计划信息")
public class PlanDTO implements Serializable {
@Schema(description = "计划ID")
private Long id;
@Schema(description = "租户ID")
private Long tenantId;
@Schema(description = "计划名称")
private String name;
@Schema(description = "计划描述")
private String description;
@Schema(description = "价格")
private BigDecimal price;
@Schema(description = "首次订阅价格")
private BigDecimal firstPrice;
@Schema(description = "周期1-月3-季度12-年")
private PlanPeriodEnum period;
@Schema(description = "每月赠送积分")
private BigDecimal creditAmount;
@Schema(description = "可调用次数,-1表示不限制")
private Integer callLimitCount;
@Schema(description = "是否仅为功能订阅true时资源消耗费用另计")
private Boolean functionOnly;
//从全局配置读取,无需字段存储
@Schema(description = "每日登录赠送积分")
private BigDecimal dailyGiftCreditAmount;
@Schema(description = "是否热门")
private Boolean isHot;
@Schema(description = "状态0-下线1-上线")
private Integer status;
@Schema(description = "业务类型SYSTEM-系统AGENT-智能体SKILL-技能")
private BizTypeEnum bizType;
@Schema(description = "业务对象ID非SYSTEM时必填")
private String bizId;
@Schema(description = "关联用户组IDJSON数组")
private List<Long> groupIds;
@Schema(description = "扩展字段JSON")
private Map<String, Object> extra;
@Schema(description = "排序,越小越靠前,前端支持拖拽")
private Integer sort;
@Schema(description = "创建时间")
private Date created;
@Schema(description = "修改时间")
private Date modified;
@Schema(description = "订阅计划的权限分组项")
private List<PlanItemGroupDTO> itemGroups;
}

View File

@@ -0,0 +1,48 @@
package com.xspaceagi.subscription.sdk.dto;
import com.xspaceagi.system.sdk.service.dto.MergedGroupDataPermissionDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
public class PlanItemGroupDTO {
@Schema(description = "分组描述")
private String name;
@Schema(description = "分组描述")
private String description;
@Schema(description = "分组类型")
private GroupType groupType;
@Schema(description = "分组项")
private List<ItemDTO> items;
@Schema(description = "有权限访问的开放 API, groupType为API时有效")
private List<MergedGroupDataPermissionDto.OpenApiConfig> openApiConfigs;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public static class ItemDTO {
@Schema(description = "名称")
private String name;
@Schema(description = "描述")
private String description;
@Schema(description = "图标")
private String icon;
@Schema(description = "是否选中")
private boolean selected;
}
public enum GroupType {
BASE,
MODEL,
AGENT,
APP,
KB,
API,
}
}

View File

@@ -0,0 +1,33 @@
package com.xspaceagi.subscription.sdk.dto;
import com.xspaceagi.subscription.spec.enums.BizTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Schema(description = "订阅计划查询请求")
public class PlanQueryRequest implements Serializable {
@Schema(description = "租户ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long tenantId;
@Schema(description = "业务类型过滤")
private BizTypeEnum bizType;
@Schema(description = "业务对象ID过滤")
private String bizId;
@Schema(description = "状态过滤0-下线1-上线")
private Integer status;
@Schema(description = "关键词搜索(名称)")
private String keyword;
}

View File

@@ -0,0 +1,30 @@
package com.xspaceagi.subscription.sdk.dto;
import com.xspaceagi.subscription.spec.enums.BizTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
@Schema(description = "用户订阅查询请求")
public class SubscriptionQueryRequest implements Serializable {
@Schema(description = "租户ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long tenantId;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long userId;
@Schema(description = "业务类型过滤")
private BizTypeEnum bizType;
@Schema(description = "业务ID过滤")
private String bizId;
@Schema(description = "状态过滤0-生效中1-已过期2-已取消")
private Integer status;
@Schema(description = "是否展示计划详细描述列表")
private boolean showPlanDescItems;
}

View File

@@ -0,0 +1,33 @@
package com.xspaceagi.subscription.sdk.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
@Schema(description = "订阅统计")
public class SubscriptionStatsDTO implements Serializable {
@Schema(description = "总订阅数")
private Long totalCount;
@Schema(description = "今日新订阅数")
private Long todayCount;
@Schema(description = "本月新订阅数")
private Long monthCount;
@Schema(description = "订阅用户列表")
private List<UserSubscriptionDTO> subscribers;
@Schema(description = "总记录数(分页)")
private Long total;
@Schema(description = "当前页码")
private Integer pageNum;
@Schema(description = "每页数量")
private Integer pageSize;
}

View File

@@ -0,0 +1,24 @@
package com.xspaceagi.subscription.sdk.dto;
import com.xspaceagi.subscription.spec.enums.BizTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
@Schema(description = "订阅统计查询请求")
public class SubscriptionStatsQueryRequest implements Serializable {
@Schema(description = "业务类型", requiredMode = Schema.RequiredMode.REQUIRED)
private BizTypeEnum bizType;
@Schema(description = "业务对象ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String bizId;
@Schema(description = "页码从1开始")
private Integer pageNum = 1;
@Schema(description = "每页数量")
private Integer pageSize = 20;
}

View File

@@ -0,0 +1,90 @@
package com.xspaceagi.subscription.sdk.dto;
import com.xspaceagi.subscription.spec.enums.BizTypeEnum;
import com.xspaceagi.subscription.spec.enums.PlanPeriodEnum;
import com.xspaceagi.subscription.spec.enums.SubscriptionStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
@Data
@Schema(description = "用户订阅信息")
public class UserSubscriptionDTO implements Serializable {
@Schema(description = "订阅记录ID")
private Long id;
@Schema(description = "租户ID")
private Long tenantId;
@Schema(description = "用户ID")
private Long userId;
@Schema(description = "计划ID")
private Long planId;
@Schema(description = "计划名称")
private String planName;
private BizTypeEnum bizType;
private String bizId;
@Schema(description = "业务对象名称")
private String bizName;
@Schema(description = "图标")
private String icon;
@Schema(description = "周期1-月3-季度12-年")
private PlanPeriodEnum period;
@Schema(description = "开始时间")
private Date startTime;
@Schema(description = "结束时间,为空时为买断,永不过期")
private Date endTime;
@Schema(description = "状态0-生效中1-已过期2-已取消")
private SubscriptionStatusEnum status;
@Schema(description = "计划订阅时的快照")
private PlanDTO plan;
@Schema(description = "已使用调用次数")
private Integer callUsedCount;
@Schema(description = "下次重置时间(每月重置)")
private Date nextResetTime;
@Schema(description = "扩展字段,记录订阅快照等")
private Map<String, Object> extra;
@Schema(description = "创建时间")
private Date created;
@Schema(description = "修改时间")
private Date modified;
@Schema(description = "订阅者信息")
private Subscriber subscriber;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class Subscriber {
@Schema(description = "订阅者ID")
private Long id;
@Schema(description = "订阅者名称")
private String name;
@Schema(description = "订阅者头像")
private String avatar;
}
}

View File

@@ -0,0 +1,50 @@
package com.xspaceagi.subscription.sdk.rpc;
import com.xspaceagi.subscription.sdk.dto.*;
import java.util.List;
public interface ISubscriptionRpcService {
/**
* 查询用户当前订阅信息(可指定业务类型)
*/
List<UserSubscriptionDTO> getUserSubscriptions(SubscriptionQueryRequest request);
/**
* 获取用户当前系统订阅
*/
UserSubscriptionDTO getUserCurrentSystemSubscription(Long userId);
/**
* 创建用户订阅(内部判断新建、续期、升级、变更计划)
*/
UserSubscriptionDTO createSubscription(CreateSubscriptionRequest request);
/**
* 创建订阅计划
*/
Long createPlan(PlanDTO dto);
/**
* 修改订阅计划
*/
boolean updatePlan(PlanDTO dto);
/**
* 下架订阅计划
*/
boolean offlinePlan(Long tenantId, Long planId);
PlanDTO getPlan(Long planId);
/**
* 查询订阅计划列表
*/
List<PlanDTO> listPlans(PlanQueryRequest request);
/**
* 增加订阅调用次数(自动判断是否需要月度重置)
*/
int incrementCallCount(Long tenantId, Long subscriptionId, Integer count);
}