chore: initialize qiming workspace repository
This commit is contained in:
@@ -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>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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 = "关联用户组ID(JSON数组)")
|
||||
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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user