From 3731aefec8be7f2e51f7c4652fa5a323b76ae023 Mon Sep 17 00:00:00 2001 From: caiyuchao Date: Thu, 13 Feb 2025 15:13:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=9A=E5=A5=97=E9=A4=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/wfc_user_db/wfc_user_db.sql | 38 ++++++++ .../controller/UAccountPackageController.java | 69 +++++++++++++++ .../org/wfc/user/domain/UAccountPackage.java | 87 +++++++++++++++++++ .../user/mapper/UAccountPackageMapper.java | 16 ++++ .../user/service/IUAccountPackageService.java | 16 ++++ .../impl/UAccountPackageServiceImpl.java | 20 +++++ .../user/service/impl/UOrderServiceImpl.java | 50 +++++++---- .../mapper/user/UAccountPackageMapper.xml | 5 ++ 8 files changed, 284 insertions(+), 17 deletions(-) create mode 100644 wfc-modules/wfc-user/src/main/java/org/wfc/user/controller/UAccountPackageController.java create mode 100644 wfc-modules/wfc-user/src/main/java/org/wfc/user/domain/UAccountPackage.java create mode 100644 wfc-modules/wfc-user/src/main/java/org/wfc/user/mapper/UAccountPackageMapper.java create mode 100644 wfc-modules/wfc-user/src/main/java/org/wfc/user/service/IUAccountPackageService.java create mode 100644 wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountPackageServiceImpl.java create mode 100644 wfc-modules/wfc-user/src/main/resources/mapper/user/UAccountPackageMapper.xml diff --git a/sql/wfc_user_db/wfc_user_db.sql b/sql/wfc_user_db/wfc_user_db.sql index c5ec571..80fc841 100644 --- a/sql/wfc_user_db/wfc_user_db.sql +++ b/sql/wfc_user_db/wfc_user_db.sql @@ -66,6 +66,44 @@ CREATE TABLE `u_account` ( -- Records of u_account -- ---------------------------- +-- ---------------------------- +-- Table structure for u_account_package +-- ---------------------------- +DROP TABLE IF EXISTS `u_account_package`; +CREATE TABLE `u_account_package` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `account_id` bigint(20) NULL DEFAULT NULL COMMENT '账户ID', + `package_id` bigint(20) NULL DEFAULT NULL COMMENT '套餐ID', + `traffic` bigint(20) NULL DEFAULT NULL COMMENT '流量', + `duration` bigint(20) NULL DEFAULT NULL COMMENT '时长', + `client_num` int(11) NULL DEFAULT NULL COMMENT '在线设备数', + `expired_time` datetime NULL DEFAULT NULL COMMENT '失效时间', + `package_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '套餐名称', + `period_num` int(11) NULL DEFAULT NULL COMMENT '有效期数', + `period_type` tinyint(4) NULL DEFAULT NULL COMMENT '有效期类型', + `price` decimal(18, 4) NULL DEFAULT NULL COMMENT '价格', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `rate_limit_enable` tinyint(1) NULL DEFAULT 0 COMMENT '带宽是否限制', + `traffic_enable` tinyint(1) NULL DEFAULT 0 COMMENT '流量是否限制', + `duration_enable` tinyint(1) NULL DEFAULT 0 COMMENT '时长是否限制', + `client_num_enable` tinyint(1) NULL DEFAULT 0 COMMENT '在线设备数是否限制', + `rate_limit_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '限速名称', + `down_limit` bigint(20) NULL DEFAULT NULL COMMENT '下行限速', + `down_limit_enable` tinyint(1) NULL DEFAULT 0 COMMENT '下行限速启用', + `up_limit` bigint(20) NULL DEFAULT NULL COMMENT '上行限速', + `up_limit_enable` tinyint(1) NULL DEFAULT 0 COMMENT '上行限速启用', + `del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标志(0存在 1删除)', + `create_by` bigint(20) NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` bigint(20) NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户平台-账户套餐表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of u_account_package +-- ---------------------------- + -- ---------------------------- -- Table structure for u_balance -- ---------------------------- diff --git a/wfc-modules/wfc-user/src/main/java/org/wfc/user/controller/UAccountPackageController.java b/wfc-modules/wfc-user/src/main/java/org/wfc/user/controller/UAccountPackageController.java new file mode 100644 index 0000000..8f93800 --- /dev/null +++ b/wfc-modules/wfc-user/src/main/java/org/wfc/user/controller/UAccountPackageController.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.UAccountPackage; +import org.wfc.user.service.IUAccountPackageService; + +import java.util.List; + +/** + *

+ * 用户平台-账户套餐表 前端控制器 + *

+ * + * @author sys + * @since 2025-02-10 + */ +@RestController +@RequestMapping("/user/uAccountPackage") +public class UAccountPackageController extends BaseController { + + @Autowired + private IUAccountPackageService uAccountPackageService; + + @GetMapping("/page") + public TableDataInfo page(UAccountPackage uAccountPackage) { + startPage(); + List list = uAccountPackageService.list(); + return getDataTable(list); + } + + @GetMapping("/list") + public AjaxResult list(UAccountPackage uAccountPackage) { + List list = uAccountPackageService.list(); + return success(list); + } + + @GetMapping(value = "/{id}") + public AjaxResult getById(@PathVariable("id") Long id) { + return success(uAccountPackageService.getById(id)); + } + + @PostMapping + public AjaxResult add(@RequestBody UAccountPackage uAccountPackage) { + return toAjax(uAccountPackageService.save(uAccountPackage)); + } + + @PutMapping + public AjaxResult edit(@RequestBody UAccountPackage uAccountPackage) { + return toAjax(uAccountPackageService.updateById(uAccountPackage)); + } + + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(uAccountPackageService.removeByIds(CollUtil.newArrayList(ids))); + } + +} diff --git a/wfc-modules/wfc-user/src/main/java/org/wfc/user/domain/UAccountPackage.java b/wfc-modules/wfc-user/src/main/java/org/wfc/user/domain/UAccountPackage.java new file mode 100644 index 0000000..44fecf5 --- /dev/null +++ b/wfc-modules/wfc-user/src/main/java/org/wfc/user/domain/UAccountPackage.java @@ -0,0 +1,87 @@ +package org.wfc.user.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import org.wfc.common.mybatis.domain.BaseData; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 用户平台-账户套餐表 + *

