From 33976627544f7a51ddb6ad7d3d5a3f1038cdea28 Mon Sep 17 00:00:00 2001 From: xixiaowei <xixiaowi@163.com> Date: Wed, 15 Dec 2021 12:25:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E9=A2=98=E5=9B=BE=E7=89=87=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel-s-system/pom.xml | 1 + .../kernel/system/api/TitleServiceApi.java | 11 + .../enums/title/SysTitleExceptionEnum.java | 45 ++++ .../api/pojo/title/SysTitleRequest.java | 90 +++++++ .../system-business-title/README.md | 1 + kernel-s-system/system-business-title/pom.xml | 63 +++++ .../title/controller/SysTitleController.java | 100 ++++++++ .../system/modular/title/entity/SysTitle.java | 99 ++++++++ .../modular/title/mapper/SysTitleMapper.java | 14 ++ .../title/mapper/mapping/SysTitleMapper.xml | 5 + .../title/service/SysTitleService.java | 80 ++++++ .../service/impl/SysTitleServiceImpl.java | 232 ++++++++++++++++++ 12 files changed, 741 insertions(+) create mode 100644 kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/TitleServiceApi.java create mode 100644 kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/title/SysTitleExceptionEnum.java create mode 100644 kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/title/SysTitleRequest.java create mode 100644 kernel-s-system/system-business-title/README.md create mode 100644 kernel-s-system/system-business-title/pom.xml create mode 100644 kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/controller/SysTitleController.java create mode 100644 kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/entity/SysTitle.java create mode 100644 kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/SysTitleMapper.java create mode 100644 kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/mapping/SysTitleMapper.xml create mode 100644 kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/SysTitleService.java create mode 100644 kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/impl/SysTitleServiceImpl.java diff --git a/kernel-s-system/pom.xml b/kernel-s-system/pom.xml index c594de531..4bee0ce42 100644 --- a/kernel-s-system/pom.xml +++ b/kernel-s-system/pom.xml @@ -24,6 +24,7 @@ <module>system-business-role</module> <module>system-business-menu</module> <module>system-business-notice</module> + <module>system-business-title</module> <module>system-integration-beetl</module> <module>system-integration-rest</module> <module>system-spring-boot-starter</module> diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/TitleServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/TitleServiceApi.java new file mode 100644 index 000000000..d5617c460 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/TitleServiceApi.java @@ -0,0 +1,11 @@ +package cn.stylefeng.roses.kernel.system.api; + +/** + * 标题图片配置api + * + * @author xixiaowei + * @date 2021/12/13 17:20 + */ +public interface TitleServiceApi { + +} diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/title/SysTitleExceptionEnum.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/title/SysTitleExceptionEnum.java new file mode 100644 index 000000000..20e442bbb --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/title/SysTitleExceptionEnum.java @@ -0,0 +1,45 @@ +package cn.stylefeng.roses.kernel.system.api.exception.enums.title; + +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; +import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum; +import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants; +import lombok.Getter; + +@Getter +public enum SysTitleExceptionEnum implements AbstractExceptionEnum { + + /** + * 标题图片配置不存在 + */ + TITLE_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "101", "标题图片配置不存在,id为:{}"), + + /** + * 启用的配置不允许被删除 + */ + ENABLE_NOT_ALLOW_DELETE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "102", "启用的配置不允许被删除,id为:{}"), + + /** + * 未启用的配置不允许被编辑 + */ + DISABLE_NOT_ALLOW_EDIT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "103", "未启用的配置不允许被编辑,id为:{}"), + + /** + * 唯一启用的配置不允许被删除 + */ + UNIQUE_ENABLE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "104", "唯一启用的配置不允许禁用,id为:{}"); + + /** + * 错误编码 + */ + private final String errorCode; + + /** + * 提示用户信息 + */ + private final String userTip; + + SysTitleExceptionEnum(String errorCode, String userTip) { + this.errorCode = errorCode; + this.userTip = userTip; + } +} diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/title/SysTitleRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/title/SysTitleRequest.java new file mode 100644 index 000000000..ba3486810 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/title/SysTitleRequest.java @@ -0,0 +1,90 @@ +package cn.stylefeng.roses.kernel.system.api.pojo.title; + +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotNull; + +/** + * 标题图片配置信息参数 + * + * @author xixiaowei + * @date 2021/12/13 17:01 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class SysTitleRequest extends BaseRequest { + + /** + * 标题id + */ + @NotNull(message = "titleId不能为空", groups = {edit.class, delete.class, detail.class}) + @ChineseDescription("标题id") + private Long titleId; + + /** + * 标题名称 + */ + @NotNull(message = "标题名称不能为空", groups = {add.class, edit.class}) + @ChineseDescription("标题名称") + private String titleName; + + /** + * 公司名称 + */ + @NotNull(message = "公司名称不能为空", groups = {add.class, edit.class}) + @ChineseDescription("公司名称") + private String companyName; + + /** + * 平台名称 + */ + @NotNull(message = "平台名称不能为空", groups = {add.class, edit.class}) + @ChineseDescription("平台名称") + private String platformName; + + /** + * 平台英文名称 + */ + @NotNull(message = "平台英文名称不能为空", groups = {add.class, edit.class}) + @ChineseDescription("平台英文名称") + private String platformEnglishName; + + /** + * 背景图片 + */ + @NotNull(message = "背景图片不能为空", groups = {add.class, edit.class}) + @ChineseDescription("背景图片") + private MultipartFile backgroundImage; + + /** + * 公司logo + */ + @NotNull(message = "公司logo不能为空", groups = {add.class, edit.class}) + @ChineseDescription("公司logo") + private MultipartFile companyLogo; + + /** + * 浏览器icon + */ + @NotNull(message = "浏览器icon不能为空", groups = {add.class, edit.class}) + @ChineseDescription("浏览器icon") + private MultipartFile browserIcon; + + /** + * 首页名称 + */ + @NotNull(message = "首页名称不能为空", groups = {add.class, edit.class}) + @ChineseDescription("首页名称") + private String pageName; + + /** + * 首页图标 + */ + @NotNull(message = "首页图标不能为空", groups = {add.class, edit.class}) + @ChineseDescription("首页图标") + private MultipartFile pageImage; +} diff --git a/kernel-s-system/system-business-title/README.md b/kernel-s-system/system-business-title/README.md new file mode 100644 index 000000000..544c0ee5b --- /dev/null +++ b/kernel-s-system/system-business-title/README.md @@ -0,0 +1 @@ +标题图片管理 \ No newline at end of file diff --git a/kernel-s-system/system-business-title/pom.xml b/kernel-s-system/system-business-title/pom.xml new file mode 100644 index 000000000..a853990ff --- /dev/null +++ b/kernel-s-system/system-business-title/pom.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>kernel-s-system</artifactId> + <groupId>cn.stylefeng.roses</groupId> + <version>7.1.6</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>system-business-title</artifactId> + + <properties> + <maven.compiler.source>8</maven.compiler.source> + <maven.compiler.target>8</maven.compiler.target> + </properties> + + <dependencies> + <!--系统管理的api--> + <dependency> + <groupId>cn.stylefeng.roses</groupId> + <artifactId>system-api</artifactId> + <version>${roses.version}</version> + </dependency> + + <!--资源api模块--> + <!--用在资源控制器,资源扫描上--> + <dependency> + <groupId>cn.stylefeng.roses</groupId> + <artifactId>scanner-api</artifactId> + <version>${roses.version}</version> + </dependency> + + <!--参数校验模块--> + <!--用在控制器,参数校验--> + <dependency> + <groupId>cn.stylefeng.roses</groupId> + <artifactId>validator-api</artifactId> + <version>${roses.version}</version> + </dependency> + + <!--数据库sdk--> + <!--数据库dao框架--> + <dependency> + <groupId>cn.stylefeng.roses</groupId> + <artifactId>db-sdk-mp</artifactId> + <version>${roses.version}</version> + </dependency> + + <!--web模块--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + + <dependency> + <groupId>cn.stylefeng.roses</groupId> + <artifactId>file-business</artifactId> + <version>7.1.6</version> + </dependency> + </dependencies> +</project> \ No newline at end of file diff --git a/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/controller/SysTitleController.java b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/controller/SysTitleController.java new file mode 100644 index 000000000..33132316e --- /dev/null +++ b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/controller/SysTitleController.java @@ -0,0 +1,100 @@ +package cn.stylefeng.roses.kernel.system.modular.title.controller; + +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.system.api.pojo.title.SysTitleRequest; +import cn.stylefeng.roses.kernel.system.modular.title.entity.SysTitle; +import cn.stylefeng.roses.kernel.system.modular.title.service.SysTitleService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 标题图片配置管理控制器 + * + * @author xixiaowei + * @date 2021/12/13 17:29 + */ +@RestController +@ApiResource(name = "标题图片配置管理") +public class SysTitleController { + + @Resource + private SysTitleService sysTitleService; + + /** + * 添加标题图片配置 + * + * @author xixiaowei + * @date 2021/12/14 9:26 + */ + @PostResource(name = "添加标题图片配置", path = "/sysTitle/add") + public ResponseData add(@RequestBody @Validated(SysTitleRequest.add.class) SysTitleRequest sysTitleParam) { + sysTitleService.add(sysTitleParam); + return new SuccessResponseData(); + } + + /** + * 删除标题图片配置 + * + * @author xixiaowei + * @date 2021/12/14 9:28 + */ + @PostResource(name = "删除标题图片配置", path = "/sysTitle/del") + public ResponseData del(@RequestBody @Validated(SysTitleRequest.delete.class) SysTitleRequest sysTitleParam) { + sysTitleService.del(sysTitleParam); + return new SuccessResponseData(); + } + + /** + * 修改标题图片配置 + * + * @author xixiaowei + * @date 2021/12/14 9:53 + */ + @PostResource(name = "修改标题图片配置", path = "/sysTitle/edit") + public ResponseData edit(@RequestBody @Validated(SysTitleRequest.edit.class) SysTitleRequest sysTitleParam) { + sysTitleService.edit(sysTitleParam); + return new SuccessResponseData(); + } + + /** + * 根据名称查询标题图片配置 + * + * @author xixiaowei + * @date 2021/12/14 10:26 + */ + @GetResource(name = "查询标题图片配置", path = "/sysTitle/find", responseClass = SysTitle.class) + public ResponseData findPage(SysTitleRequest sysTitleParam) { + return new SuccessResponseData(sysTitleService.findPage(sysTitleParam)); + } + + /** + * 复制标题 + * + * @author xixiaowei + * @date 2021/12/14 11:29 + */ + @PostResource(name = "复制标题", path = "/sysTitle/copy") + public ResponseData copyTitle(@RequestBody @Validated(SysTitleRequest.add.class) SysTitleRequest sysTitleRequest) { + sysTitleService.copyTitle(sysTitleRequest); + return new SuccessResponseData(); + } + + /** + * 修改启用状态 + * + * @author xixiaowei + * @date 2021/12/14 11:43 + */ + @PostResource(name = "修改启用状态", path = "/sysTitle/updateStatus") + public ResponseData updateStatus(@RequestBody @Validated(SysTitleRequest.edit.class) SysTitleRequest sysTitleRequest) { + sysTitleService.updateStatus(sysTitleRequest); + return new SuccessResponseData(); + } +} diff --git a/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/entity/SysTitle.java b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/entity/SysTitle.java new file mode 100644 index 000000000..ff6050ab6 --- /dev/null +++ b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/entity/SysTitle.java @@ -0,0 +1,99 @@ +package cn.stylefeng.roses.kernel.system.modular.title.entity; + +import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; +import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 标题图片配置信息表 + * + * @author xixiaowei + * @date 2021/12/13 15:49 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName("sys_title") +public class SysTitle extends BaseEntity { + + /** + * 标题id + */ + @TableId(value = "title_id", type = IdType.ASSIGN_ID) + @ChineseDescription("标题id") + private Long titleId; + + /** + * 标题名称 + */ + @TableField("title_name") + @ChineseDescription("标题名称") + private String titleName; + + /** + * 公司名称 + */ + @TableField("company_name") + @ChineseDescription("公司名称") + private String companyName; + + /** + * 平台名称 + */ + @TableField("platform_name") + @ChineseDescription("平台名称") + private String platformName; + + /** + * 平台英文名称 + */ + @TableField("platform_english_name") + @ChineseDescription("平台英文名称") + private String platformEnglishName; + + /** + * 背景图片 + */ + @TableField("background_image") + @ChineseDescription("背景图片") + private String backgroundImage; + + /** + * 公司logo + */ + @TableField("company_logo") + @ChineseDescription("公司logo") + private String companyLogo; + + /** + * 浏览器icon + */ + @TableField("browser_icon") + @ChineseDescription("浏览器icon") + private String browserIcon; + + /** + * 首页名称 + */ + @TableField("page_name") + @ChineseDescription("首页名称") + private String pageName; + + /** + * 首页图标 + */ + @TableField("page_image") + @ChineseDescription("首页图标") + private String pageImage; + + /** + * 启用状态:Y、启用 N、未启用 + */ + @TableField("status") + @ChineseDescription("启用状态") + private Character status; +} diff --git a/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/SysTitleMapper.java b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/SysTitleMapper.java new file mode 100644 index 000000000..c83830af3 --- /dev/null +++ b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/SysTitleMapper.java @@ -0,0 +1,14 @@ +package cn.stylefeng.roses.kernel.system.modular.title.mapper; + +import cn.stylefeng.roses.kernel.system.modular.title.entity.SysTitle; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 标题图片基本信息mapper接口 + * + * @author xixiaowei + * @date 2021/12/13 16:37 + */ +public interface SysTitleMapper extends BaseMapper<SysTitle> { + +} diff --git a/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/mapping/SysTitleMapper.xml b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/mapping/SysTitleMapper.xml new file mode 100644 index 000000000..265bee9d6 --- /dev/null +++ b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/mapper/mapping/SysTitleMapper.xml @@ -0,0 +1,5 @@ +<?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.stylefeng.roses.kernel.system.modular.title.mapper.SysTitleMapper"> + +</mapper> diff --git a/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/SysTitleService.java b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/SysTitleService.java new file mode 100644 index 000000000..5226750eb --- /dev/null +++ b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/SysTitleService.java @@ -0,0 +1,80 @@ +package cn.stylefeng.roses.kernel.system.modular.title.service; + +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.system.api.TitleServiceApi; +import cn.stylefeng.roses.kernel.system.api.pojo.title.SysTitleRequest; +import cn.stylefeng.roses.kernel.system.modular.title.entity.SysTitle; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 标题图片配置服务类 + * + * @author xixiaowei + * @date 2021/12/13 17:22 + */ +public interface SysTitleService extends IService<SysTitle>, TitleServiceApi { + + /** + * 添加标题图片配置 + * + * @param sysTitleRequest 添加参数 + * @author xixiaowei + * @date 2021/12/13 17:45 + */ + void add(SysTitleRequest sysTitleRequest); + + /** + * 删除标题图片配置 + * + * @param sysTitleRequest 删除参数 + * @author xixiaowei + * @date 2021/12/13 18:39 + */ + void del(SysTitleRequest sysTitleRequest); + + /** + * 修改标题图片配置 + * + * @param sysTitleRequest 修改参数 + * @author xixiaowei + * @date 2021/12/14 9:32 + */ + void edit(SysTitleRequest sysTitleRequest); + + /** + * 查询单个标题配置信息 + * + * @param sysTitleRequest 查询参数 + * @author xixiaowei + * @date 2021/12/14 11:38 + */ + SysTitle detail(SysTitleRequest sysTitleRequest); + + /** + * 查询标题列表 + * + * @param sysTitleRequest 查询参数 + * @return 查询分页结果 + * @author xixiaowei + * @date 2021/12/14 10:00 + */ + PageResult<SysTitle> findPage(SysTitleRequest sysTitleRequest); + + /** + * 复制标题 + * + * @param sysTitleRequest 复制参数 + * @author xixiaowei + * @date 2021/12/14 10:47 + */ + void copyTitle(SysTitleRequest sysTitleRequest); + + /** + * 修改启用状态 + * + * @param sysTitleRequest 修改参数 + * @author xixiaowei + * @date 2021/12/14 11:32 + */ + void updateStatus(SysTitleRequest sysTitleRequest); +} diff --git a/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/impl/SysTitleServiceImpl.java b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/impl/SysTitleServiceImpl.java new file mode 100644 index 000000000..daa0e102b --- /dev/null +++ b/kernel-s-system/system-business-title/src/main/java/cn/stylefeng/roses/kernel/system/modular/title/service/impl/SysTitleServiceImpl.java @@ -0,0 +1,232 @@ +package cn.stylefeng.roses.kernel.system.modular.title.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; +import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; +import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.file.api.pojo.request.SysFileInfoRequest; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; +import cn.stylefeng.roses.kernel.file.modular.service.SysFileInfoService; +import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; +import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException; +import cn.stylefeng.roses.kernel.system.api.exception.enums.title.SysTitleExceptionEnum; +import cn.stylefeng.roses.kernel.system.api.pojo.title.SysTitleRequest; +import cn.stylefeng.roses.kernel.system.modular.title.entity.SysTitle; +import cn.stylefeng.roses.kernel.system.modular.title.mapper.SysTitleMapper; +import cn.stylefeng.roses.kernel.system.modular.title.service.SysTitleService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + +/** + * 标题图片配置服务实现类 + * + * @author xixiaowei + * @date 2021/12/13 17:28 + */ +@Service +public class SysTitleServiceImpl extends ServiceImpl<SysTitleMapper, SysTitle> implements SysTitleService { + + private static final Long DEFAULT_FILE_UPLOAD = null; + + @Resource + private SysFileInfoService sysFileInfoService; + + @Override + public void add(SysTitleRequest sysTitleRequest) { + SysTitle sysTitle = new SysTitle(); + + // 拷贝属性 + BeanUtil.copyProperties(sysTitleRequest, sysTitle); + + // 启用状态默认为未启用 N + sysTitle.setStatus(YesOrNotEnum.N.getCode().charAt(0)); + + // 保存图片信息 + SysFileInfoResponse backgroundImageResponse = this.uploadFile(sysTitleRequest.getBackgroundImage(), DEFAULT_FILE_UPLOAD); + sysTitle.setBackgroundImage(backgroundImageResponse.getFileId().toString()); + SysFileInfoResponse browserIconResponse = this.uploadFile(sysTitleRequest.getBrowserIcon(), DEFAULT_FILE_UPLOAD); + sysTitle.setBrowserIcon(browserIconResponse.getFileId().toString()); + SysFileInfoResponse companyLogoResponse = this.uploadFile(sysTitleRequest.getCompanyLogo(), DEFAULT_FILE_UPLOAD); + sysTitle.setCompanyLogo(companyLogoResponse.getFileId().toString()); + SysFileInfoResponse pageImageResponse = this.uploadFile(sysTitleRequest.getPageImage(), DEFAULT_FILE_UPLOAD); + sysTitle.setPageImage(pageImageResponse.getFileId().toString()); + + // 保存配置信息 + this.save(sysTitle); + } + + /** + * 上传图片 + * + * @param multipartFile 上传的图片 + * @author xixiaowei + * @date 2021/12/14 14:40 + */ + private SysFileInfoResponse uploadFile(MultipartFile multipartFile, Long fileCode) { + SysFileInfoRequest sysFileInfoRequest = new SysFileInfoRequest(); + sysFileInfoRequest.setFileId(IdWorker.getId()); + if (fileCode != null) { + sysFileInfoRequest.setFileCode(fileCode); + } + sysFileInfoRequest.setSecretFlag(YesOrNotEnum.N.getCode()); + sysFileInfoRequest.setFileLocation(4); + sysFileInfoRequest.setFilePath("D:\\test"); + sysFileInfoRequest.setFileOriginName(multipartFile.getOriginalFilename()); + return sysFileInfoService.uploadFile(multipartFile, sysFileInfoRequest); + } + + @Override + public void del(SysTitleRequest sysTitleRequest) { + SysTitle sysTitle = this.querySysTitleById(sysTitleRequest); + + // 启用状态不允许删除 + if (Character.valueOf(YesOrNotEnum.Y.getCode().charAt(0)).equals(sysTitle.getStatus())) { + throw new SystemModularException(SysTitleExceptionEnum.ENABLE_NOT_ALLOW_DELETE, sysTitleRequest.getTitleId()); + } + + // 删除配置 + this.removeById(sysTitle); + } + + /** + * 获取标题图片配置 + * + * @author xixiaowei + * @date 2021/12/14 9:18 + */ + private SysTitle querySysTitleById(SysTitleRequest sysTitleRequest) { + SysTitle sysTitle = this.getById(sysTitleRequest.getTitleId()); + if (ObjectUtil.isEmpty(sysTitle)) { + throw new SystemModularException(SysTitleExceptionEnum.TITLE_NOT_EXIST, sysTitleRequest.getTitleId()); + } + return sysTitle; + } + + @Override + public void edit(SysTitleRequest sysTitleRequest) { + SysTitle sysTitle = this.querySysTitleById(sysTitleRequest); + + // 未启用状态不允许编辑 + if (Character.valueOf(YesOrNotEnum.N.getCode().charAt(0)).equals(sysTitle.getStatus())) { + throw new SystemModularException(SysTitleExceptionEnum.DISABLE_NOT_ALLOW_EDIT, sysTitleRequest.getTitleId()); + } + + // 图片修改 + sysTitle.setBackgroundImage(this.updateFile(sysTitleRequest.getBackgroundImage(), sysTitle.getBackgroundImage())); + sysTitle.setBrowserIcon(this.updateFile(sysTitleRequest.getBrowserIcon(), sysTitle.getBrowserIcon())); + sysTitle.setCompanyLogo(this.updateFile(sysTitleRequest.getCompanyLogo(), sysTitle.getCompanyLogo())); + sysTitle.setPageImage(this.updateFile(sysTitleRequest.getPageImage(), sysTitle.getPageImage())); + + // 更新属性 + BeanUtil.copyProperties(sysTitleRequest, sysTitle); + + // 修改配置 + this.updateById(sysTitle); + } + + /** + * 更新图片 + * + * @param multipartFile 新图片 + * @param fileId 旧图片Id + * @return 新图片Id + * @author xixiaowei + * @date 2021/12/14 15:21 + */ + private String updateFile(MultipartFile multipartFile, String fileId) { + SysFileInfoResponse fileInfoResult = sysFileInfoService.getFileInfoResult(Long.parseLong(fileId)); + + // 上传图片 + SysFileInfoResponse sysFileInfoResponse = this.uploadFile(multipartFile, fileInfoResult.getFileCode()); + + return sysFileInfoResponse.getFileId().toString(); + } + + @Override + public SysTitle detail(SysTitleRequest sysTitleRequest) { + return this.querySysTitleById(sysTitleRequest); + } + + @Override + public PageResult<SysTitle> findPage(SysTitleRequest sysTitleRequest) { + LambdaQueryWrapper<SysTitle> wrapper = this.createWrapper(sysTitleRequest); + Page<SysTitle> page = this.page(PageFactory.defaultPage(), wrapper); + return PageResultFactory.createPageResult(page); + } + + /** + * 创建Wrapper + * + * @author xixiaowei + * @date 2021/12/14 10:04 + */ + private LambdaQueryWrapper<SysTitle> createWrapper(SysTitleRequest sysTitleRequest) { + LambdaQueryWrapper<SysTitle> wrapper = new LambdaQueryWrapper<>(); + + // 按照创建时间倒序 + wrapper.orderByDesc(BaseEntity::getCreateTime); + + // 如果标题不为空,根据标题名称模糊查询;如果标题为空,查询全部 + wrapper.like(StrUtil.isNotBlank(sysTitleRequest.getTitleName()), SysTitle::getTitleName, sysTitleRequest.getTitleName()); + return wrapper; + } + + @Override + public void copyTitle(SysTitleRequest sysTitleRequest) { + SysTitle sysTitle = this.querySysTitleById(sysTitleRequest); + + SysTitle title = new SysTitle(); + // 拷贝属性 + BeanUtil.copyProperties(sysTitle, title); + // 修改标题名称 + title.setTitleName(sysTitle.getTitleName() + "复制"); + // 标题状态设为默认状态 未启用 N + title.setStatus(YesOrNotEnum.N.getCode().charAt(0)); + + // 保存配置信息 + this.save(title); + } + + @Override + public void updateStatus(SysTitleRequest sysTitleRequest) { + SysTitle sysTitle = this.querySysTitleById(sysTitleRequest); + + // 如果状态为唯一启用状态不允许被禁用, 如果为未启用状态则可以启用该配置同时禁用已启用的标题配置 + if (Character.valueOf(YesOrNotEnum.Y.getCode().charAt(0)).equals(sysTitle.getStatus())) { + throw new SystemModularException(SysTitleExceptionEnum.UNIQUE_ENABLE, sysTitleRequest.getTitleId()); + } else { + // 设置为启用状态 + sysTitle.setStatus(YesOrNotEnum.Y.getCode().charAt(0)); + // 修改已启用的标题配置 + if (this.updateEnableToDisableStatus()) { + updateById(sysTitle); + } + } + } + + /** + * 修改已启用的标题配置为禁用状态 + * + * @author xixiaowei + * @date 2021/12/14 14:00 + */ + private Boolean updateEnableToDisableStatus() { + // 查询已启用的标题配置 + LambdaQueryWrapper<SysTitle> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysTitle::getStatus, YesOrNotEnum.Y.getCode().charAt(0)); + SysTitle sysTitle = getOne(wrapper); + + // 修改状态 + sysTitle.setStatus(YesOrNotEnum.N.getCode().charAt(0)); + return updateById(sysTitle); + } +}