From 9ffcfbbf9af4c4dc2e9a950419f5191da69155d6 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Wed, 6 Jan 2021 16:15:43 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90app=E3=80=91=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E7=AE=A1=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/enums/AppExceptionEnum.java | 7 +- .../pojo/app/request/SysAppRequest.java | 19 +++- .../modular/controller/SysAppController.java | 36 ++++--- .../app/modular/service/SysAppService.java | 29 ++++-- .../service/impl/SysAppServiceImpl.java | 95 +++++++++---------- 5 files changed, 109 insertions(+), 77 deletions(-) diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/AppExceptionEnum.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/AppExceptionEnum.java index b0647136d..4c0ce4fdb 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/AppExceptionEnum.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/exception/enums/AppExceptionEnum.java @@ -51,7 +51,12 @@ public enum AppExceptionEnum implements AbstractExceptionEnum { /** * 该应用下有菜单 */ - APP_CANNOT_DELETE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "75", "该应用下有菜单,无法删除"); + APP_CANNOT_DELETE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "75", "该应用下有菜单,无法删除"), + + /** + * 激活的应用不能被禁用 + */ + CANT_DISABLE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "76", "激活的应用不能被禁用"); /** * 错误编码 diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java index a84fb39c4..72fb8068d 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/app/request/SysAppRequest.java @@ -1,7 +1,7 @@ package cn.stylefeng.roses.kernel.system.pojo.app.request; import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; -import cn.stylefeng.roses.kernel.validator.validators.flag.FlagValue; +import cn.stylefeng.roses.kernel.validator.validators.status.StatusValue; import cn.stylefeng.roses.kernel.validator.validators.unique.TableUniqueValue; import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,7 +22,7 @@ public class SysAppRequest extends BaseRequest { /** * 主键 */ - @NotNull(message = "appId不能为空", groups = {edit.class, delete.class, detail.class}) + @NotNull(message = "appId不能为空", groups = {edit.class, delete.class, detail.class, updateActiveFlag.class, updateStatus.class}) private Long appId; /** @@ -54,8 +54,19 @@ public class SysAppRequest extends BaseRequest { /** * 是否默认激活:Y-是,N-否,激活的应用下的菜单会在首页默认展开 */ - @NotBlank(message = "是否默认激活不能为空", groups = {add.class, edit.class}) - @FlagValue(message = "是否默认激活格式错误,正确格式应该Y或者N", groups = {add.class, edit.class}) private String activeFlag; + /** + * 状态:1-启用,2-禁用 + */ + @NotNull(message = "状态为空", groups = {updateStatus.class}) + @StatusValue(groups = updateStatus.class) + private Integer statusFlag; + + /** + * 设置为默认状态 + */ + public @interface updateActiveFlag { + } + } diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/controller/SysAppController.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/controller/SysAppController.java index 58be9a2a2..ac980f173 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/controller/SysAppController.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/controller/SysAppController.java @@ -50,6 +50,30 @@ public class SysAppController { return new SuccessResponseData(); } + /** + * 将应用设为默认应用,用户进入系统会默认进这个应用的菜单 + * + * @author fengshuonan + * @date 2020/6/29 16:49 + */ + @PostResource(name = "设为默认应用", path = "/sysApp/updateActiveFlag") + public ResponseData setAsDefault(@RequestBody @Validated(SysAppRequest.updateActiveFlag.class) SysAppRequest sysAppParam) { + sysAppService.updateActiveFlag(sysAppParam); + return new SuccessResponseData(); + } + + /** + * 修改应用状态 + * + * @author fengshuonan + * @date 2020/6/29 16:49 + */ + @PostResource(name = "修改应用状态", path = "/sysApp/updateStatus") + public ResponseData updateStatus(@RequestBody @Validated(SysAppRequest.updateStatus.class) SysAppRequest sysAppParam) { + sysAppService.updateStatus(sysAppParam); + return new SuccessResponseData(); + } + /** * 删除系统应用 * @@ -95,16 +119,4 @@ public class SysAppController { return new SuccessResponseData(sysAppService.list(sysAppParam)); } - /** - * 设为默认应用 - * - * @author fengshuonan - * @date 2020/6/29 16:49 - */ - @PostResource(name = "设为默认应用", path = "/sysApp/setAsDefault") - public ResponseData setAsDefault(@RequestBody @Validated(SysAppRequest.detail.class) SysAppRequest sysAppParam) { - sysAppService.setAsDefault(sysAppParam); - return new SuccessResponseData(); - } - } diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/SysAppService.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/SysAppService.java index 84cba07f1..0e4100cc7 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/SysAppService.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/SysAppService.java @@ -25,9 +25,9 @@ Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意 package cn.stylefeng.roses.kernel.app.modular.service; import cn.stylefeng.roses.kernel.app.modular.entity.SysApp; -import com.baomidou.mybatisplus.extension.service.IService; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.system.pojo.app.request.SysAppRequest; +import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -57,6 +57,24 @@ public interface SysAppService extends IService { */ void edit(SysAppRequest sysAppParam); + /** + * 将应用设为默认应用,用户进入系统会默认进这个应用的菜单 + * + * @param sysAppParam 设为默认应用参数 + * @author fengshuonan + * @date 2020/6/29 16:49 + */ + void updateActiveFlag(SysAppRequest sysAppParam); + + /** + * 更新状态 + * + * @param sysAppParam 请求参数 + * @author fengshuonan + * @date 2021/1/6 14:30 + */ + void updateStatus(SysAppRequest sysAppParam); + /** * 删除系统应用 * @@ -96,13 +114,4 @@ public interface SysAppService extends IService { */ List list(SysAppRequest sysAppParam); - /** - * 设为默认应用 - * - * @param sysAppParam 设为默认应用参数 - * @author fengshuonan - * @date 2020/6/29 16:49 - */ - void setAsDefault(SysAppRequest sysAppParam); - } diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java index 8e0d046d4..63a56f5bf 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/app/modular/service/impl/SysAppServiceImpl.java @@ -14,6 +14,7 @@ import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict; import cn.stylefeng.roses.kernel.system.AppServiceApi; import cn.stylefeng.roses.kernel.system.MenuServiceApi; +import cn.stylefeng.roses.kernel.system.exception.SystemModularException; import cn.stylefeng.roses.kernel.system.exception.enums.AppExceptionEnum; import cn.stylefeng.roses.kernel.system.pojo.app.request.SysAppRequest; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -43,11 +44,14 @@ public class SysAppServiceImpl extends ServiceImpl impleme @Override public void add(SysAppRequest sysAppRequest) { - // 检测是否有已经激活的应用,激活了就不能再设置激活了 - checkParamHaveActive(sysAppRequest, false); - SysApp sysApp = new SysApp(); - BeanUtil.copyProperties(sysAppRequest, sysApp); + + // 设置名称和编码 + sysApp.setAppName(sysAppRequest.getAppName()); + sysApp.setAppCode(sysAppRequest.getAppCode()); + + // 默认不激活 + sysApp.setActiveFlag(YesOrNotEnum.N.getCode()); // 设为启用 sysApp.setStatusFlag(StatusEnum.ENABLE.getCode()); @@ -58,18 +62,51 @@ public class SysAppServiceImpl extends ServiceImpl impleme @Override public void edit(SysAppRequest sysAppRequest) { - // 检测是否有已经激活的应用,激活了就不能再设置激活了 - checkParamHaveActive(sysAppRequest, true); - SysApp sysApp = this.querySysApp(sysAppRequest); BeanUtil.copyProperties(sysAppRequest, sysApp); - //不能修改状态,用修改状态接口修改状态 + // 不能修改编码 + sysApp.setAppCode(null); + + // 不能修改状态,修改状态接口修改状态 sysApp.setStatusFlag(null); + // 不能修改激活,激活接口激活应用 + sysApp.setActiveFlag(null); + this.updateById(sysApp); } + @Override + @Transactional(rollbackFor = Exception.class) + public void updateActiveFlag(SysAppRequest sysAppRequest) { + SysApp currentApp = this.querySysApp(sysAppRequest); + + // 所有已激活的改为未激活 + LambdaUpdateWrapper sysAppLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + sysAppLambdaUpdateWrapper.set(SysApp::getActiveFlag, YesOrNotEnum.N.getCode()); + sysAppLambdaUpdateWrapper.eq(SysApp::getActiveFlag, YesOrNotEnum.Y.getCode()); + this.update(sysAppLambdaUpdateWrapper); + + // 当前的设置为已激活 + currentApp.setActiveFlag(YesOrNotEnum.Y.getCode()); + this.updateById(currentApp); + } + + @Override + public void updateStatus(SysAppRequest sysAppParam) { + SysApp currentApp = this.querySysApp(sysAppParam); + + // 激活状态的不能被禁用 + if (YesOrNotEnum.Y.getCode().equals(currentApp.getActiveFlag()) + && StatusEnum.DISABLE.getCode().equals(sysAppParam.getStatusFlag())) { + throw new SystemModularException(AppExceptionEnum.CANT_DISABLE); + } + + currentApp.setStatusFlag(sysAppParam.getStatusFlag()); + this.updateById(currentApp); + } + @Override public void delete(SysAppRequest sysAppRequest) { SysApp sysApp = this.querySysApp(sysAppRequest); @@ -105,22 +142,6 @@ public class SysAppServiceImpl extends ServiceImpl impleme return this.list(wrapper); } - @Override - @Transactional(rollbackFor = Exception.class) - public void setAsDefault(SysAppRequest sysAppRequest) { - SysApp currentApp = this.querySysApp(sysAppRequest); - - // 所有已激活的改为未激活 - LambdaUpdateWrapper sysAppLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - sysAppLambdaUpdateWrapper.set(SysApp::getActiveFlag, YesOrNotEnum.N.getCode()); - sysAppLambdaUpdateWrapper.eq(SysApp::getActiveFlag, YesOrNotEnum.Y.getCode()); - this.update(sysAppLambdaUpdateWrapper); - - // 当前的设置为已激活 - currentApp.setActiveFlag(YesOrNotEnum.Y.getCode()); - this.updateById(currentApp); - } - @Override public Set getAppsByAppCodes(Set appCodes) { HashSet simpleDicts = new HashSet<>(); @@ -176,32 +197,6 @@ public class SysAppServiceImpl extends ServiceImpl impleme return sysApp; } - /** - * 检测是否有已经激活的应用,激活了就不能再设置激活了 - * - * @author fengshuonan - * @date 2020/11/24 21:29 - */ - private void checkParamHaveActive(SysAppRequest sysAppRequest, boolean excludeSelf) { - - // 查询激活状态有无已经有Y的 - LambdaQueryWrapper appQueryWrapperByActive = new LambdaQueryWrapper<>(); - appQueryWrapperByActive.eq(SysApp::getActiveFlag, YesOrNotEnum.Y.getCode()) - .eq(SysApp::getDelFlag, YesOrNotEnum.N.getCode()); - - // 排除自己 - if (excludeSelf) { - appQueryWrapperByActive.ne(SysApp::getAppId, sysAppRequest.getAppId()); - } - - int countByActive = this.count(appQueryWrapperByActive); - - // 只判断激活状态为Y时候数量是否大于1了 - if (countByActive >= 1 && YesOrNotEnum.Y.getCode().equals(sysAppRequest.getActiveFlag())) { - throw new ServiceException(AppExceptionEnum.APP_ACTIVE_REPEAT); - } - } - /** * 创建wrapper *