From 677b57b16a1e02e0be917460334ef2afc8267afd Mon Sep 17 00:00:00 2001 From: zayac Date: Thu, 16 May 2024 01:15:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E4=B8=8E=E8=B4=A6=E5=8F=B7=E4=B9=8B=E9=97=B4=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/system/mapper/PlatformMapper.java | 9 +++- .../admin/system/model/entity/AccountDO.java | 1 + .../admin/system/model/req/AccountReq.java | 45 ++++++++++++++----- .../zayac/admin/system/model/req/UserReq.java | 2 +- .../system/model/resp/AccountDetailResp.java | 22 ++++----- .../admin/system/model/resp/AccountResp.java | 29 ++++++++---- .../admin/system/service/PlatformService.java | 7 ++- .../service/impl/PlatformServiceImpl.java | 12 ++++- .../webapi/system/AccountController.java | 37 ++++++++++++++- 9 files changed, 127 insertions(+), 37 deletions(-) diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/mapper/PlatformMapper.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/mapper/PlatformMapper.java index cc3d8467..cfe44fc2 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/mapper/PlatformMapper.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/mapper/PlatformMapper.java @@ -1,5 +1,6 @@ package com.zayac.admin.system.mapper; +import org.apache.ibatis.annotations.Select; import top.continew.starter.data.mybatis.plus.base.BaseMapper; import com.zayac.admin.system.model.entity.PlatformDO; @@ -9,4 +10,10 @@ import com.zayac.admin.system.model.entity.PlatformDO; * @author zayac * @since 2024/05/14 12:28 */ -public interface PlatformMapper extends BaseMapper {} \ No newline at end of file +public interface PlatformMapper extends BaseMapper { + @Select("SELECT * FROM sys_platform WHERE name = #{name}") + PlatformDO selectByName(String name); + + @Select("SELECT * FROM sys_platform WHERE platform_id = #{platformId}") + PlatformDO selectByPlatformId(Integer platformId); +} \ No newline at end of file diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AccountDO.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AccountDO.java index e57b3f46..d4ea6aa0 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AccountDO.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AccountDO.java @@ -61,5 +61,6 @@ public class AccountDO extends BaseDO { /** * 平台ID */ + private Long platformId; } \ No newline at end of file diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/AccountReq.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/AccountReq.java index e466f657..1d364852 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/AccountReq.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/AccountReq.java @@ -3,6 +3,15 @@ package com.zayac.admin.system.model.req; import java.io.Serial; import java.time.LocalDateTime; +import cn.crane4j.annotation.AssembleMethod; +import cn.crane4j.annotation.ContainerMethod; +import cn.crane4j.annotation.Mapping; +import com.zayac.admin.common.enums.DisEnableStatusEnum; +import com.zayac.admin.system.enums.AccountTypeEnum; +import com.zayac.admin.system.model.resp.DeptResp; +import com.zayac.admin.system.model.resp.PlatformResp; +import com.zayac.admin.system.service.DeptService; +import com.zayac.admin.system.service.PlatformService; import jakarta.validation.constraints.*; import lombok.Data; @@ -31,7 +40,7 @@ public class AccountReq extends BaseReq { */ @Schema(description = "账号昵称") @Length(max = 60, message = "账号昵称长度不能超过 {max} 个字符") - private String name; + private String nickname; /** * 账号 @@ -42,23 +51,37 @@ public class AccountReq extends BaseReq { private String username; /** - * 账号类型(0:开云,1:华体会,2:九游,3:爱游戏) + * 密码 */ - @Schema(description = "账号类型(0:开云,1:华体会,2:九游,3:爱游戏)") - @NotNull(message = "账号类型(0:开云,1:华体会,2:九游,3:爱游戏)不能为空") - private Boolean type; + @Schema(description = "密码") + @NotBlank(message = "密码不能为空") + @Length(max = 64, message = "密码长度不能超过 {max} 个字符") + private String password; + + /** + * 账号类型(1:开云,2:华体会,3:九游,4:爱游戏) + */ + @Schema(description = "账号类型(1:开云,2:华体会,3:九游,4:爱游戏)", type = "Integer", allowableValues = {"1", "2", "3", "4"}, example = "1") + @NotNull(message = "账号类型不能为空") + @AssembleMethod(targetType = PlatformService.class, method = @ContainerMethod(bindMethod = "getByPlatformId", resultType = PlatformResp.class), prop="id:platformId") + private AccountTypeEnum type; /** * 状态(1:启用;2:禁用) */ - @Schema(description = "状态(1:启用;2:禁用)") + @Schema(description = "状态(1:启用;2:禁用)", type = "Integer", allowableValues = {"1", "2"}, example = "1") @NotNull(message = "状态(1:启用;2:禁用)不能为空") - private Integer status; + private DisEnableStatusEnum status; /** - * 对应平台的url + * 所属用户ID */ - @Schema(description = "对应平台的url") - @Length(max = 100, message = "对应平台的url长度不能超过 {max} 个字符") - private String url; + @Schema(description = "所属用户", example = "123456789") + private Long userId; + + /** + * 所属平台ID + */ + private Long platformId; + } \ No newline at end of file diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java index b6161903..5a57802b 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java @@ -100,7 +100,7 @@ public class UserReq extends BaseReq { /** * 私聊消息ID */ - @Schema(description = "邮箱", example = "123456789") + @Schema(description = "私聊信息ID", example = "123456789") private Long chatId; /** diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountDetailResp.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountDetailResp.java index 74311fc9..8e013dba 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountDetailResp.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountDetailResp.java @@ -2,6 +2,8 @@ package com.zayac.admin.system.model.resp; import java.io.Serial; +import com.zayac.admin.common.enums.DisEnableStatusEnum; +import com.zayac.admin.system.enums.AccountTypeEnum; import lombok.Data; import io.swagger.v3.oas.annotations.media.Schema; @@ -30,7 +32,7 @@ public class AccountDetailResp extends BaseDetailResp { */ @Schema(description = "账号昵称") @ExcelProperty(value = "账号昵称") - private String name; + private String nickname; /** * 账号 @@ -47,11 +49,11 @@ public class AccountDetailResp extends BaseDetailResp { private String password; /** - * 账号类型(0:开云,1:华体会,2:九游,3:爱游戏) + * 账号类型(1:开云,2:华体会,3:九游,4:爱游戏) */ - @Schema(description = "账号类型(0:开云,1:华体会,2:九游,3:爱游戏)") - @ExcelProperty(value = "账号类型(0:开云,1:华体会,2:九游,3:爱游戏)") - private Boolean type; + @Schema(description = "账号类型(1:开云,2:华体会,3:九游,4:爱游戏)", type = "Integer", allowableValues = {"1", "2", "3", "4"}, example = "1") + @ExcelProperty(value = "账号类型") + private AccountTypeEnum type; /** * headers @@ -63,16 +65,10 @@ public class AccountDetailResp extends BaseDetailResp { /** * 状态(1:启用;2:禁用) */ - @Schema(description = "状态(1:启用;2:禁用)") + @Schema(description = "状态(1:启用;2:禁用)", type = "Integer", allowableValues = {"1", "2"}, example = "1") @ExcelProperty(value = "状态(1:启用;2:禁用)") - private Integer status; + private DisEnableStatusEnum status; - /** - * 对应平台的url - */ - @Schema(description = "对应平台的url") - @ExcelProperty(value = "对应平台的url") - private String url; /** * 用户ID diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountResp.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountResp.java index 9974d150..f95ca2c7 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountResp.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/AccountResp.java @@ -1,15 +1,20 @@ package com.zayac.admin.system.model.resp; import java.io.Serial; -import java.time.LocalDateTime; +import cn.crane4j.annotation.AssembleMethod; +import cn.crane4j.annotation.ContainerMethod; +import cn.crane4j.annotation.Mapping; import com.zayac.admin.common.enums.DisEnableStatusEnum; import com.zayac.admin.system.enums.AccountTypeEnum; +import com.zayac.admin.system.service.UserService; import lombok.Data; import io.swagger.v3.oas.annotations.media.Schema; import top.continew.starter.extension.crud.model.resp.BaseResp; +import top.continew.starter.security.mask.annotation.JsonMask; +import top.continew.starter.security.mask.enums.MaskType; /** * 账号信息 @@ -36,6 +41,13 @@ public class AccountResp extends BaseResp { @Schema(description = "账号", example = "ky3tg107001") private String username; + /** + * 密码 + */ + @Schema(description = "密码", example = "tg666888") + @JsonMask(MaskType.PASSWORD) + private String password; + /** * 平台(0:开云,1:华体会,2:九游,3:爱游戏) */ @@ -51,19 +63,20 @@ public class AccountResp extends BaseResp { /** * 状态(1:启用;2:禁用) */ - @Schema(description = "状态(1:启用;2:禁用)") + @Schema(description = "状态(1:启用;2:禁用)", type = "Integer", allowableValues = {"1", "2"}, example = "1") private DisEnableStatusEnum status; - /** - * 对应平台的url - */ - @Schema(description = "平台地址") - private String url; - /** * 用户ID */ @Schema(description = "用户ID") + @AssembleMethod(targetType = UserService.class, method = @ContainerMethod(bindMethod = "get", resultType = UserResp.class), props = @Mapping(src = "username", ref = "ownerName")) private Long userId; + + /** + * 所属用户 + */ + @Schema(description = "所属用户", example = "张三") + private String ownerName; } \ No newline at end of file diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/service/PlatformService.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/service/PlatformService.java index 96e1706f..f7564518 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/service/PlatformService.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/service/PlatformService.java @@ -1,5 +1,6 @@ package com.zayac.admin.system.service; +import com.zayac.admin.system.model.entity.PlatformDO; import top.continew.starter.extension.crud.service.BaseService; import com.zayac.admin.system.model.query.PlatformQuery; import com.zayac.admin.system.model.req.PlatformReq; @@ -12,4 +13,8 @@ import com.zayac.admin.system.model.resp.PlatformResp; * @author zayac * @since 2024/05/14 12:28 */ -public interface PlatformService extends BaseService {} \ No newline at end of file +public interface PlatformService extends BaseService { + PlatformDO getByName(String name); + + PlatformDO getByPlatformId(Integer platformId); +} \ No newline at end of file diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/service/impl/PlatformServiceImpl.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/service/impl/PlatformServiceImpl.java index dedc4dbe..98beb477 100644 --- a/zayac-admin-system/src/main/java/com/zayac/admin/system/service/impl/PlatformServiceImpl.java +++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/service/impl/PlatformServiceImpl.java @@ -21,4 +21,14 @@ import com.zayac.admin.system.service.PlatformService; */ @Service @RequiredArgsConstructor -public class PlatformServiceImpl extends BaseServiceImpl implements PlatformService {} \ No newline at end of file +public class PlatformServiceImpl extends BaseServiceImpl implements PlatformService { + @Override + public PlatformDO getByName(String name) { + return baseMapper.selectByName(name); + } + + @Override + public PlatformDO getByPlatformId(Integer platformId) { + return baseMapper.selectByPlatformId(platformId); + } +} \ No newline at end of file diff --git a/zayac-admin-webapi/src/main/java/com/zayac/admin/webapi/system/AccountController.java b/zayac-admin-webapi/src/main/java/com/zayac/admin/webapi/system/AccountController.java index 65e95798..1aea288c 100644 --- a/zayac-admin-webapi/src/main/java/com/zayac/admin/webapi/system/AccountController.java +++ b/zayac-admin-webapi/src/main/java/com/zayac/admin/webapi/system/AccountController.java @@ -1,10 +1,19 @@ package com.zayac.admin.webapi.system; +import cn.hutool.core.util.ReUtil; +import com.zayac.admin.common.constant.RegexConstants; +import com.zayac.admin.common.util.SecureUtils; import com.zayac.admin.system.model.query.AccountQuery; import com.zayac.admin.system.model.req.AccountReq; +import com.zayac.admin.system.model.req.UserReq; import com.zayac.admin.system.model.resp.AccountDetailResp; import com.zayac.admin.system.model.resp.AccountResp; import com.zayac.admin.system.service.AccountService; +import com.zayac.admin.system.service.PlatformService; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import top.continew.starter.core.util.ExceptionUtils; +import top.continew.starter.core.util.validate.ValidationUtils; import top.continew.starter.extension.crud.enums.Api; import io.swagger.v3.oas.annotations.tags.Tag; @@ -13,6 +22,8 @@ import org.springframework.web.bind.annotation.*; import top.continew.starter.extension.crud.annotation.CrudRequestMapping; import top.continew.starter.extension.crud.controller.BaseController; +import top.continew.starter.extension.crud.util.ValidateGroup; +import top.continew.starter.web.model.R; /** @@ -24,4 +35,28 @@ import top.continew.starter.extension.crud.controller.BaseController; @Tag(name = "账号管理 API") @RestController @CrudRequestMapping(value = "/system/account", api = {Api.PAGE, Api.GET, Api.ADD, Api.UPDATE, Api.DELETE, Api.EXPORT}) -public class AccountController extends BaseController {} \ No newline at end of file +@RequiredArgsConstructor +public class AccountController extends BaseController { + private final PlatformService platformService; + + @Override + public R add(@Validated(ValidateGroup.Crud.Add.class) @RequestBody AccountReq req) { +// String rawPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(req.getPassword())); +// ValidationUtils.throwIfNull(rawPassword, "密码解密失败"); + ValidationUtils.throwIf(!ReUtil + .isMatch(RegexConstants.PASSWORD, req.getPassword()), "密码长度为 6 到 32 位,可以包含字母、数字、下划线,特殊字符,同时包含字母和数字"); + req.setPlatformId(platformService.getByPlatformId(req.getType().getValue()).getId()); + return super.add(req); + } + + @Override + public R update(@Validated(ValidateGroup.Crud.Update.class) @RequestBody AccountReq req, @PathVariable Long id) { +// String rawPassword = ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(req.getPassword())); +// ValidationUtils.throwIfNull(rawPassword, "密码解密失败"); + ValidationUtils.throwIf(!ReUtil + .isMatch(RegexConstants.PASSWORD, req.getPassword()), "密码长度为 6 到 32 位,可以包含字母、数字、下划线,特殊字符,同时包含字母和数字"); + req.setPlatformId(platformService.getByPlatformId(req.getType().getValue()).getId()); + return super.update(req, id); + } + +} \ No newline at end of file