diff --git a/kernel-s-system/pom.xml b/kernel-s-system/pom.xml index b312588bf..12d2f9a37 100644 --- a/kernel-s-system/pom.xml +++ b/kernel-s-system/pom.xml @@ -24,6 +24,8 @@ system-business-role system-business-menu system-business-notice + system-integration-beetl + system-integration-rest system-spring-boot-starter diff --git a/kernel-s-system/system-integration-beetl/README.md b/kernel-s-system/system-integration-beetl/README.md new file mode 100644 index 000000000..d16c31051 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/README.md @@ -0,0 +1 @@ +针对前后端不分离版本项目,前端使用beetl渲染的集成 \ No newline at end of file diff --git a/kernel-s-system/system-integration-beetl/pom.xml b/kernel-s-system/system-integration-beetl/pom.xml new file mode 100644 index 000000000..d1efc1115 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + + cn.stylefeng.roses + kernel-s-system + 7.0.4 + ../pom.xml + + + system-integration-beetl + + jar + + + + + + cn.stylefeng.roses + system-spring-boot-starter + ${roses.version} + + + + + + cn.stylefeng.roses + dict-spring-boot-starter + ${roses.version} + + + + + + cn.stylefeng.roses + i18n-spring-boot-starter + ${roses.version} + + + + + cn.stylefeng.roses + monitor-spring-boot-starter + ${roses.version} + + + + + cn.stylefeng.roses + ds-container-api + ${roses.version} + + + + + com.ibeetl + beetl + ${beetl.version} + + + + + diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/CustomErrorView.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/CustomErrorView.java new file mode 100644 index 000000000..f39c4f6d6 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/CustomErrorView.java @@ -0,0 +1,18 @@ +package cn.stylefeng.roses.kernel.system.integration; + +import org.beetl.ext.spring.BeetlSpringView; + +/** + * 错误页面的默认跳转(例如请求404的时候,默认走这个视图解析器) + * + * @author fengshuonan + * @date 2017-05-21 11:34 + */ +public class CustomErrorView extends BeetlSpringView { + + @Override + public String getContentType() { + return "text/html;charset=UTF-8"; + } + +} \ No newline at end of file diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/BeetlAutoConfiguration.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/BeetlAutoConfiguration.java new file mode 100644 index 000000000..4ae1f06e8 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/BeetlAutoConfiguration.java @@ -0,0 +1,77 @@ +package cn.stylefeng.roses.kernel.system.integration.config; + +import cn.stylefeng.roses.kernel.auth.api.LoginUserApi; +import cn.stylefeng.roses.kernel.system.integration.core.CustomBeetlGroupUtilConfiguration; +import cn.stylefeng.roses.kernel.system.integration.core.expander.BeetlConfigExpander; +import org.beetl.core.resource.ClasspathResourceLoader; +import org.beetl.ext.spring.BeetlSpringViewResolver; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +/** + * Beetl模板引擎的配置 + * + * @author fengshuonan + * @date 2020/12/27 12:34 + */ +@Configuration +public class BeetlAutoConfiguration { + + @Value("${spring.mvc.view.prefix}") + private String prefix; + + /** + * Beetl的自定义配置 + * + * @author fengshuonan + * @date 2020/12/27 12:34 + */ + @Bean(initMethod = "init") + public CustomBeetlGroupUtilConfiguration customBeetlGroupUtilConfiguration(LoginUserApi loginUserApi) { + CustomBeetlGroupUtilConfiguration customBeetlGroupUtilConfiguration = new CustomBeetlGroupUtilConfiguration(loginUserApi); + + // 设置beetl的资源加载器 + customBeetlGroupUtilConfiguration.setResourceLoader(new ClasspathResourceLoader(BeetlAutoConfiguration.class.getClassLoader(), prefix)); + + // 设置beetl的配置 + customBeetlGroupUtilConfiguration.setConfigProperties(createBeetlProperties()); + + return customBeetlGroupUtilConfiguration; + } + + /** + * beetl的视图解析器 + * + * @author fengshuonan + * @date 2020/12/27 12:34 + */ + @Bean + public BeetlSpringViewResolver beetlViewResolver(CustomBeetlGroupUtilConfiguration customBeetlGroupUtilConfiguration) { + BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver(); + beetlSpringViewResolver.setConfig(customBeetlGroupUtilConfiguration); + beetlSpringViewResolver.setContentType("text/html;charset=UTF-8"); + beetlSpringViewResolver.setOrder(0); + return beetlSpringViewResolver; + } + + /** + * 组装beetl初始化需要的properties + * + * @author fengshuonan + * @date 2020/12/27 12:33 + */ + private Properties createBeetlProperties() { + Properties properties = new Properties(); + properties.setProperty("DELIMITER_STATEMENT_START", BeetlConfigExpander.getDelimiterStatementStart()); + properties.setProperty("DELIMITER_STATEMENT_END", BeetlConfigExpander.getDelimiterStatementEnd()); + properties.setProperty("HTML_TAG_FLAG", BeetlConfigExpander.getHtmlTagFlag()); + properties.setProperty("RESOURCE.tagRoot", BeetlConfigExpander.getResourceTagRoot()); + properties.setProperty("RESOURCE.tagSuffix", BeetlConfigExpander.getResourceTagSuffix()); + properties.setProperty("RESOURCE.autoCheck", BeetlConfigExpander.getResourceAutoCheck()); + return properties; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/BeetlErrorViewAutoConfiguration.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/BeetlErrorViewAutoConfiguration.java new file mode 100644 index 000000000..52349b920 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/BeetlErrorViewAutoConfiguration.java @@ -0,0 +1,31 @@ +package cn.stylefeng.roses.kernel.system.integration.config; + +import cn.stylefeng.roses.kernel.system.integration.CustomErrorView; +import cn.stylefeng.roses.kernel.system.integration.core.CustomBeetlGroupUtilConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 错误界面自动配置,一般用于404响应 + * + * @author fengshuonan + * @date 2021/5/17 11:16 + */ +@Configuration +public class BeetlErrorViewAutoConfiguration { + + /** + * 默认错误页面,返回json + * + * @author fengshuonan + * @date 2020/12/16 15:47 + */ + @Bean("error") + public CustomErrorView error(CustomBeetlGroupUtilConfiguration customBeetlGroupUtilConfiguration) { + CustomErrorView customErrorView = new CustomErrorView(); + customErrorView.setUrl("/404.html"); + customErrorView.setGroupTemplate(customBeetlGroupUtilConfiguration.getGroupTemplate()); + return customErrorView; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/CustomBeetlGroupUtilConfiguration.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/CustomBeetlGroupUtilConfiguration.java new file mode 100644 index 000000000..e05f180b3 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/CustomBeetlGroupUtilConfiguration.java @@ -0,0 +1,51 @@ +package cn.stylefeng.roses.kernel.system.integration.core; + +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.auth.api.LoginUserApi; +import cn.stylefeng.roses.kernel.i18n.util.QuickTranslateUtil; +import cn.stylefeng.roses.kernel.system.api.expander.SystemConfigExpander; +import cn.stylefeng.roses.kernel.system.integration.core.tag.SysDictCheckBoxTag; +import cn.stylefeng.roses.kernel.system.integration.core.tag.SysDictRadioTag; +import cn.stylefeng.roses.kernel.system.integration.core.tag.SysDictSelectTag; +import org.beetl.ext.spring.BeetlGroupUtilConfiguration; + +/** + * beetl拓展配置,绑定一些工具类,方便在模板中直接调用 + * + * @author fengshuonan + * @date 2020/12/27 11:18 + */ +public class CustomBeetlGroupUtilConfiguration extends BeetlGroupUtilConfiguration { + + private final LoginUserApi loginUserApi; + + public CustomBeetlGroupUtilConfiguration(LoginUserApi loginUserApi) { + this.loginUserApi = loginUserApi; + } + + @Override + public void initOther() { + + // 获取当前用户的接口 + groupTemplate.registerFunctionPackage("loginUser", loginUserApi); + + // 对象工具类 + groupTemplate.registerFunctionPackage("objectUtil", ObjectUtil.class); + + // 获取基本信息的工具 + groupTemplate.registerFunctionPackage("constants", SystemConfigExpander.class); + + // 多语言 + groupTemplate.registerFunctionPackage("translate", QuickTranslateUtil.class); + + // 下拉选字典 + groupTemplate.registerTag("dict_select", SysDictSelectTag.class); + + // 单选字典 + groupTemplate.registerTag("dict_radio", SysDictRadioTag.class); + + // 多选字典 + groupTemplate.registerTag("dict_checkbox", SysDictCheckBoxTag.class); + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/consts/BeetlConstants.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/consts/BeetlConstants.java new file mode 100644 index 000000000..52e209677 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/consts/BeetlConstants.java @@ -0,0 +1,46 @@ +package cn.stylefeng.roses.kernel.system.integration.core.consts; + +/** + * beetl模板引擎的常量 + * + * @author fengshuonan + * @date 2020/12/27 12:20 + */ +public interface BeetlConstants { + + /** + * 默认边界符开始 + *

+ * beetl默认的是 '<%' + */ + String DEFAULT_DELIMITER_STATEMENT_START = "@"; + + /** + * 默认beetl边界符的结束 + *

+ * beetl默认的是 '%>' + */ + String DEFAULT_DELIMITER_STATEMENT_END = "null"; + + /** + * 自定义标签文件Root目录 + */ + String DEFAULT_RESOURCE_TAG_ROOT = "common/tags"; + + /** + * 自定义标签文件后缀 + */ + String DEFAULT_RESOURCE_TAG_SUFFIX = "tag"; + + /** + * 是否检测文件变化,开发用true合适,但线上要改为false + */ + String DEFAULT_RESOURCE_AUTO_CHECK = "false"; + + /** + * 默认beetl 支持HTML标签 + *

+ * beetl默认的是 '#' + */ + String DEFAULT_HTML_TAG_FLAG = "tag:"; +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/consts/DictTagConstants.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/consts/DictTagConstants.java new file mode 100644 index 000000000..2d905c28a --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/consts/DictTagConstants.java @@ -0,0 +1,77 @@ +package cn.stylefeng.roses.kernel.system.integration.core.consts; + +/** + * 字典html属性常量 + * + * @author liuhanqing + * @date 2021/1/16 21:06 + */ + +public interface DictTagConstants { + + /** + * html组件 id + */ + String ID = "id"; + + /** + * html组件 name + */ + String NAME = "name"; + + /** + * html组件 type + */ + String TYPE = "type"; + + /** + * 字典类型编码 + */ + String DICT_TYPE_CODE = "dictTypeCode"; + + /** + * layui元素的风格 + */ + String LAY_SKIN = "laySkin"; + + /** + * layui事件过滤器 + */ + String LAY_FILTER = "layFilter"; + + /** + * layui校验 + */ + String LAY_VERIFY = "layVerify"; + + /** + * select控件提示name + */ + String HEAD_NAME = "headName"; + + /** + * select控件提示value + */ + String HEAD_VALUE = "headValue"; + + /** + * select控件提示类型::1-全部,2-请选择 + */ + String HEAD_TYPE = "headType"; + + /** + * 默认值 + */ + String DEFAULT_VALUE = "defaultValue"; + + /** + * 工作流相关 + */ + String WORKFLOW_FORM = "workflowForm"; + + /** + * 工作流相关 + */ + String ITEM_NAME = "itemName"; + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/enums/SelectTagHeadTypeEnum.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/enums/SelectTagHeadTypeEnum.java new file mode 100644 index 000000000..20399d676 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/enums/SelectTagHeadTypeEnum.java @@ -0,0 +1,67 @@ +package cn.stylefeng.roses.kernel.system.integration.core.enums; + +import lombok.Getter; + +/** + * 字典下拉选头类型 + * + * @author liuhanqing + * @date 2021/1/16 20:36 + */ +@Getter +public enum SelectTagHeadTypeEnum { + + /** + * 全部 + */ + ALL("1", "全部"), + + /** + * 请选择 + */ + SELECT("2", "请选择"); + + private final String code; + + private final String name; + + SelectTagHeadTypeEnum(String code, String name) { + this.code = code; + this.name = name; + } + + /** + * 根据code获取枚举 + * + * @author liuhanqing + * @date 2021/1/16 20:36 + */ + public static SelectTagHeadTypeEnum codeToEnum(String code) { + if (null != code) { + for (SelectTagHeadTypeEnum e : SelectTagHeadTypeEnum.values()) { + if (e.getCode().equals(code)) { + return e; + } + } + } + return null; + } + + /** + * 编码转化成中文含义 + * + * @author liuhanqing + * @date 2021/1/16 20:36 + */ + public static String codeToName(String code) { + if (null != code) { + for (SelectTagHeadTypeEnum e : SelectTagHeadTypeEnum.values()) { + if (e.getCode().equals(code)) { + return e.getName(); + } + } + } + return "未知"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/expander/BeetlConfigExpander.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/expander/BeetlConfigExpander.java new file mode 100644 index 000000000..da81e00b5 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/expander/BeetlConfigExpander.java @@ -0,0 +1,74 @@ +package cn.stylefeng.roses.kernel.system.integration.core.expander; + +import cn.stylefeng.roses.kernel.config.api.context.ConfigContext; +import cn.stylefeng.roses.kernel.system.integration.core.consts.BeetlConstants; + +/** + * Beetl模板引擎相关配置 + * + * @author fengshuonan + * @date 2020/12/27 11:36 + */ +public class BeetlConfigExpander { + + /** + * 边界符开始符号 + * + * @author fengshuonan + * @date 2020/12/27 12:27 + */ + public static String getDelimiterStatementStart() { + return ConfigContext.me().getSysConfigValueWithDefault("DELIMITER_STATEMENT_START", String.class, BeetlConstants.DEFAULT_DELIMITER_STATEMENT_START); + } + + /** + * beetl边界符的结束符号 + * + * @author fengshuonan + * @date 2020/12/27 12:27 + */ + public static String getDelimiterStatementEnd() { + return ConfigContext.me().getSysConfigValueWithDefault("DELIMITER_STATEMENT_END", String.class, BeetlConstants.DEFAULT_DELIMITER_STATEMENT_END); + } + + /** + * 自定义标签文件Root目录 + * + * @author fengshuonan + * @date 2020/12/27 12:27 + */ + public static String getResourceTagRoot() { + return ConfigContext.me().getSysConfigValueWithDefault("RESOURCE_TAG_ROOT", String.class, BeetlConstants.DEFAULT_RESOURCE_TAG_ROOT); + } + + /** + * 自定义标签文件后缀 + * + * @author fengshuonan + * @date 2020/12/27 12:27 + */ + public static String getResourceTagSuffix() { + return ConfigContext.me().getSysConfigValueWithDefault("RESOURCE_TAG_SUFFIX", String.class, BeetlConstants.DEFAULT_RESOURCE_TAG_SUFFIX); + } + + /** + * 是否检测文件变化,开发用true合适,但线上要改为false + * + * @author fengshuonan + * @date 2020/12/27 12:27 + */ + public static String getResourceAutoCheck() { + return ConfigContext.me().getSysConfigValueWithDefault("RESOURCE_AUTO_CHECK", String.class, BeetlConstants.DEFAULT_RESOURCE_AUTO_CHECK); + } + + /** + * 自定义支持HTML标签 + * + * @author liuhanqing + * @date 2021/1/16 21:06 + */ + public static String getHtmlTagFlag() { + return ConfigContext.me().getSysConfigValueWithDefault("HTML_TAG_FLAG", String.class, BeetlConstants.DEFAULT_HTML_TAG_FLAG); + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictBaseTag.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictBaseTag.java new file mode 100644 index 000000000..2e3f3fd37 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictBaseTag.java @@ -0,0 +1,182 @@ +package cn.stylefeng.roses.kernel.system.integration.core.tag; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDict; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDictType; +import cn.stylefeng.roses.kernel.dict.modular.service.DictService; +import cn.stylefeng.roses.kernel.dict.modular.service.DictTypeService; +import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; +import cn.stylefeng.roses.kernel.system.integration.core.consts.DictTagConstants; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.beetl.core.tag.GeneralVarTagBinding; + +import java.util.List; +import java.util.Map; + +/** + * beetl字典标签基类 + * + * @author liuhanqing + * @date 2021/1/16 18:45 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class SysDictBaseTag extends GeneralVarTagBinding { + + public DictService dictService = SpringUtil.getBean(DictService.class); + + public DictTypeService dictTypeService = SpringUtil.getBean(DictTypeService.class); + + /** + * html组件 id + */ + public String id; + + /** + * html组件 name + */ + public String name; + + /** + * html组件 type + */ + public String type; + + /** + * 字典类型编码 + */ + public String dictTypeCode; + + /** + * layui元素的风格 + */ + public String laySkin; + + /** + * layui事件过滤器 + */ + public String layFilter; + + /** + * layui校验 + */ + public String layVerify; + + /** + * select控件提示name + */ + public String headName; + + /** + * select控件提示value + */ + public String headValue; + + /** + * select控件提示类型::1-全部,2-请选择 + */ + public String headType; + + /** + * 默认值 + */ + public String defaultValue; + + /** + * 工作流相关 + */ + public String workflowForm; + + /** + * 工作流相关 + */ + public String itemName; + + /** + * 初始化绑定属性 + * + * @author liuhanqing + * @date 2021/1/16 23:49 + */ + public void initAttr() { + Map attrs = this.getAttributes(); + if (attrs.size() > 0) { + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.ID))) { + this.setId(attrs.get(DictTagConstants.ID).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.NAME))) { + this.setName(attrs.get(DictTagConstants.NAME).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.TYPE))) { + this.setType(attrs.get(DictTagConstants.TYPE).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.DICT_TYPE_CODE))) { + this.setDictTypeCode(attrs.get(DictTagConstants.DICT_TYPE_CODE).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.LAY_SKIN))) { + this.setLaySkin(attrs.get(DictTagConstants.LAY_SKIN).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.LAY_FILTER))) { + this.setLayFilter(attrs.get(DictTagConstants.LAY_FILTER).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.LAY_VERIFY))) { + this.setLayVerify(attrs.get(DictTagConstants.LAY_VERIFY).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.HEAD_NAME))) { + this.setHeadName(attrs.get(DictTagConstants.HEAD_NAME).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.HEAD_VALUE))) { + this.setHeadValue(attrs.get(DictTagConstants.HEAD_VALUE).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.HEAD_TYPE))) { + this.setHeadType(attrs.get(DictTagConstants.HEAD_TYPE).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.DEFAULT_VALUE))) { + this.setDefaultValue(attrs.get(DictTagConstants.DEFAULT_VALUE).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.WORKFLOW_FORM))) { + this.setWorkflowForm(attrs.get(DictTagConstants.WORKFLOW_FORM).toString()); + } + if (ObjectUtil.isNotNull(attrs.get(DictTagConstants.ITEM_NAME))) { + this.setItemName(attrs.get(DictTagConstants.ITEM_NAME).toString()); + } + } + } + + @Override + public void render() { + + } + + /** + * 获取字典类型 + * + * @return 字典类型 + * @author liuhanqing + * @date 2021/1/16 23:46 + */ + public SysDictType getDictType() { + // 根据字典类型编码去查询字典类型 + LambdaQueryWrapper dictTypeQueryWrapper = new LambdaQueryWrapper<>(); + dictTypeQueryWrapper.eq(SysDictType::getDictTypeCode, this.getDictTypeCode()); + dictTypeQueryWrapper.ne(SysDictType::getDelFlag, YesOrNotEnum.Y.getCode()); + return dictTypeService.getOne(dictTypeQueryWrapper); + } + + /** + * @return 根据字典类型返回字典集合 + * @author liuhanqing + * @date 2021/1/16 23:46 + */ + public List getDictList() { + // 查询字典列表 + LambdaQueryWrapper dictQueryWrapper = new LambdaQueryWrapper<>(); + dictQueryWrapper.eq(SysDict::getDictTypeCode, this.getDictTypeCode()); + dictQueryWrapper.ne(SysDict::getDelFlag, YesOrNotEnum.Y.getCode()); + dictQueryWrapper.orderByAsc(SysDict::getDictSort); + return dictService.list(dictQueryWrapper); + } +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictCheckBoxTag.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictCheckBoxTag.java new file mode 100644 index 000000000..bd886ea27 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictCheckBoxTag.java @@ -0,0 +1,70 @@ +package cn.stylefeng.roses.kernel.system.integration.core.tag; + +import cn.hutool.core.util.StrUtil; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDict; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDictType; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.List; + +/** + * checkbox字典组件 + * + * @author liuhanqing + * @date 2021/1/16 19:06 + */ +@Slf4j +public class SysDictCheckBoxTag extends SysDictBaseTag { + + @Override + public void render() { + // 初始属性 + initAttr(); + StringBuilder sb = new StringBuilder(); + // 当字典类型编码不为空 + if (StrUtil.isNotBlank(this.getDictTypeCode())) { + // 根据字典类型编码去查询字典类型 + SysDictType dictType = getDictType(); + // 判断字典类型不为空 + if (dictType != null) { + List lst = getDictList(); + // 默认选中值 + String defaultValue = this.getDefaultValue(); + // 循环字典列表 + for (SysDict option : lst) { + // 生成input的id + String id = this.getType() + "_" + this.getName() + "_" + option.getDictCode(); + // 拼接html + sb.append(" "); + } + } + } + try { + this.ctx.byteWriter.writeString(sb.toString()); + } catch (IOException e) { + log.error("checkbox字典初始化异常:",e); + } + } +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictRadioTag.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictRadioTag.java new file mode 100644 index 000000000..91e1e25d5 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictRadioTag.java @@ -0,0 +1,77 @@ +package cn.stylefeng.roses.kernel.system.integration.core.tag; + +import cn.hutool.core.util.StrUtil; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDict; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDictType; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.List; + +/** + * radio字典组件 + * + * @author liuhanqing + * @date 2021/1/16 19:59 + */ +@Slf4j +public class SysDictRadioTag extends SysDictBaseTag { + @Override + public void render() { + // 初始属性 + initAttr(); + StringBuilder sb = new StringBuilder(); + // 当字典类型编码不为空 + if (StrUtil.isNotBlank(this.getDictTypeCode())) { + // 根据字典类型编码去查询字典类型 + SysDictType dictType = getDictType(); + // 判断字典类型不为空 + if (dictType != null) { + List lst = getDictList(); + // 默认选中值 + String defaultValue = this.getDefaultValue(); + int index = 0; + for (SysDict option : lst) { + // 生成input的id + String id = this.getType() + "_" + this.getName() + "_" + option.getDictCode(); + // 拼接html + sb.append(" "); + index++; + } + } + } + try { + this.ctx.byteWriter.writeString(sb.toString()); + } catch (IOException e) { + log.error("select字典初始化异常:", e); + } + } +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictSelectTag.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictSelectTag.java new file mode 100644 index 000000000..728b868fd --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/core/tag/SysDictSelectTag.java @@ -0,0 +1,96 @@ +package cn.stylefeng.roses.kernel.system.integration.core.tag; + +import cn.hutool.core.util.StrUtil; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDict; +import cn.stylefeng.roses.kernel.dict.modular.entity.SysDictType; +import cn.stylefeng.roses.kernel.system.integration.core.enums.SelectTagHeadTypeEnum; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.List; + +/** + * select字典组件 + * + * @author liuhanqing + * @date 2021/1/16 19:37 + */ +@Slf4j +public class SysDictSelectTag extends SysDictBaseTag { + + @Override + public void render() { + // 初始属性 + initAttr(); + StringBuilder sb = new StringBuilder(); + // 当字典类型编码不为空 + if (StrUtil.isNotBlank(this.getDictTypeCode())) { + sb.append(""); + } + try { + this.ctx.byteWriter.writeString(sb.toString()); + } catch (IOException e) { + log.error("select字典初始化异常:",e); + } + } +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/api/ApiViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/api/ApiViewController.java new file mode 100644 index 000000000..bcc9d86f7 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/api/ApiViewController.java @@ -0,0 +1,28 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.api; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * API文档管理 + * + * @author fengshuonan + * @date 2021/1/14 21:05 + */ +@Controller +@ApiResource(name = "API文档管理") +public class ApiViewController { + + /** + * 编辑应用界面 + * + * @author fengshuonan + * @date 2021/1/6 13:37 + */ + @GetResource(name = "API文档界面", path = "/view/api") + public String apiIndex() { + return "/modular/system/api/api.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/app/AppViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/app/AppViewController.java new file mode 100644 index 000000000..d206eb009 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/app/AppViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.app; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 应用管理界面 + * + * @author fengshuonan + * @date 2021/1/6 13:32 + */ +@Controller +@ApiResource(name = "应用管理界面") +public class AppViewController { + + /** + * 应用管理首页 + * + * @author fengshuonan + * @date 2021/1/6 13:32 + */ + @GetResource(name = "应用管理首页", path = "/view/app") + public String appIndex() { + return "/modular/system/app/app.html"; + } + + /** + * 新增应用界面 + * + * @author fengshuonan + * @date 2021/1/6 13:37 + */ + @GetResource(name = "新增应用界面", path = "/view/app/add") + public String appAdd() { + return "/modular/system/app/app_add.html"; + } + + /** + * 编辑应用界面 + * + * @author fengshuonan + * @date 2021/1/6 13:37 + */ + @GetResource(name = "编辑应用界面", path = "/view/app/edit") + public String appEdit() { + return "/modular/system/app/app_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/common/CommonViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/common/CommonViewController.java new file mode 100644 index 000000000..c91d5001e --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/common/CommonViewController.java @@ -0,0 +1,46 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.common; + +import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; +import cn.stylefeng.roses.kernel.rule.exception.enums.defaults.DefaultBusinessExceptionEnum; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.system.integration.modular.system.common.pojo.CommonTreeRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; + +import javax.validation.Valid; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + +/** + * 通用界面 + * + * @author fengshuonan + * @date 2021/1/6 20:18 + */ +@Controller +@Slf4j +@ApiResource(name = "通用界面") +public class CommonViewController { + + /** + * 通用的树列表选择器 + * + * @author fengshuonan + * @date 2021/1/6 20:19 + */ + @GetResource(name = "通用的树列表选择器", path = "/view/common/tree") + public String commonTreeSelect(@Valid CommonTreeRequest commonTreeRequest, Model model) { + try { + model.addAttribute("formName", URLDecoder.decode(commonTreeRequest.getFormName(), "UTF-8")); + model.addAttribute("formId", URLDecoder.decode(commonTreeRequest.getFormId(), "UTF-8")); + model.addAttribute("treeUrl", URLDecoder.decode(commonTreeRequest.getTreeUrl(), "UTF-8")); + } catch (UnsupportedEncodingException e) { + log.error("解析url的参数出错!", e); + throw new ServiceException("guns-standalone-beetl", DefaultBusinessExceptionEnum.SYSTEM_RUNTIME_ERROR); + } + return "/component/tree_dlg.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/common/pojo/CommonTreeRequest.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/common/pojo/CommonTreeRequest.java new file mode 100644 index 000000000..7e729cd17 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/common/pojo/CommonTreeRequest.java @@ -0,0 +1,34 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.common.pojo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 通用树选择器界面的请求参数 + * + * @author fengshuonan + * @date 2021/1/6 20:20 + */ +@Data +public class CommonTreeRequest { + + /** + * 传递给上级页面的哪个字段,例如 parent.MenuInfoDlg.data.pcodeName + */ + @NotBlank(message = "fromName不能为空") + private String formName; + + /** + * 传递给上级页面的哪个id值,例如 parent.MenuInfoDlg.data.pid + */ + @NotBlank(message = "formId不能为空") + private String formId; + + /** + * 渲染出数据的url,例如/menu/selectMenuTreeList + */ + @NotBlank(message = "tree渲染的url参数不能为空") + private String treeUrl; + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/config/ConfigViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/config/ConfigViewController.java new file mode 100644 index 000000000..f32c1ee70 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/config/ConfigViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.config; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 系统配置相关页面渲染 + * + * @author jiawei + * @date 2021/1/10 14:28 + */ +@Controller +@ApiResource(name = "系统配置相关页面") +public class ConfigViewController { + + /** + * 系统配置-首页-视图 + * + * @author jiawei + * @date 2021/1/4 13:33 + */ + @GetResource(name = "系统配置-列表-视图", path = "/view/config") + public String indexView() { + return "/modular/system/config/config.html"; + } + + /** + * 系统配置—新增-视图 + * + * @author jiawei + * @date 2021/1/4 13:34 + */ + @GetResource(name = "系统配置—新增-视图", path = "/view/config/addView") + public String addView() { + return "/modular/system/config/sysConfig_add.html"; + } + + /** + * 系统配置-修改-视图 + * + * @author jiawei + * @date 2021/1/4 13:35 + */ + @GetResource(name = "系统配置-修改-视图", path = "/view/config/editView") + public String editView() { + return "/modular/system/config/sysConfig_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dashboard/DashboardViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dashboard/DashboardViewController.java new file mode 100644 index 000000000..29b6ff132 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dashboard/DashboardViewController.java @@ -0,0 +1,39 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.dashboard; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 工作台和分析页界面渲染 + * + * @author fengshuonan + * @date 2020/12/29 21:29 + */ +@Controller +@ApiResource(name = "工作台和分析页面") +public class DashboardViewController { + + /** + * 工作台 + * + * @author fengshuonan + * @date 2018/12/24 22:43 + */ + @GetResource(name = "工作台", path = "/view/dashboard/workplace", requiredPermission = false) + public String platform() { + return "/modular/system/dashboard/board_platform.html"; + } + + /** + * 分析页面 + * + * @author fengshuonan + * @date 2020/12/29 21:27 + */ + @GetResource(name = "分析页面", path = "/view/dashboard/analysis", requiredPermission = false) + public String analyse() { + return "/modular/system/dashboard/board_analyse.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dataCenter/dataCenterViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dataCenter/dataCenterViewController.java new file mode 100644 index 000000000..2bbe50fee --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dataCenter/dataCenterViewController.java @@ -0,0 +1,39 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.dataCenter; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 数据中心视图控制器 + * + * @author linjinfeng + * @date 2021/3/29 10:00 + */ +@Controller +@ApiResource(name = "数据中心导入导出相关的界面渲染") +public class dataCenterViewController { + + /** + * 基础数据-导出中心-视图 + * + * @author linjinfeng + * @date 2021/3/29 10:00 + */ + @GetResource(name = "基础数据-导出中心-视图", path = "/view/export") + public String exportView() { + return "/modular/system/dataCenter/exportCenter.html"; + } + + /** + * 基础数据-导入中心-视图 + * + * @author linjinfeng + * @date 2021/3/29 10:00 + */ + @GetResource(name = "基础数据-导出中心-视图", path = "/view/import") + public String importView() { + return "/modular/system/dataCenter/importCenter.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/datasource/DataSourceViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/datasource/DataSourceViewController.java new file mode 100644 index 000000000..649ecf433 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/datasource/DataSourceViewController.java @@ -0,0 +1,40 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.datasource; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 多数据源界面 + * + * @author fengshuonan + * @date 2021/1/23 21:45 + */ +@Controller +@ApiResource(name = "多数据源界面") +public class DataSourceViewController { + + /** + * 多数据源列表界面 + * + * @author fengshuonan + * @date 2021/1/23 21:45 + */ + @GetResource(name = "多数据源列表界面", path = "/view/datasource") + public String indexView() { + return "/modular/system/datasource/datasource.html"; + } + + /** + * 多数据源新增界面 + * + * @author fengshuonan + * @date 2021/1/23 21:59 + */ + @GetResource(name = "多数据源新增界面", path = "/view/datasource/add") + public String addView() { + return "/modular/system/datasource/datasource_add.html"; + } + + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dict/DictTypeViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dict/DictTypeViewController.java new file mode 100644 index 000000000..4fe53e073 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dict/DictTypeViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.dict; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 字典类型视图控制器 + * + * @author huangyao + * @date 2021/1/6 20:53 + **/ +@Controller +@ApiResource(name = "字典类型管理相关的界面渲染") +public class DictTypeViewController { + + /** + * 字典管理-视图 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "字典类型管理-列表-视图", path = "/view/dictType") + public String indexView() { + return "/modular/system/dict/dictType.html"; + } + + /** + * 字典类型管理-添加-视图 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "字典类型管理-添加-视图", path = "/view/dictType/addView") + public String addView() { + return "/modular/system/dict/dictType_add.html"; + } + + /** + * 字典类型管理-编辑-视图 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "字典类型管理-编辑-视图", path = "/view/dictType/editView") + public String editView() { + return "/modular/system/dict/dictType_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dict/DictViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dict/DictViewController.java new file mode 100644 index 000000000..848cd6b7e --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/dict/DictViewController.java @@ -0,0 +1,62 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.dict; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 字典视图控制器 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ +@Controller +@ApiResource(name = "字典管理相关的界面渲染") +public class DictViewController { + + /** + * 字典管理-列表-视图 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "字典管理-列表-视图", path = "/view/dict") + public String indexView() { + return "/modular/system/dict/dict.html"; + } + + /** + * 字典管理-添加-视图 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "字典管理-添加-视图", path = "/view/dict/addView") + public String addView() { + return "/modular/system/dict/dict_add.html"; + } + + /** + * 字典管理-添加系统配置字典-视图 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "字典管理-添加系统配置字典-视图", path = "/view/dict/addConfigView") + public String addConfigView() { + return "/modular/system/dict/dict_add_config.html"; + } + + + /** + * 字典管理-编辑-视图 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "字典管理-编辑-视图", path = "/view/dict/editView") + public String editView() { + return "/modular/system/dict/dict_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/error/ErrorViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/error/ErrorViewController.java new file mode 100644 index 000000000..7ea8c3e4c --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/error/ErrorViewController.java @@ -0,0 +1,30 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.error; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; + +/** + * 错误页面的跳转 + * + * @author fengshuonan + * @date 2021/1/1 21:20 + */ +@Controller +@ApiResource(name = "错误页面的跳转") +public class ErrorViewController { + + /** + * 跳转到session超时页面 + * + * @author fengshuonan + * @date 2021/1/1 21:21 + */ + @GetResource(name = "跳转到session超时页面", path = "/view/global/sessionError", requiredPermission = false, requiredLogin = false) + public String errorPageInfo(Model model) { + model.addAttribute("tips", "登陆超时,请您重新登陆!"); + return "/login.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/file/FileViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/file/FileViewController.java new file mode 100644 index 000000000..2176e890a --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/file/FileViewController.java @@ -0,0 +1,39 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.file; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 文件管理界面 + * + * @author lgq + * @date 2021/1/9 + */ +@Controller +@ApiResource(name = "文件管理界面") +public class FileViewController { + + /** + * 文件管理首页 + * + * @author lgq + * @date 2021/1/9 + */ + @GetResource(name = "文件管理首页", path = "/view/file") + public String fileIndex() { + return "/modular/system/fileInfo/file_info.html"; + } + + /** + * 文件详情页面 + * + * @author lgq + * @date 2021/1/9 + */ + @GetResource(name = "文件详情页面", path = "/view/fileInfoDetails") + public String details() { + return "/modular/system/fileInfo/file_info_details.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/i18n/TranslationViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/i18n/TranslationViewController.java new file mode 100644 index 000000000..beaea9d2f --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/i18n/TranslationViewController.java @@ -0,0 +1,61 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.i18n; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 多语言界面 + * + * @author fengshuonan + * @date 2021/1/24 19:15 + */ +@Controller +@ApiResource(name = "多语言界面") +public class TranslationViewController { + + /** + * 多语言主界面 + * + * @author fengshuonan + * @date 2021/1/24 19:15 + */ + @GetResource(name = "文件管理首页", path = "/view/i18n") + public String index() { + return "/modular/system/i18n/translation.html"; + } + + /** + * 多语言新增界面 + * + * @author fengshuonan + * @date 2021/1/24 19:16 + */ + @GetResource(name = "多语言新增界面", path = "/view/i18n/add") + public String add() { + return "/modular/system/i18n/translation_add.html"; + } + + /** + * 多语言编辑界面 + * + * @author fengshuonan + * @date 2021/1/24 19:16 + */ + @GetResource(name = "文件管理首页", path = "/view/i18n/edit") + public String edit() { + return "/modular/system/i18n/translation_edit.html"; + } + + /** + * 多语言增加语种界面 + * + * @author chenjinlong + * @date 2021/1/22 16:09 + */ + @GetResource(name = "多语言增加语种界面", path = "/view/i18n/addTranslationView") + public String addTranslationView() { + return "/modular/system/i18n/dict_add_translation.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/index/controller/IndexViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/index/controller/IndexViewController.java new file mode 100644 index 000000000..cfaee710e --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/index/controller/IndexViewController.java @@ -0,0 +1,89 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.index.controller; + +import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.system.integration.modular.system.index.service.IndexService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; + +import javax.annotation.Resource; + +/** + * 首页相关的界面渲染 + * + * @author fengshuonan + * @date 2020/12/27 16:23 + */ +@Controller +@ApiResource(name = "首页相关的界面渲染") +public class IndexViewController { + + @Resource + private IndexService indexService; + + /** + * 首页界面 + * + * @author fengshuonan + * @date 2020/12/13 17:19 + */ + @GetResource(name = "首页界面", path = "/", requiredLogin = false, requiredPermission = false, viewFlag = true) + public String indexView(Model model) { + + // 当前用户已经登录,跳转到首页 + if (LoginContext.me().hasLogin()) { + model.addAllAttributes(indexService.createIndexRenderAttributes()); + return "/index.html"; + } + + // 当前用户没有登录,跳转到登录页面 + return "/login.html"; + } + + /** + * 个人中心界面 + * + * @author fengshuonan + * @date 2020/12/29 21:53 + */ + @GetResource(name = "个人中心界面", path = "/view/personal", requiredPermission = false) + public String personal(Model model) { + model.addAllAttributes(indexService.createPersonInfoRenderAttributes()); + return "/modular/system/index/personal_info.html"; + } + + /** + * 锁屏界面 + * + * @author fengshuonan + * @date 2020/12/29 21:34 + */ + @GetResource(name = "锁屏界面", path = "/view/lock", requiredPermission = false) + public String lock() { + return "/modular/system/index/lock_screen.html"; + } + + /** + * 主题切换界面 + * + * @author fengshuonan + * @date 2020/12/29 21:42 + */ + @GetResource(name = "主题切换界面", path = "/view/theme", requiredPermission = false) + public String theme() { + return "/modular/system/index/theme.html"; + } + + /** + * 修改密码界面 + * + * @author fengshuonan + * @date 2020/12/29 21:42 + */ + @GetResource(name = "修改密码界面", path = "/view/changePassword", requiredPermission = false) + public String changePassword() { + return "/modular/system/index/change_password.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/index/service/IndexService.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/index/service/IndexService.java new file mode 100644 index 000000000..159e19f60 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/index/service/IndexService.java @@ -0,0 +1,145 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.index.service; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; +import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; +import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; +import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo; +import cn.stylefeng.roses.kernel.message.api.MessageApi; +import cn.stylefeng.roses.kernel.message.api.enums.MessageReadFlagEnum; +import cn.stylefeng.roses.kernel.message.api.pojo.request.MessageRequest; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.layui.LayuiAppIndexMenusVO; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.layui.LayuiIndexMenuTreeNode; +import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuService; +import cn.stylefeng.roses.kernel.system.modular.organization.entity.HrOrganization; +import cn.stylefeng.roses.kernel.system.modular.organization.service.HrOrganizationService; +import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 首页相关数据组装服务 + * + * @author fengshuonan + * @date 2020/12/27 18:25 + */ +@Service +public class IndexService { + + @Resource + private SysMenuService sysMenuService; + + @Resource + private SysUserService sysUserService; + + @Resource + private HrOrganizationService hrOrganizationService; + + @Resource + private MessageApi messageApi; + + /** + * 获取首页需要渲染的参数 + * + * @author fengshuonan + * @date 2021/1/1 18:27 + */ + public Map createIndexRenderAttributes() { + + HashMap renderMap = new HashMap<>(); + + LoginUser loginUser = LoginContext.me().getLoginUser(); + SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo(); + + // 渲染首页的菜单 + List layuiAppIndexMenus = sysMenuService.getLayuiIndexMenus(); + + // 将个人信息菜单单独去除掉 + this.removePersonalMenu(layuiAppIndexMenus); + + renderMap.put("layuiAppIndexMenus", layuiAppIndexMenus); + + // 获取首页的头像 + renderMap.put("avatar", sysUserService.getUserAvatarUrl(simpleUserInfo.getAvatar())); + + // 获取人员姓名 + renderMap.put("name", simpleUserInfo.getRealName()); + + // 获取登录用户ws-url + renderMap.put("wsUrl", loginUser.getWsUrl()); + + // 未读消息数量 + MessageRequest messageRequest = new MessageRequest(); + messageRequest.setReadFlag(MessageReadFlagEnum.UNREAD.getCode()); + renderMap.put("msgUnReadCount", messageApi.queryCountCurrentUser(messageRequest)); + + return renderMap; + } + + /** + * 创建个人中心页面需要渲染的值 + * + * @author fengshuonan + * @date 2021/1/1 18:38 + */ + public Map createPersonInfoRenderAttributes() { + + HashMap renderMap = new HashMap<>(); + renderMap.put("roleName", "角色空"); + renderMap.put("orgName", "组织架构空"); + + // 添加用户基本信息字段 + LoginUser loginUser = LoginContext.me().getLoginUser(); + SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo(); + renderMap.putAll(BeanUtil.beanToMap(simpleUserInfo)); + + // 角色名称 + List simpleRoleInfoList = loginUser.getSimpleRoleInfoList(); + if (ObjectUtil.isNotEmpty(simpleRoleInfoList)) { + String roleName = simpleRoleInfoList.get(0).getRoleName(); + renderMap.put("roleName", roleName); + } + + // 组织机构名称 + Long organizationId = loginUser.getOrganizationId(); + HrOrganization hrOrganization = hrOrganizationService.getById(organizationId); + if (hrOrganization != null) { + renderMap.put("orgName", hrOrganization.getOrgName()); + } + + // 渲染头像的url + renderMap.put("avatar", sysUserService.getUserAvatarUrl(simpleUserInfo.getAvatar())); + + return renderMap; + } + + /** + * 去除个人信息菜单显示 + * + * @author fengshuonan + * @date 2021/5/14 16:30 + */ + private void removePersonalMenu(List layuiAppIndexMenusVOS) { + + ArrayList menus = new ArrayList<>(); + + for (LayuiAppIndexMenusVO layuiAppIndexMenusVO : layuiAppIndexMenusVOS) { + if (layuiAppIndexMenusVO.getAppCode().equals("system")) { + List layuiIndexMenuTreeNodes = layuiAppIndexMenusVO.getLayuiIndexMenuTreeNodes(); + for (LayuiIndexMenuTreeNode layuiIndexMenuTreeNode : layuiIndexMenuTreeNodes) { + if (!layuiIndexMenuTreeNode.getMenuName().equals("个人信息")) { + menus.add(layuiIndexMenuTreeNode); + } + } + layuiAppIndexMenusVO.setLayuiIndexMenuTreeNodes(menus); + } + } + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/log/LogViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/log/LogViewController.java new file mode 100644 index 000000000..b984bc47e --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/log/LogViewController.java @@ -0,0 +1,39 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.log; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 业务日志视图控制器 + * + * @author chenjinlong + * @date 2021/1/13 19:45 + */ +@Controller +@ApiResource(name = "操作日志管理相关的界面渲染") +public class LogViewController { + + /** + * 操作日志管理列表 + * + * @author TSQ + * @date 2021/1/5 15:18 + */ + @GetResource(name = "操作日志管理列表", path = "/view/log") + public String indexView() { + return "/modular/system/log/log.html"; + } + + /** + * 业务日志详情-视图 + * + * @author chenjinlong + * @date 2021/1/13 19:45 + */ + @GetResource(name = "业务日志详情-视图", path = "/view/log/detailView") + public String detailView() { + return "/modular/system/log/log_detail.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/log/LoginLogViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/log/LoginLogViewController.java new file mode 100644 index 000000000..f6991df54 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/log/LoginLogViewController.java @@ -0,0 +1,28 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.log; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 登陆日志管理控制器界面渲染 + * + * @author TSQ + * @date 2021/1/5 14:42 + */ +@Controller +@ApiResource(name = "登陆日志管理相关的界面渲染") +public class LoginLogViewController { + + /** + * 登陆日志管理列表 + * + * @author TSQ + * @date 2021/1/5 15:17 + */ + @GetResource(name = "登陆日志管理列表", path = "/view/loginLog") + public String indexView() { + return "/modular/system/log/login_log.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/login/LoginViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/login/LoginViewController.java new file mode 100644 index 000000000..1e5565cb2 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/login/LoginViewController.java @@ -0,0 +1,33 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.login; + +import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 登录相关的界面渲染 + * + * @author fengshuonan + * @date 2020/12/27 16:23 + */ +@Controller +@ApiResource(name = "登录相关的接口") +public class LoginViewController { + + /** + * 登录界面 + * + * @author fengshuonan + * @date 2020/12/27 17:10 + */ + @GetResource(name = "登录界面", path = "/view/login", requiredPermission = false, requiredLogin = false) + public String login() { + if (LoginContext.me().hasLogin()) { + return "redirect:/"; + } else { + return "/login.html"; + } + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/menu/MenuButtonViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/menu/MenuButtonViewController.java new file mode 100644 index 000000000..701f1afc2 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/menu/MenuButtonViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.menu; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 菜单按钮管理界面 + * + * @author luojie + * @date 2021/1/9 16:11 + */ +@Controller +@ApiResource(name = "菜单按钮管理界面") +public class MenuButtonViewController { + + /** + * 菜单按钮管理首页 + * + * @author luojie + * @date 2021/1/9 16:13 + */ + @GetResource(name = "菜单管理首页", path = "/view/menuButton") + public String menuIndex() { + return "/modular/system/menu/button.html"; + } + + /** + * 新增菜单按钮界面 + * + * @author luojie + * @date 2021/1/9 13:56 + */ + @GetResource(name = "新增菜单按钮界面", path = "/view/menuButton/add") + public String menuAdd() { + return "/modular/system/menu/button_add.html"; + } + + /** + * 修改菜单按钮界面 + * + * @author luojie + * @date 2021/1/9 14:14 + */ + @GetResource(name = "修改菜单按钮界面", path = "/view/menuButton/edit") + public String menuEdit() { + return "/modular/system/menu/button_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/menu/MenuViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/menu/MenuViewController.java new file mode 100644 index 000000000..b03c0e213 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/menu/MenuViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.menu; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 菜单管理界面 + * + * @author fengshuonan + * @date 2021/1/6 16:43 + */ +@Controller +@ApiResource(name = "菜单管理界面") +public class MenuViewController { + + /** + * 菜单管理首页 + * + * @author fengshuonan + * @date 2021/1/6 13:32 + */ + @GetResource(name = "菜单管理首页", path = "/view/menu") + public String menuIndex() { + return "/modular/system/menu/menu.html"; + } + + /** + * 新增菜单界面 + * + * @author fengshuonan + * @date 2021/1/6 13:37 + */ + @GetResource(name = "新增菜单界面", path = "/view/menu/add") + public String menuAdd() { + return "/modular/system/menu/menu_add.html"; + } + + /** + * 修改菜单界面 + * + * @author fengshuonan + * @date 2021/1/6 13:37 + */ + @GetResource(name = "修改菜单界面", path = "/view/menu/edit") + public String menuEdit() { + return "/modular/system/menu/menu_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/message/MessageViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/message/MessageViewController.java new file mode 100644 index 000000000..ce123e594 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/message/MessageViewController.java @@ -0,0 +1,68 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.message; + +import cn.stylefeng.roses.kernel.message.api.MessageApi; +import cn.stylefeng.roses.kernel.message.api.enums.MessageReadFlagEnum; +import cn.stylefeng.roses.kernel.message.api.pojo.request.MessageRequest; +import cn.stylefeng.roses.kernel.message.api.pojo.response.MessageResponse; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 系统消息相关的界面渲染 + * + * @author liuhanqing + * @date 2021/1/11 19:37 + */ +@Controller +@ApiResource(name = "系统消息相关的界面渲染") +public class MessageViewController { + + @Resource + private MessageApi messageApi; + + /** + * 系统消息界面 + * + * @author liuhanqing + * @date 2021/1/10 17:42 + */ + @GetResource(name = "系统消息界面", path = "/view/message", requiredPermission = false) + public String message(Model model) { + MessageRequest messageRequest = new MessageRequest(); + messageRequest.setReadFlag(MessageReadFlagEnum.UNREAD.getCode()); + Integer messageCount = messageApi.queryCountCurrentUser(messageRequest); + List messageList = messageApi.queryListCurrentUser(messageRequest); + model.addAttribute("msgUnReadCount", messageCount); + model.addAttribute("msgUnReadList", messageList); + return "/modular/system/index/message.html"; + } + + /** + * 我的消息界面 + * + * @author liuhanqing + * @date 2021/1/12 20:22 + */ + @GetResource(name = "我的消息界面", path = "/view/message_list", requiredPermission = false) + public String indexView() { + return "/modular/system/message/message_list.html"; + } + + /** + * 我的消息界面 + * + * @author liuhanqing + * @date 2021/1/12 20:22 + */ + @GetResource(name = "我的消息界面", path = "/view/message_view", requiredPermission = false) + public String view(Model model) { + model.addAttribute("openType", "view"); + return "/modular/system/message/message_view.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/monitor/MonitorController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/monitor/MonitorController.java new file mode 100644 index 000000000..4474ab27b --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/monitor/MonitorController.java @@ -0,0 +1,47 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.monitor; + +import cn.stylefeng.roses.kernel.monitor.system.holder.SystemHardwareInfoHolder; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; + +import javax.annotation.Resource; + +/** + * 项目监控 + * + * @author chenli + * @date 2020/12/30 16:40 + */ +@Controller +@ApiResource(name = "项目监控") +public class MonitorController { + + @Resource + private SystemHardwareInfoHolder systemHardwareInfoHolder; + + /** + * 系统硬件信息页面 + * + * @author fengshuonan + * @date 2018/12/24 22:43 + */ + @GetResource(name = "服务器监控", path = "/view/monitor/systemInfo") + public String systemInfo(Model model) { + model.addAttribute("server", systemHardwareInfoHolder.getSystemHardwareInfo()); + return "/modular/system/monitor/systemInfo.html"; + } + + /** + * druid sql监控页面 + * + * @author chenli + * @date 2021/1/4 16:32 + */ + @GetResource(name = "SQL监控", path = "/view/monitor/druid") + public String druidInfo() { + return "/modular/system/monitor/druid.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/notice/NoticeViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/notice/NoticeViewController.java new file mode 100644 index 000000000..d32e2d815 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/notice/NoticeViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.notice; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 通知管理界面 + * + * @author liuhanqing + * @date 2021/1/8 20:55 + */ +@Controller +@ApiResource(name = "通知管理界面") +public class NoticeViewController { + + /** + * 通知管理首页 + * + * @author liuhanqing + * @date 2021/1/8 20:55 + */ + @GetResource(name = "通知管理列表", path = "/view/notice") + public String roleIndex() { + return "/modular/system/notice/notice.html"; + } + + /** + * 新增通知界面 + * + * @author liuhanqing + * @date 2021/1/8 20:57 + */ + @GetResource(name = "新增通知界面", path = "/view/notice/add") + public String roleAdd() { + return "/modular/system/notice/notice_add.html"; + } + + /** + * 编辑通知界面 + * + * @author liuhanqing + * @date 2021/1/8 20:57 + */ + @GetResource(name = "编辑通知界面", path = "/view/notice/edit") + public String roleEdit() { + return "/modular/system/notice/notice_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/online/OnlineUserViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/online/OnlineUserViewController.java new file mode 100644 index 000000000..226c1ac91 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/online/OnlineUserViewController.java @@ -0,0 +1,28 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.online; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 在线用户查看界面 + * + * @author fengshuonan + * @date 2021/1/11 22:02 + */ +@Controller +@ApiResource(name = "在线用户查看界面") +public class OnlineUserViewController { + + /** + * 在线用户查看界面 + * + * @author fengshuonan + * @date 2021/1/11 22:03 + */ + @GetResource(name = "在线用户查看界面", path = "/view/onlineUser") + public String onlineUser() { + return "/modular/system/onlineUser/online_user.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/organization/OrganizationViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/organization/OrganizationViewController.java new file mode 100644 index 000000000..2e2972b7a --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/organization/OrganizationViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.organization; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 组织机构管理控制器界面 + * + * @author chenjinlong + * @date 2020/12/28 9:28 + */ +@Controller +@ApiResource(name = "组织机构管理控制器界面") +public class OrganizationViewController { + + /** + * 机构管理-首页-视图 + * + * @author chenjinlong + * @date 2020/11/04 11:07 + */ + @GetResource(name = "机构管理-首页-视图", path = "/view/organization") + public String indexView() { + return "/modular/system/organization/organization.html"; + } + + /** + * 机构管理—新增-视图 + * + * @author chenjinlong + * @date 2020/11/04 11:07 + */ + @GetResource(name = "机构管理—新增-视图", path = "/view/organization/addView") + public String addView() { + return "/modular/system/organization/organization_add.html"; + } + + /** + * 机构管理_修改_视图 + * + * @author chenjinlong + * @date 2020/11/04 11:07 + */ + @GetResource(name = "机构管理-修改-视图", path = "/view/organization/editView") + public String editView() { + return "/modular/system/organization/organization_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/package-info.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/package-info.java new file mode 100644 index 000000000..e1c4ae53c --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/package-info.java @@ -0,0 +1,4 @@ +/** + * 这个包是Guns框架自带业务的代码 + */ +package cn.stylefeng.roses.kernel.system.integration.modular.system; diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/position/PositionViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/position/PositionViewController.java new file mode 100644 index 000000000..138664945 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/position/PositionViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.position; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 职位管理控制器 + * + * @author chenjinlong + * @date 2020/12/28 9:28 + */ +@Controller +@ApiResource(name = "职位管理相关的界面渲染") +public class PositionViewController { + + /** + * 职位管理-首页-视图 + * + * @author chenjinlong + * @date 2020/11/04 11:07 + */ + @GetResource(name = "职位管理-首页-视图", path = "/view/position") + public String indexView() { + return "/modular/system/position/position.html"; + } + + /** + * 职位管理-首页-视图 + * + * @author chenjinlong + * @date 2020/11/04 11:07 + */ + @GetResource(name = "职位管理-首页-视图", path = "/view/position/addView") + public String addView() { + return "/modular/system/position/position_add.html"; + } + + /** + * 职位管理-首页-视图 + * + * @author chenjinlong + * @date 2020/11/04 11:07 + */ + @GetResource(name = "职位管理-首页-视图", path = "/view/position/editView") + public String editView() { + return "/modular/system/position/position_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/resource/ResourceViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/resource/ResourceViewController.java new file mode 100644 index 000000000..5f54a7ba3 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/resource/ResourceViewController.java @@ -0,0 +1,39 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.resource; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 资源管理界面 + * + * @author fengshuonan + * @date 2021/1/8 21:59 + */ +@Controller +@ApiResource(name = "资源管理界面") +public class ResourceViewController { + + /** + * 资源管理首页 + * + * @author fengshuonan + * @date 2021/1/8 21:59 + */ + @GetResource(name = "资源管理首页", path = "/view/resource") + public String resourceIndex() { + return "/modular/system/resource/resource.html"; + } + + /** + * 资源管理详情 + * + * @author fengshuonan + * @date 2021/1/8 22:23 + */ + @GetResource(name = "资源管理详情", path = "/view/resource/detail") + public String resourceDetail() { + return "/modular/system/resource/resource_detail.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/role/RoleViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/role/RoleViewController.java new file mode 100644 index 000000000..7847a45ff --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/role/RoleViewController.java @@ -0,0 +1,83 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.role; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 角色管理界面 + * + * @author fengshuonan + * @date 2021/1/8 20:55 + */ +@Controller +@ApiResource(name = "角色管理界面") +public class RoleViewController { + + /** + * 角色管理首页 + * + * @author fengshuonan + * @date 2021/1/8 20:55 + */ + @GetResource(name = "应用管理首页", path = "/view/role") + public String roleIndex() { + return "/modular/system/role/role.html"; + } + + /** + * 新增角色界面 + * + * @author fengshuonan + * @date 2021/1/8 20:57 + */ + @GetResource(name = "新增角色界面", path = "/view/role/add") + public String roleAdd() { + return "/modular/system/role/role_add.html"; + } + + /** + * 编辑角色界面 + * + * @author fengshuonan + * @date 2021/1/8 20:57 + */ + @GetResource(name = "编辑角色界面", path = "/view/role/edit") + public String roleEdit() { + return "/modular/system/role/role_edit.html"; + } + + /** + * 修改数据范围界面 + * + * @author fengshuonan + * @date 2021/1/8 20:57 + */ + @GetResource(name = "修改数据范围界面", path = "/view/role/editDataScope") + public String roleEditDataScope() { + return "/modular/system/role/role_edit_data_scope.html"; + } + + /** + * 分配接口界面 + * + * @author majianguo + * @date 2021/1/9 11:43 + */ + @GetResource(name = "分配接口界面", path = "/view/role/assignApi") + public String roleAssignApi() { + return "/modular/system/role/role_assign_api.html"; + } + + /** + * 分配菜单和按钮界面 + * + * @author majianguo + * @date 2021/1/9 11:45 + */ + @GetResource(name = "分配菜单界面", path = "/view/role/assignMenuAndButtons") + public String roleAssignMenuButton() { + return "/modular/system/role/role_assign_menu_button.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/timer/TimersViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/timer/TimersViewController.java new file mode 100644 index 000000000..196a44554 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/timer/TimersViewController.java @@ -0,0 +1,50 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.timer; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 定时控制器 + * + * @author youyongkun + * @date 2021/1/6 3:56 下午 + */ +@Controller +@ApiResource(name = "定时管理相关的界面渲染") +public class TimersViewController { + + /** + * 定时管理-首页-视图 + * + * @author youyongkun + * @date 2021/1/6 4:28 下午 + */ + @GetResource(name = "定时管理-首页-视图", path = "/view/sysTimers") + public String indexView() { + return "/modular/system/timers/timers.html"; + } + + /** + * 定时管理-添加-视图 + * + * @author youyongkun + * @date 2021/1/6 4:28 下午 + */ + @GetResource(name = "定时管理-添加-视图", path = "/view/sysTimers/addView") + public String addView() { + return "/modular/system/timers/timers_add.html"; + } + + /** + * 定时管理-修改-视图 + * + * @author youyongkun + * @date 2021/1/6 4:28 下午 + */ + @GetResource(name = "定时管理-修改-视图", path = "/view/sysTimers/editView") + public String editView() { + return "/modular/system/timers/timers_edit.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/user/UserViewController.java b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/user/UserViewController.java new file mode 100644 index 000000000..570f66938 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/java/cn/stylefeng/roses/kernel/system/integration/modular/system/user/UserViewController.java @@ -0,0 +1,83 @@ +package cn.stylefeng.roses.kernel.system.integration.modular.system.user; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import org.springframework.stereotype.Controller; + +/** + * 用户管理控制器 + * + * @author chenjinlong + * @date 2021/1/7 19:09 + */ +@Controller +@ApiResource(name = "用户管理界面渲染") +public class UserViewController { + + /** + * 用户管理-首页-视图 + * + * @author chenjinlong + * @date 2021/1/7 19:09 + */ + @GetResource(name = "用户管理-首页-视图", path = "/view/user") + public String indexView() { + return "/modular/system/user/user.html"; + } + + /** + * 用户管理—新增-视图 + * + * @author chenjinlong + * @date 2021/1/7 19:09 + */ + @GetResource(name = "用户管理—新增-视图", path = "/view/user/addView") + public String addView() { + return "/modular/system/user/user_add.html"; + } + + /** + * 用户管理_修改_视图 + * + * @author chenjinlong + * @date 2021/1/7 19:09 + */ + @GetResource(name = "用户管理-修改-视图", path = "/view/user/editView") + public String editView() { + return "/modular/system/user/user_edit.html"; + } + + /** + * 用户管理-角色-视图 + * + * @author chenjinlong + * @date 2021/1/7 19:09 + */ + @GetResource(name = "用户管理-角色-视图", path = "/view/user/roleView") + public String roleView() { + return "/modular/system/user/user_role.html"; + } + + /** + * 用户管理-注册-视图 + * + * @author chenjinlong + * @date 2021/1/7 19:09 + */ + @GetResource(name = "用户管理-注册-视图", path = "/register", requiredPermission = false, requiredLogin = false) + public String registerView() { + return "/register.html"; + } + + /** + * 用户管理-找回密码-视图 + * + * @author chenjinlong + * @date 2021/1/7 19:09 + */ + @GetResource(name = "用户管理-找回密码-视图", path = "/forget", requiredPermission = false, requiredLogin = false) + public String forgetView() { + return "/forget.html"; + } + +} diff --git a/kernel-s-system/system-integration-beetl/src/main/resources/META-INF/spring.factories b/kernel-s-system/system-integration-beetl/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..dfb3c7138 --- /dev/null +++ b/kernel-s-system/system-integration-beetl/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + cn.stylefeng.roses.kernel.system.integration.config.BeetlErrorViewAutoConfiguration,\ + cn.stylefeng.roses.kernel.system.integration.config.BeetlAutoConfiguration diff --git a/kernel-s-system/system-integration-rest/README.md b/kernel-s-system/system-integration-rest/README.md new file mode 100644 index 000000000..e41ab5038 --- /dev/null +++ b/kernel-s-system/system-integration-rest/README.md @@ -0,0 +1 @@ +针对前后端分离版本项目,前端使用vue渲染的集成 \ No newline at end of file diff --git a/kernel-s-system/system-integration-rest/pom.xml b/kernel-s-system/system-integration-rest/pom.xml new file mode 100644 index 000000000..1a17e8868 --- /dev/null +++ b/kernel-s-system/system-integration-rest/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + cn.stylefeng.roses + kernel-s-system + 7.0.4 + ../pom.xml + + + system-integration-rest + + jar + + + + + + cn.stylefeng.roses + system-spring-boot-starter + ${roses.version} + + + + + diff --git a/kernel-s-system/system-integration-rest/src/main/java/cn/stylefeng/roses/kernel/system/integration/ErrorStaticJsonView.java b/kernel-s-system/system-integration-rest/src/main/java/cn/stylefeng/roses/kernel/system/integration/ErrorStaticJsonView.java new file mode 100644 index 000000000..ad590dcfd --- /dev/null +++ b/kernel-s-system/system-integration-rest/src/main/java/cn/stylefeng/roses/kernel/system/integration/ErrorStaticJsonView.java @@ -0,0 +1,35 @@ +package cn.stylefeng.roses.kernel.system.integration; + +import cn.stylefeng.roses.kernel.rule.pojo.response.ErrorResponseData; +import cn.stylefeng.roses.kernel.rule.util.ResponseRenderUtil; +import org.springframework.web.servlet.View; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** + * 当请求404的时候返回的错误界面 + * + * @author fengshuonan + * @date 2021/5/17 10:45 + */ +public class ErrorStaticJsonView implements View { + + @Override + public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { + if (response.isCommitted()) { + // response已经提交不能响应 + return; + } + + ErrorResponseData errorResponseData = new ErrorResponseData("404", "请求资源不存在"); + ResponseRenderUtil.renderJsonResponse(response, errorResponseData); + } + + @Override + public String getContentType() { + return "text/html"; + } + +} \ No newline at end of file diff --git a/kernel-s-system/system-integration-rest/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/RestErrorViewAutoConfiguration.java b/kernel-s-system/system-integration-rest/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/RestErrorViewAutoConfiguration.java new file mode 100644 index 000000000..7fb854158 --- /dev/null +++ b/kernel-s-system/system-integration-rest/src/main/java/cn/stylefeng/roses/kernel/system/integration/config/RestErrorViewAutoConfiguration.java @@ -0,0 +1,27 @@ +package cn.stylefeng.roses.kernel.system.integration.config; + +import cn.stylefeng.roses.kernel.system.integration.ErrorStaticJsonView; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 错误界面自动配置,一般用于404响应 + * + * @author fengshuonan + * @date 2021/5/17 11:16 + */ +@Configuration +public class RestErrorViewAutoConfiguration { + + /** + * 默认错误页面,返回json + * + * @author fengshuonan + * @date 2020/12/16 15:47 + */ + @Bean("error") + public ErrorStaticJsonView error() { + return new ErrorStaticJsonView(); + } + +} diff --git a/kernel-s-system/system-integration-rest/src/main/resources/META-INF/spring.factories b/kernel-s-system/system-integration-rest/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..50ea01f2b --- /dev/null +++ b/kernel-s-system/system-integration-rest/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + cn.stylefeng.roses.kernel.system.integration.config.RestErrorViewAutoConfiguration diff --git a/pom.xml b/pom.xml index 844023328..953dd9c0d 100644 --- a/pom.xml +++ b/pom.xml @@ -129,6 +129,7 @@ 1.6.2 3.0.7 5.7.1 + 3.3.2.RELEASE