diff --git a/sql/wfc_user_db/wfc_user_db.sql b/sql/wfc_user_db/wfc_user_db.sql index 67f3e5f..e57e2be 100644 --- a/sql/wfc_user_db/wfc_user_db.sql +++ b/sql/wfc_user_db/wfc_user_db.sql @@ -190,6 +190,7 @@ DROP TABLE IF EXISTS `u_client`; CREATE TABLE `u_client` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Client ID', `user_id` bigint(20) NULL DEFAULT NULL COMMENT 'User ID link to u_user', + `site_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'Site ID', `client_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'Client Name', `client_device_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'Client device type', `client_mac` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'Client mac address', @@ -771,7 +772,7 @@ CREATE TABLE `u_package` ( `rate_limit_id` bigint(20) DEFAULT NULL COMMENT '带宽限速ID', `package_name` varchar(64) DEFAULT NULL COMMENT '套餐名称', `period_num` int(11) DEFAULT NULL COMMENT '有效期数', - `period_type` varchar(32) DEFAULT NULL COMMENT '有效期类型', + `period_type` tinyint(4) DEFAULT NULL COMMENT '有效期类型', `price` decimal(18,4) DEFAULT NULL COMMENT '价格', `traffic` bigint(20) DEFAULT NULL COMMENT '流量', `duration` bigint(20) DEFAULT NULL COMMENT '时长', @@ -806,22 +807,59 @@ CREATE TABLE `u_rate_limit` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户平台-带宽限速表'; +DROP TABLE IF EXISTS `u_order`; CREATE TABLE `u_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` bigint(20) DEFAULT NULL COMMENT '用户ID', `package_id` bigint(20) DEFAULT NULL COMMENT '套餐ID', `payment_id` bigint(20) DEFAULT NULL COMMENT '支付ID', `order_no` varchar(64) DEFAULT NULL COMMENT '订单编号', - `type` int(11) DEFAULT NULL COMMENT '订单类型(0套餐 1充值)', + `type` tinyint(4) DEFAULT NULL COMMENT '订单类型(0套餐 1充值)', `order_amount` decimal(18,4) DEFAULT NULL COMMENT '订单金额', - `status` int(11) DEFAULT NULL COMMENT '订单状态(0待支付 1已支付 2已取消)', + `status` tinyint(4) DEFAULT NULL COMMENT '订单状态(0待支付 1已支付 2已取消)', `del_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', `create_by` bigint(20) DEFAULT NULL COMMENT '创建人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='用户平台-订单表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户平台-订单表'; + +DROP TABLE IF EXISTS u_account; +CREATE TABLE `u_account` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `user_id` bigint(20) DEFAULT NULL COMMENT '用户ID', + `balance` decimal(18,4) DEFAULT NULL COMMENT '余额', + `package_id` bigint(20) DEFAULT NULL COMMENT '套餐ID', + `start_time` datetime DEFAULT NULL COMMENT '开始时间', + `end_time` datetime DEFAULT NULL COMMENT '结束时间', + `traffic_used` bigint(20) DEFAULT NULL COMMENT '流量已使用', + `duration_used` bigint(20) DEFAULT NULL COMMENT '时长已使用', + `client_num_used` int(11) DEFAULT NULL COMMENT '在线设备数已使用', + `package_name` varchar(64) DEFAULT NULL COMMENT '套餐名称', + `period_num` int(11) DEFAULT NULL COMMENT '有效期数', + `period_type` tinyint(4) DEFAULT NULL COMMENT '有效期类型', + `price` decimal(18,4) DEFAULT NULL COMMENT '价格', + `traffic` bigint(20) DEFAULT NULL COMMENT '流量', + `duration` bigint(20) DEFAULT NULL COMMENT '时长', + `client_num` int(11) DEFAULT NULL COMMENT '在线设备数', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + `rate_limit_enable` tinyint(1) DEFAULT '0' COMMENT '带宽是否限制', + `traffic_enable` tinyint(1) DEFAULT '0' COMMENT '流量是否限制', + `duration_enable` tinyint(1) DEFAULT '0' COMMENT '时长是否限制', + `client_num_enable` tinyint(1) DEFAULT '0' COMMENT '在线设备数是否限制', + `rate_limit_name` varchar(32) DEFAULT NULL COMMENT '限速名称', + `down_limit` bigint(20) DEFAULT NULL COMMENT '下行限速', + `down_limit_enable` tinyint(1) DEFAULT '0' COMMENT '下行限速启用', + `up_limit` bigint(20) DEFAULT NULL COMMENT '上行限速', + `up_limit_enable` tinyint(1) DEFAULT '0' COMMENT '上行限速启用', + `del_flag` tinyint(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + `create_by` bigint(20) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) DEFAULT NULL COMMENT '更新人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户平台-账户表'; SET FOREIGN_KEY_CHECKS = 1; diff --git a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/bo/UClientBo.java b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/bo/UClientBo.java index f1062e5..6f1425c 100644 --- a/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/bo/UClientBo.java +++ b/wfc-api/wfc-api-user/src/main/java/org/wfc/user/api/domain/bo/UClientBo.java @@ -27,6 +27,8 @@ public class UClientBo implements Serializable { private String clientName; + private String siteId; + private String clientDeviceType; private String clientMac; diff --git a/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java b/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java index 92a3f22..c396a36 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java +++ b/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java @@ -55,6 +55,7 @@ public class TokenController { userInfo.setWanFiRedirectParams(wanFiRedirectParams); // 记录设备所属用户信息 UClientBo uClientBo = UClientBo.builder().clientMac(wanFiRedirectParams.getClientMac()) + .siteId(wanFiRedirectParams.getSite()) .userId(userInfo.getUser().getUserId()).build(); remoteUUserService.recordClientUser(uClientBo); // 获取登录token diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/UAccountController.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/UAccountController.java new file mode 100644 index 0000000..3ba78f6 --- /dev/null +++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/controller/UAccountController.java @@ -0,0 +1,69 @@ +package org.wfc.user.controller; + +import cn.hutool.core.collection.CollUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.wfc.common.core.web.controller.BaseController; +import org.wfc.common.core.web.domain.AjaxResult; +import org.wfc.common.core.web.page.TableDataInfo; +import org.wfc.user.domain.UAccount; +import org.wfc.user.service.IUAccountService; + +import java.util.List; + +/** + *
+ * 用户平台-账户表 前端控制器 + *
+ * + * @author sys + * @since 2024-12-23 + */ +@RestController +@RequestMapping("/user/uAccount") +public class UAccountController extends BaseController { + + @Autowired + private IUAccountService uAccountService; + + @GetMapping("/page") + public TableDataInfo page(UAccount uAccount) { + startPage(); + List+ * 用户平台-账户表 + *
+ * + * @author sys + * @since 2024-12-23 + */ +@Getter +@Setter +@TableName("u_account") +@Schema(name = "UAccount", description = "用户平台-账户表") +public class UAccount extends BaseData { + + private static final long serialVersionUID = 1L; + + @Schema(description = "用户ID") + private Long userId; + + @Schema(description = "余额") + private BigDecimal balance; + + @Schema(description = "套餐ID") + private Long packageId; + + @Schema(description = "开始时间") + private Date startTime; + + @Schema(description = "结束时间") + private Date endTime; + + @Schema(description = "流量已使用") + private Long trafficUsed; + + @Schema(description = "时长已使用") + private Long durationUsed; + + @Schema(description = "在线设备数已使用") + private Integer clientNumUsed; + + @Schema(description = "套餐名称") + private String packageName; + + @Schema(description = "有效期数") + private Integer periodNum; + + @Schema(description = "有效期类型") + private Integer periodType; + + @Schema(description = "价格") + private BigDecimal price; + + @Schema(description = "流量") + private Long traffic; + + @Schema(description = "时长") + private Long duration; + + @Schema(description = "在线设备数") + private Integer clientNum; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "带宽是否限制") + private Boolean rateLimitEnable; + + @Schema(description = "流量是否限制") + private Boolean trafficEnable; + + @Schema(description = "时长是否限制") + private Boolean durationEnable; + + @Schema(description = "在线设备数是否限制") + private Boolean clientNumEnable; + + @Schema(description = "限速名称") + private String rateLimitName; + + @Schema(description = "下行限速") + private Long downLimit; + + @Schema(description = "下行限速启用") + private Boolean downLimitEnable; + + @Schema(description = "上行限速") + private Long upLimit; + + @Schema(description = "上行限速启用") + private Boolean upLimitEnable; +} diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UClient.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UClient.java index e8c6661..19eb5b7 100644 --- a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UClient.java +++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UClient.java @@ -31,6 +31,9 @@ public class UClient extends BaseData { @Schema(description = "User ID link to u_user") private Long userId; + @Schema(description = "Site ID") + private String siteId; + @Schema(description = "Client Name") private String clientName; diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UPackage.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UPackage.java index 28d2004..1659de1 100644 --- a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UPackage.java +++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/UPackage.java @@ -35,7 +35,7 @@ public class UPackage extends BaseData { private Integer periodNum; @Schema(description = "有效期类型") - private String periodType; + private Integer periodType; @Schema(description = "价格") private BigDecimal price; diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/OrderStatusEnum.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/OrderStatusEnum.java new file mode 100644 index 0000000..911016b --- /dev/null +++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/OrderStatusEnum.java @@ -0,0 +1,22 @@ +package org.wfc.user.domain.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description: 订单状态枚举 + * @author: cyc + * @since: 2024-12-23 + */ +@Getter +@AllArgsConstructor +public enum OrderStatusEnum { + + UNPAID(0, "未支付"), + PAID(1, "已支付"), + CANCELLED(2, "已取消"); + + private final Integer code; + private final String desc; + +} diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/OrderTypeEnum.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/OrderTypeEnum.java new file mode 100644 index 0000000..b043770 --- /dev/null +++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/OrderTypeEnum.java @@ -0,0 +1,20 @@ +package org.wfc.user.domain.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description: 订单类型枚举 + * @author: cyc + * @since: 2024-12-23 + */ +@Getter +@AllArgsConstructor +public enum OrderTypeEnum { + + PACKAGE(0, "套餐"), + RECHARGE(1, "充值"); + + private final Integer code; + private final String desc; +} diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/PeriodTypeEnum.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/PeriodTypeEnum.java new file mode 100644 index 0000000..b2b8319 --- /dev/null +++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/domain/constant/PeriodTypeEnum.java @@ -0,0 +1,35 @@ +package org.wfc.user.domain.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description: 有效期类型枚举 + * @author: cyc + * @since: 2024-12-23 + */ +@Getter +@AllArgsConstructor +public enum PeriodTypeEnum { + + HOUR(0, "小时"), + DAY(1, "天"), + MONTH(2, "月"), + YEAR(3, "年") + ; + + private final Integer code; + private final String desc; + + public static PeriodTypeEnum getByCode(Integer code) { + if (code == null) { + return null; + } + for (PeriodTypeEnum periodTypeEnum : PeriodTypeEnum.values()) { + if (periodTypeEnum.getCode().equals(code)) { + return periodTypeEnum; + } + } + return null; + } +} diff --git a/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/UAccountMapper.java b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/UAccountMapper.java new file mode 100644 index 0000000..8bc4e2e --- /dev/null +++ b/wfc-modules/wfc-modules-user/src/main/java/org/wfc/user/mapper/UAccountMapper.java @@ -0,0 +1,16 @@ +package org.wfc.user.mapper; + +import org.wfc.user.domain.UAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *+ * 用户平台-账户表 Mapper 接口 + *
+ * + * @author sys + * @since 2024-12-23 + */ +public interface UAccountMapper extends BaseMapper+ * 用户平台-账户表 服务类 + *
+ * + * @author sys + * @since 2024-12-23 + */ +public interface IUAccountService extends IService+ * 用户平台-账户表 服务实现类 + *
+ * + * @author sys + * @since 2024-12-23 + */ +@Service +public class UAccountServiceImpl extends ServiceImpl
@@ -17,4 +40,101 @@ import org.springframework.stereotype.Service;
@Service
public class UOrderServiceImpl extends ServiceImpl