feat(system): 新增代理租户套餐管理模块
- 新增 TenantAgencyPackage 实体、Mapper、Service 及 Controller 全套后端 - 新增租户余额消费接口及 VO(预留实现) - 移除废弃的社交登录相关错误码,补充代理套餐错误码 TENANT_AGENCY_PACKAGE_NOT_EXISTS - 配置文件增加 system_tenant_agency_package 缓存忽略 共 15 个文件,+578 −7 行,复杂度:非常复杂
This commit is contained in:
@@ -0,0 +1,103 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenantagencypackage.TenantAgencyPackageDO;
|
||||||
|
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.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||||
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage.vo.*;
|
||||||
|
import cn.iocoder.yudao.module.system.service.tenantagencypackage.TenantAgencyPackageService;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 代理租户套餐")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/system/tenant-agency-package")
|
||||||
|
@Validated
|
||||||
|
public class TenantAgencyPackageController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TenantAgencyPackageService tenantAgencyPackageService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建代理租户套餐")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:tenant-agency-package:create')")
|
||||||
|
public CommonResult<Long> createTenantAgencyPackage(@Valid @RequestBody TenantAgencyPackageSaveReqVO createReqVO) {
|
||||||
|
return success(tenantAgencyPackageService.createTenantAgencyPackage(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新代理租户套餐")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:tenant-agency-package:update')")
|
||||||
|
public CommonResult<Boolean> updateTenantAgencyPackage(@Valid @RequestBody TenantAgencyPackageSaveReqVO updateReqVO) {
|
||||||
|
tenantAgencyPackageService.updateTenantAgencyPackage(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除代理租户套餐")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:tenant-agency-package:delete')")
|
||||||
|
public CommonResult<Boolean> deleteTenantAgencyPackage(@RequestParam("id") Long id) {
|
||||||
|
tenantAgencyPackageService.deleteTenantAgencyPackage(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete-list")
|
||||||
|
@Parameter(name = "ids", description = "编号", required = true)
|
||||||
|
@Operation(summary = "批量删除代理租户套餐")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:tenant-agency-package:delete')")
|
||||||
|
public CommonResult<Boolean> deleteTenantAgencyPackageList(@RequestParam("ids") List<Long> ids) {
|
||||||
|
tenantAgencyPackageService.deleteTenantAgencyPackageListByIds(ids);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得代理租户套餐")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:tenant-agency-package:query')")
|
||||||
|
public CommonResult<TenantAgencyPackageRespVO> getTenantAgencyPackage(@RequestParam("id") Long id) {
|
||||||
|
TenantAgencyPackageDO tenantAgencyPackage = tenantAgencyPackageService.getTenantAgencyPackage(id);
|
||||||
|
return success(BeanUtils.toBean(tenantAgencyPackage, TenantAgencyPackageRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得代理租户套餐分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:tenant-agency-package:query')")
|
||||||
|
public CommonResult<PageResult<TenantAgencyPackageRespVO>> getTenantAgencyPackagePage(@Valid TenantAgencyPackagePageReqVO pageReqVO) {
|
||||||
|
PageResult<TenantAgencyPackageDO> pageResult = tenantAgencyPackageService.getTenantAgencyPackagePage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, TenantAgencyPackageRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出代理租户套餐 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:tenant-agency-package:export')")
|
||||||
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
|
public void exportTenantAgencyPackageExcel(@Valid TenantAgencyPackagePageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<TenantAgencyPackageDO> list = tenantAgencyPackageService.getTenantAgencyPackagePage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "代理租户套餐.xls", "数据", TenantAgencyPackageRespVO.class,
|
||||||
|
BeanUtils.toBean(list, TenantAgencyPackageRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage.vo;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 代理租户套餐分页 Request VO")
|
||||||
|
@Data
|
||||||
|
public class TenantAgencyPackagePageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "套餐名", example = "芋艿")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Schema(description = "租户状态(0正常 1停用)", example = "2")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你猜")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "关联的菜单编号")
|
||||||
|
private String menuIds;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
@Schema(description = "套餐天数")
|
||||||
|
private Integer days;
|
||||||
|
|
||||||
|
@Schema(description = "套餐价格", example = "22890")
|
||||||
|
private Integer price;
|
||||||
|
|
||||||
|
@Schema(description = "爬主播客户端 0 关闭 1 开启")
|
||||||
|
private Integer hostslClient;
|
||||||
|
|
||||||
|
@Schema(description = "爬大哥客户端 0 关闭 1 开启")
|
||||||
|
private Integer brotherClient;
|
||||||
|
|
||||||
|
@Schema(description = "AI 客户端 0 关闭 1 开启")
|
||||||
|
private Integer aiClient;
|
||||||
|
|
||||||
|
@Schema(description = "套餐类型", example = "2")
|
||||||
|
private Integer packageType;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage.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 TenantAgencyPackageRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20125")
|
||||||
|
@ExcelProperty("套餐编号")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "套餐名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
|
||||||
|
@ExcelProperty("套餐名")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Schema(description = "租户状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||||
|
@ExcelProperty("租户状态(0正常 1停用)")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你猜")
|
||||||
|
@ExcelProperty("备注")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "关联的菜单编号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@ExcelProperty("关联的菜单编号")
|
||||||
|
private String menuIds;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
@Schema(description = "套餐天数", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@ExcelProperty("套餐天数")
|
||||||
|
private Integer days;
|
||||||
|
|
||||||
|
@Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "22890")
|
||||||
|
@ExcelProperty("套餐价格")
|
||||||
|
private Integer price;
|
||||||
|
|
||||||
|
@Schema(description = "爬主播客户端 0 关闭 1 开启")
|
||||||
|
@ExcelProperty("爬主播客户端 0 关闭 1 开启")
|
||||||
|
private Integer hostslClient;
|
||||||
|
|
||||||
|
@Schema(description = "爬大哥客户端 0 关闭 1 开启")
|
||||||
|
@ExcelProperty("爬大哥客户端 0 关闭 1 开启")
|
||||||
|
private Integer brotherClient;
|
||||||
|
|
||||||
|
@Schema(description = "AI 客户端 0 关闭 1 开启")
|
||||||
|
@ExcelProperty("AI 客户端 0 关闭 1 开启")
|
||||||
|
private Integer aiClient;
|
||||||
|
|
||||||
|
@Schema(description = "套餐类型", example = "2")
|
||||||
|
@ExcelProperty("套餐类型")
|
||||||
|
private Integer packageType;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage.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 TenantAgencyPackageSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20125")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "套餐名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
|
||||||
|
@NotEmpty(message = "套餐名不能为空")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Schema(description = "租户状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||||
|
@NotNull(message = "租户状态(0正常 1停用)不能为空")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "备注", example = "你猜")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@Schema(description = "关联的菜单编号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotEmpty(message = "关联的菜单编号不能为空")
|
||||||
|
private String menuIds;
|
||||||
|
|
||||||
|
@Schema(description = "套餐天数", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "套餐天数不能为空")
|
||||||
|
private Integer days;
|
||||||
|
|
||||||
|
@Schema(description = "套餐价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "22890")
|
||||||
|
@NotNull(message = "套餐价格不能为空")
|
||||||
|
private Integer price;
|
||||||
|
|
||||||
|
@Schema(description = "爬主播客户端 0 关闭 1 开启")
|
||||||
|
private Integer hostslClient;
|
||||||
|
|
||||||
|
@Schema(description = "爬大哥客户端 0 关闭 1 开启")
|
||||||
|
private Integer brotherClient;
|
||||||
|
|
||||||
|
@Schema(description = "AI 客户端 0 关闭 1 开启")
|
||||||
|
private Integer aiClient;
|
||||||
|
|
||||||
|
@Schema(description = "套餐类型", example = "2")
|
||||||
|
private Integer packageType;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -133,4 +133,6 @@ public class TenantBalanceController {
|
|||||||
PageResult<TenantBalanceRespVO> tenantBalancePage = tenantBalanceService.getSelfSubordinateTenantBalancePage(pageReqVO);
|
PageResult<TenantBalanceRespVO> tenantBalancePage = tenantBalanceService.getSelfSubordinateTenantBalancePage(pageReqVO);
|
||||||
return success(BeanUtils.toBean(tenantBalancePage, TenantBalanceRespVO.class));
|
return success(BeanUtils.toBean(tenantBalancePage, TenantBalanceRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.tenantbalance.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author: ziin
|
||||||
|
* @date: 2025/11/24 15:32
|
||||||
|
*/
|
||||||
|
@Schema(description = "管理后台 - 租户余额消费")
|
||||||
|
@Data
|
||||||
|
public class TenantBalanceConsumptionReqVO {
|
||||||
|
|
||||||
|
@Schema( description = "套餐编号")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.dataobject.tenantagencypackage;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代理租户套餐 DO
|
||||||
|
*
|
||||||
|
* @author 总后台
|
||||||
|
*/
|
||||||
|
@TableName("system_tenant_agency_package")
|
||||||
|
@KeySequence("system_tenant_agency_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TenantAgencyPackageDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 套餐编号
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 套餐名
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* 租户状态(0正常 1停用)
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 关联的菜单编号
|
||||||
|
*/
|
||||||
|
private String menuIds;
|
||||||
|
/**
|
||||||
|
* 套餐天数
|
||||||
|
*/
|
||||||
|
private Integer days;
|
||||||
|
/**
|
||||||
|
* 套餐价格
|
||||||
|
*/
|
||||||
|
private Integer price;
|
||||||
|
/**
|
||||||
|
* 爬主播客户端 0 关闭 1 开启
|
||||||
|
*/
|
||||||
|
private Integer hostslClient;
|
||||||
|
/**
|
||||||
|
* 爬大哥客户端 0 关闭 1 开启
|
||||||
|
*/
|
||||||
|
private Integer brotherClient;
|
||||||
|
/**
|
||||||
|
* AI 客户端 0 关闭 1 开启
|
||||||
|
*/
|
||||||
|
private Integer aiClient;
|
||||||
|
/**
|
||||||
|
* 套餐类型
|
||||||
|
*/
|
||||||
|
private Integer packageType;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.mysql.tenantagencypackage;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenantagencypackage.TenantAgencyPackageDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage.vo.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代理租户套餐 Mapper
|
||||||
|
*
|
||||||
|
* @author 总后台
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface TenantAgencyPackageMapper extends BaseMapperX<TenantAgencyPackageDO> {
|
||||||
|
|
||||||
|
default PageResult<TenantAgencyPackageDO> selectPage(TenantAgencyPackagePageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<TenantAgencyPackageDO>()
|
||||||
|
.likeIfPresent(TenantAgencyPackageDO::getName, reqVO.getName())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getStatus, reqVO.getStatus())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getRemark, reqVO.getRemark())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getMenuIds, reqVO.getMenuIds())
|
||||||
|
.betweenIfPresent(TenantAgencyPackageDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getDays, reqVO.getDays())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getPrice, reqVO.getPrice())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getHostslClient, reqVO.getHostslClient())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getBrotherClient, reqVO.getBrotherClient())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getAiClient, reqVO.getAiClient())
|
||||||
|
.eqIfPresent(TenantAgencyPackageDO::getPackageType, reqVO.getPackageType())
|
||||||
|
.orderByDesc(TenantAgencyPackageDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -136,19 +136,12 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode TENANT_BALANCE_TRANSFER_ERROR_TARGET_NOT_SUBORDINATE = new ErrorCode(1_003_017_012, "转账目标租户不是当前租户的下级");
|
ErrorCode TENANT_BALANCE_TRANSFER_ERROR_TARGET_NOT_SUBORDINATE = new ErrorCode(1_003_017_012, "转账目标租户不是当前租户的下级");
|
||||||
|
|
||||||
|
|
||||||
|
// ================= 租户套餐 1-003-018-000 ==================
|
||||||
|
ErrorCode TENANT_AGENCY_PACKAGE_NOT_EXISTS = new ErrorCode(1_003_018_000, "代理租户套餐不存在");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ========== 社交用户 1-002-018-000 ==========
|
|
||||||
ErrorCode SOCIAL_USER_AUTH_FAILURE = new ErrorCode(1_002_018_000, "社交授权失败,原因是:{}");
|
|
||||||
ErrorCode SOCIAL_USER_NOT_FOUND = new ErrorCode(1_002_018_001, "社交授权失败,找不到对应的用户");
|
|
||||||
|
|
||||||
ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_PHONE_CODE_ERROR = new ErrorCode(1_002_018_200, "获得手机号失败");
|
|
||||||
ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_QRCODE_ERROR = new ErrorCode(1_002_018_201, "获得小程序码失败");
|
|
||||||
ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_TEMPLATE_ERROR = new ErrorCode(1_002_018_202, "获得小程序订阅消息模版失败");
|
|
||||||
ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_SUBSCRIBE_MESSAGE_ERROR = new ErrorCode(1_002_018_203, "发送小程序订阅消息失败");
|
|
||||||
ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_ORDER_UPLOAD_SHIPPING_INFO_ERROR = new ErrorCode(1_002_018_204, "上传微信小程序发货信息失败");
|
|
||||||
ErrorCode SOCIAL_CLIENT_WEIXIN_MINI_APP_ORDER_NOTIFY_CONFIRM_RECEIVE_ERROR = new ErrorCode(1_002_018_205, "上传微信小程序订单收货信息失败");
|
|
||||||
ErrorCode SOCIAL_CLIENT_NOT_EXISTS = new ErrorCode(1_002_018_210, "社交客户端不存在");
|
|
||||||
ErrorCode SOCIAL_CLIENT_UNIQUE = new ErrorCode(1_002_018_211, "社交客户端已存在配置");
|
|
||||||
|
|
||||||
// ========== OAuth2 客户端 1-002-020-000 =========
|
// ========== OAuth2 客户端 1-002-020-000 =========
|
||||||
ErrorCode OAUTH2_CLIENT_NOT_EXISTS = new ErrorCode(1_002_020_000, "OAuth2 客户端不存在");
|
ErrorCode OAUTH2_CLIENT_NOT_EXISTS = new ErrorCode(1_002_020_000, "OAuth2 客户端不存在");
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.service.tenantagencypackage;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage.vo.*;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenantagencypackage.TenantAgencyPackageDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代理租户套餐 Service 接口
|
||||||
|
*
|
||||||
|
* @author 总后台
|
||||||
|
*/
|
||||||
|
public interface TenantAgencyPackageService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建代理租户套餐
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createTenantAgencyPackage(@Valid TenantAgencyPackageSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新代理租户套餐
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateTenantAgencyPackage(@Valid TenantAgencyPackageSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除代理租户套餐
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteTenantAgencyPackage(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除代理租户套餐
|
||||||
|
*
|
||||||
|
* @param ids 编号
|
||||||
|
*/
|
||||||
|
void deleteTenantAgencyPackageListByIds(List<Long> ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得代理租户套餐
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 代理租户套餐
|
||||||
|
*/
|
||||||
|
TenantAgencyPackageDO getTenantAgencyPackage(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得代理租户套餐分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 代理租户套餐分页
|
||||||
|
*/
|
||||||
|
PageResult<TenantAgencyPackageDO> getTenantAgencyPackagePage(TenantAgencyPackagePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.service.tenantagencypackage;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.tenantagencypackage.TenantAgencyPackageDO;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.tenantagencypackage.vo.*;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.dal.mysql.tenantagencypackage.TenantAgencyPackageMapper;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代理租户套餐 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 总后台
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class TenantAgencyPackageServiceImpl implements TenantAgencyPackageService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TenantAgencyPackageMapper tenantAgencyPackageMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createTenantAgencyPackage(TenantAgencyPackageSaveReqVO createReqVO) {
|
||||||
|
// 插入
|
||||||
|
TenantAgencyPackageDO tenantAgencyPackage = BeanUtils.toBean(createReqVO, TenantAgencyPackageDO.class);
|
||||||
|
tenantAgencyPackageMapper.insert(tenantAgencyPackage);
|
||||||
|
// 返回
|
||||||
|
return tenantAgencyPackage.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateTenantAgencyPackage(TenantAgencyPackageSaveReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateTenantAgencyPackageExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
TenantAgencyPackageDO updateObj = BeanUtils.toBean(updateReqVO, TenantAgencyPackageDO.class);
|
||||||
|
tenantAgencyPackageMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteTenantAgencyPackage(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateTenantAgencyPackageExists(id);
|
||||||
|
// 删除
|
||||||
|
tenantAgencyPackageMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteTenantAgencyPackageListByIds(List<Long> ids) {
|
||||||
|
// 校验存在
|
||||||
|
validateTenantAgencyPackageExists(ids);
|
||||||
|
// 删除
|
||||||
|
tenantAgencyPackageMapper.deleteByIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateTenantAgencyPackageExists(List<Long> ids) {
|
||||||
|
List<TenantAgencyPackageDO> list = tenantAgencyPackageMapper.selectByIds(ids);
|
||||||
|
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
|
||||||
|
throw exception(TENANT_AGENCY_PACKAGE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateTenantAgencyPackageExists(Long id) {
|
||||||
|
if (tenantAgencyPackageMapper.selectById(id) == null) {
|
||||||
|
throw exception(TENANT_AGENCY_PACKAGE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TenantAgencyPackageDO getTenantAgencyPackage(Long id) {
|
||||||
|
return tenantAgencyPackageMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<TenantAgencyPackageDO> getTenantAgencyPackagePage(TenantAgencyPackagePageReqVO pageReqVO) {
|
||||||
|
return tenantAgencyPackageMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -66,4 +66,6 @@ public interface TenantBalanceService {
|
|||||||
TenantBalanceDO getSelfBalance();
|
TenantBalanceDO getSelfBalance();
|
||||||
|
|
||||||
PageResult<TenantBalanceRespVO> getSelfSubordinateTenantBalancePage(@Valid TenantBalancePageReqVO pageReqVO);
|
PageResult<TenantBalanceRespVO> getSelfSubordinateTenantBalancePage(@Valid TenantBalancePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
Boolean consumption(@Valid TenantBalanceConsumptionReqVO consumptionReqVO);
|
||||||
}
|
}
|
||||||
@@ -294,4 +294,25 @@ public class TenantBalanceServiceImpl implements TenantBalanceService {
|
|||||||
return new PageResult<>(tenantBalanceRespVOIPage.getRecords(),tenantBalanceRespVOIPage.getTotal());
|
return new PageResult<>(tenantBalanceRespVOIPage.getRecords(),tenantBalanceRespVOIPage.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean consumption(TenantBalanceConsumptionReqVO consumptionReqVO) {
|
||||||
|
|
||||||
|
Long tenantId = TenantContextHolder.getTenantId();
|
||||||
|
// TenantBalanceDO tenantBalance = tenantBalanceMapper.selectById(tenantId);
|
||||||
|
// if (tenantBalance == null) {
|
||||||
|
// throw exception(TENANT_WALLET_NOT_EXISTS);
|
||||||
|
// }
|
||||||
|
// if (tenantBalance.getBalance() < consumptionReqVO.getAmount()) {
|
||||||
|
// throw exception(TENANT_WALLET_NOT_ENOUGH);
|
||||||
|
// }
|
||||||
|
// Integer updateCount = tenantBalanceMapper.updateBalanceWithVersion(tenantId, -consumptionReqVO.getAmount(), tenantBalance.getVersion());
|
||||||
|
// if (updateCount == 0) {
|
||||||
|
// throw exception(TENANT_BALANCE_CONSUMPTION_OPERATION_ERROR);
|
||||||
|
// }
|
||||||
|
return true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.tenantagencypackage.TenantAgencyPackageMapper">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||||
|
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||||
|
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||||
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
|
-->
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -195,6 +195,7 @@ yudao:
|
|||||||
- ai_language
|
- ai_language
|
||||||
- system_tenant_balance
|
- system_tenant_balance
|
||||||
- system_tenant_points
|
- system_tenant_points
|
||||||
|
- system_tenant_agency_package
|
||||||
ignore-caches:
|
ignore-caches:
|
||||||
- user_role_ids
|
- user_role_ids
|
||||||
- permission_menu_ids
|
- permission_menu_ids
|
||||||
|
|||||||
Reference in New Issue
Block a user