+ * + * @author sys + * @since 2025-02-10 + */ +@Getter +@Setter +@TableName("u_account_package") +@Schema(name = "UAccountPackage", description = "用户平台-账户套餐表") +public class UAccountPackage extends BaseData { + + private static final long serialVersionUID = 1L; + + @Schema(description = "账户ID") + private Long accountId; + + @Schema(description = "套餐ID") + private Long packageId; + + @Schema(description = "流量") + private Long traffic; + + @Schema(description = "时长") + private Long duration; + + @Schema(description = "在线设备数") + private Integer clientNum; + + @Schema(description = "失效时间") + private Date expiredTime; + + @Schema(description = "套餐名称") + private String packageName; + + @Schema(description = "有效期数") + private Integer periodNum; + + @Schema(description = "有效期类型") + private Integer periodType; + + @Schema(description = "价格") + private BigDecimal price; + + @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-user/src/main/java/org/wfc/user/mapper/UAccountPackageMapper.java b/wfc-modules/wfc-user/src/main/java/org/wfc/user/mapper/UAccountPackageMapper.java new file mode 100644 index 0000000..57686eb --- /dev/null +++ b/wfc-modules/wfc-user/src/main/java/org/wfc/user/mapper/UAccountPackageMapper.java @@ -0,0 +1,16 @@ +package org.wfc.user.mapper; + +import org.wfc.user.domain.UAccountPackage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 用户平台-账户套餐表 Mapper 接口 + *

+ * + * @author sys + * @since 2025-02-10 + */ +public interface UAccountPackageMapper extends BaseMapper { + +} diff --git a/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/IUAccountPackageService.java b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/IUAccountPackageService.java new file mode 100644 index 0000000..0b2fd40 --- /dev/null +++ b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/IUAccountPackageService.java @@ -0,0 +1,16 @@ +package org.wfc.user.service; + +import org.wfc.user.domain.UAccountPackage; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 用户平台-账户套餐表 服务类 + *

+ * + * @author sys + * @since 2025-02-10 + */ +public interface IUAccountPackageService extends IService { + +} diff --git a/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountPackageServiceImpl.java b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountPackageServiceImpl.java new file mode 100644 index 0000000..2bdbdec --- /dev/null +++ b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountPackageServiceImpl.java @@ -0,0 +1,20 @@ +package org.wfc.user.service.impl; + +import org.wfc.user.domain.UAccountPackage; +import org.wfc.user.mapper.UAccountPackageMapper; +import org.wfc.user.service.IUAccountPackageService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 用户平台-账户套餐表 服务实现类 + *

+ * + * @author sys + * @since 2025-02-10 + */ +@Service +public class UAccountPackageServiceImpl extends ServiceImpl implements IUAccountPackageService { + +} diff --git a/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UOrderServiceImpl.java b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UOrderServiceImpl.java index 5004c10..7229d67 100644 --- a/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UOrderServiceImpl.java +++ b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UOrderServiceImpl.java @@ -11,11 +11,13 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.wfc.common.core.exception.ServiceException; import org.wfc.common.security.utils.SecurityUtils; import org.wfc.user.api.IWifiApi; import org.wfc.user.api.omada.domain.convert.OmadaConvert; import org.wfc.user.api.omada.domain.dto.ClientRateLimitSettingDto; import org.wfc.user.domain.UAccount; +import org.wfc.user.domain.UAccountPackage; import org.wfc.user.domain.UBill; import org.wfc.user.domain.UBillRule; import org.wfc.user.domain.UClient; @@ -25,6 +27,7 @@ import org.wfc.user.domain.URateLimit; import org.wfc.user.domain.constant.OrderStatusEnum; import org.wfc.user.domain.constant.OrderTypeEnum; import org.wfc.user.domain.constant.PeriodTypeEnum; +import org.wfc.user.mapper.UAccountPackageMapper; import org.wfc.user.mapper.UBillMapper; import org.wfc.user.mapper.UBillRuleMapper; import org.wfc.user.mapper.UOrderMapper; @@ -69,14 +72,16 @@ public class UOrderServiceImpl extends ServiceImpl impleme @Autowired private UBillRuleMapper billRuleMapper; + @Autowired + private UAccountPackageMapper accountPackageMapper; + @Autowired private IWifiApi wifiApi; @Override @Transactional(rollbackFor = Exception.class) public boolean paySuccess(Long orderId) { - // 支付成功回调(预留) - + // 支付成功回调 // 更新当前订单状态为已支付 UOrder order = this.getById(orderId); if (OrderStatusEnum.PAID.getCode().equals(order.getStatus())) { @@ -110,16 +115,14 @@ public class UOrderServiceImpl extends ServiceImpl impleme } if (OrderTypeEnum.PACKAGE.getCode().equals(order.getType())) { // 套餐 - callbackPackage(order, account); - account.setTrafficUsed(0L); - account.setDurationUsed(0L); - account.setClientNumUsed(0); + callbackPackage(order, account, false); } else if (OrderTypeEnum.RECHARGE.getCode().equals(order.getType())) { // 充值 // 更新账户余额 account.setBalance(order.getOrderAmount().add(Optional.ofNullable(account.getBalance()).orElse(BigDecimal.ZERO))); } account.setId(accountId); + accountService.saveOrUpdate(account); // 授权当前用户的所有设备访问wifi @@ -139,26 +142,39 @@ public class UOrderServiceImpl extends ServiceImpl impleme return true; } - private void callbackPackage(UOrder order, UAccount account) { + private void callbackPackage(UOrder order, UAccount account, boolean isValid) { if (ObjectUtil.isNull(order.getPackageId())) { return; } + UAccountPackage accountPackage = new UAccountPackage(); + UPackage uPackage = packageService.getById(order.getPackageId()); Boolean rateLimitEnable = uPackage.getRateLimitEnable(); rateLimitEnable = ObjectUtil.isNotNull(uPackage.getRateLimitId()) ? rateLimitEnable : false; if (rateLimitEnable) { URateLimit rateLimit = rateLimitService.getById(uPackage.getRateLimitId()); - BeanUtils.copyProperties(rateLimit, account); + if (isValid) { + BeanUtils.copyProperties(rateLimit, accountPackage); + } else { + BeanUtils.copyProperties(rateLimit, account); + } + } + + if (isValid) { + BeanUtils.copyProperties(uPackage, accountPackage); + accountPackage.setPackageId(order.getPackageId()); + accountPackageMapper.insert(accountPackage); + } else { + BeanUtils.copyProperties(uPackage, account); + account.setPackageId(order.getPackageId()); + account.setTrafficUsed(0L); + account.setDurationUsed(0L); + account.setClientNumUsed(0); + Date current = new Date(); + DateTime endTime = getEndTime(uPackage, current); + account.setStartTime(current); + account.setEndTime(endTime); } - BeanUtils.copyProperties(uPackage, account); - account.setPackageId(order.getPackageId()); - account.setTrafficUsed(0L); - account.setDurationUsed(0L); - account.setClientNumUsed(0); - Date current = new Date(); - DateTime endTime = getEndTime(uPackage, current); - account.setStartTime(current); - account.setEndTime(endTime); } private static DateTime getEndTime(UPackage uPackage, Date current) { diff --git a/wfc-modules/wfc-user/src/main/resources/mapper/user/UAccountPackageMapper.xml b/wfc-modules/wfc-user/src/main/resources/mapper/user/UAccountPackageMapper.xml new file mode 100644 index 0000000..a195e9d --- /dev/null +++ b/wfc-modules/wfc-user/src/main/resources/mapper/user/UAccountPackageMapper.xml @@ -0,0 +1,5 @@ + + + + +