From 146980fd2e74bb9f8472b3a291716f39b2f28745 Mon Sep 17 00:00:00 2001 From: lframework Date: Sat, 2 Nov 2024 18:57:33 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 - .../code/DefaultFlowGenerateCodeType.java | 6 -- .../code/DefaultGenerateCodeType.java | 12 --- .../DefaultSnowFlakeGenerateCodeType.java | 6 -- .../web/components/code/GenerateCodeType.java | 26 ------ .../generator/GenerateCodeFactory.java | 63 +++++-------- .../web/components/generator/Generator.java | 32 ------- .../handler/GenerateCodeRuleHandler.java | 45 ++++++++++ ...urrentDateTimeRuleGenerateCodeHandler.java | 43 +++++++++ ...ustomRandomStrGenerateCodeRuleHandler.java | 63 +++++++++++++ .../impl/FlowGenerateCodeRuleHandler.java} | 90 +++++++++++-------- .../SnowFlakeGenerateCodeRuleHandler.java | 39 ++++++++ .../StaticStrGenerateCodeRuleHandler.java | 41 +++++++++ .../impl/UUIDGenerateCodeRuleHandler.java | 34 +++++++ .../generator/impl/AbstractGenerator.java | 12 --- .../impl/AbstractSnowFlakeGenerator.java | 27 ------ .../generator/impl/DefaultFlowGenerator.java | 29 ------ .../generator/impl/DefaultGenerator.java | 48 ---------- .../impl/DefaultSnowFlakeGenerator.java | 24 ----- .../generator/rule/GenerateCodeRule.java | 5 ++ .../impl/CurrentDateTimeGenerateCodeRule.java | 19 ++++ .../impl/CustomRandomStrGenerateCodeRule.java | 24 +++++ .../rule/impl/FlowGenerateCodeRule.java | 34 +++++++ .../rule/impl/RandomIntGenerateCodeRule.java | 24 +++++ .../rule/impl/SnowFlakeGenerateCodeRule.java | 14 +++ .../rule/impl/StaticStrGenerateCodeRule.java | 19 ++++ .../rule/impl/UUIDGenerateCodeRule.java | 14 +++ .../web/components/validation/IsJson.java | 27 ++++++ .../components/validation/IsJsonArray.java | 27 ++++++ .../components/validation/IsJsonObject.java | 27 ++++++ .../validation/JsonArrayValidator.java | 19 ++++ .../validation/JsonObjectValidator.java | 19 ++++ .../components/validation/JsonValidator.java | 19 ++++ .../web/config/WebBeanAutoConfiguration.java | 62 +++++++------ .../properties/DefaultSettingProperties.java | 6 -- .../web/impl/GenerateCodeServiceImpl.java | 15 ---- .../web/service/GenerateCodeService.java | 19 ---- 37 files changed, 671 insertions(+), 365 deletions(-) delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultFlowGenerateCodeType.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultGenerateCodeType.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultSnowFlakeGenerateCodeType.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/code/GenerateCodeType.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/Generator.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java rename web-starter/src/main/java/com/lframework/starter/web/components/generator/{impl/AbstractFlowGenerator.java => handler/impl/FlowGenerateCodeRuleHandler.java} (35%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractGenerator.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractSnowFlakeGenerator.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultFlowGenerator.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultGenerator.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultSnowFlakeGenerator.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/GenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/FlowGenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/RandomIntGenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/StaticStrGenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/UUIDGenerateCodeRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJson.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonArray.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonObject.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonArrayValidator.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonObjectValidator.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonValidator.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/impl/GenerateCodeServiceImpl.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/service/GenerateCodeService.java diff --git a/README.md b/README.md index f536f04..62b0413 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ Jugg是用来开发业务系统的脚手架,将常用的开发框架整合并 ### 内置功能 * 菜单管理:维护系统菜单、权限。 * 部门管理:维护系统组织机构。 -* 岗位管理:维护系统人员所属岗位信息。 * 角色管理:维护角色人员所属角色信息。 * 用户管理:维护系统人员信息。 * 操作日志:查询系统人员的操作日志。 @@ -37,13 +36,11 @@ Jugg是用来开发业务系统的脚手架,将常用的开发框架整合并 以下是内置的Bean的介绍: * 菜单管理:SysMenuController、ISysMenuService(实现类:DefaultSysMenuServiceImpl) * 部门管理:SysDeptController、ISysDeptService(实现类:DefaultSysDeptServiceImpl) -* 岗位管理:SysPositionController、ISysPositionService(实现类:DefaultSysPositionServiceImpl) * 角色管理:SysRoleController、ISysRoleService(实现类:DefaultSysRoleServiceImpl) * 用户管理:SysUserController、ISysUserService(实现类:DefaultSysUserServiceImpl) * 操作日志:OpLogController、IOpLogsService(实现类:DefaultOpLogsServiceImpl) * 用户所属部门:ISysUserDeptService(实现类:DefaultSysUserDeptServiceImpl) * 用户所属角色:ISysUserRoleService(实现类:DefaultSysUserRoleServiceImpl) -* 用户所属岗位:ISysUserPositionService(实现类:DefaultSysUserPositionServiceImpl) * 角色授权相关:ISysRoleMenuService(实现类:DefaultSysRoleMenuServiceImpl)、IMenuService(实现类:DefaultMenuServiceImpl) 需要自定义哪些功能就重写哪个类并注册成Bean即可。 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultFlowGenerateCodeType.java b/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultFlowGenerateCodeType.java deleted file mode 100644 index 5cb0678..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultFlowGenerateCodeType.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.lframework.starter.web.components.code; - -public class DefaultFlowGenerateCodeType implements GenerateCodeType { - - private static final long serialVersionUID = 1L; -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultGenerateCodeType.java b/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultGenerateCodeType.java deleted file mode 100644 index fa87380..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultGenerateCodeType.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.lframework.starter.web.components.code; - -/** - * 默认生成类型 - * - * @author zmj - */ -public class DefaultGenerateCodeType implements GenerateCodeType { - - private static final long serialVersionUID = 1L; - -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultSnowFlakeGenerateCodeType.java b/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultSnowFlakeGenerateCodeType.java deleted file mode 100644 index 7b68b68..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/code/DefaultSnowFlakeGenerateCodeType.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.lframework.starter.web.components.code; - -public class DefaultSnowFlakeGenerateCodeType implements GenerateCodeType { - - private static final long serialVersionUID = 1L; -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/code/GenerateCodeType.java b/web-starter/src/main/java/com/lframework/starter/web/components/code/GenerateCodeType.java deleted file mode 100644 index 66a27b4..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/code/GenerateCodeType.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.lframework.starter.web.components.code; - -import java.io.Serializable; - -/** - * 单号生成类型 - * - * @author zmj - */ -public interface GenerateCodeType extends Serializable { - - /** - * 默认的单号生成类型 - */ - GenerateCodeType DEFAULT = new DefaultGenerateCodeType(); - - /** - * 流水号类型的单号生成类型 - */ - GenerateCodeType FLOW = new DefaultFlowGenerateCodeType(); - - /** - * 雪花算法的单号生成类型 - */ - GenerateCodeType SNOW_FLAKE = new DefaultSnowFlakeGenerateCodeType(); -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java index 62883d7..5ebfd6d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java @@ -1,11 +1,16 @@ package com.lframework.starter.web.components.generator; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.web.components.code.GenerateCodeType; import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.utils.JsonUtil; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** * 单号生成器Factory @@ -14,55 +19,35 @@ import java.util.concurrent.ConcurrentHashMap; */ public class GenerateCodeFactory { - public static final Map, Generator> GENERATOR_POOL = new ConcurrentHashMap<>(); + public static List getInstance(String configStr) { - public static Generator getInstance(GenerateCodeType type) { + Map handlerMap = ApplicationUtil.getBeansOfType( + GenerateCodeRuleHandler.class); - Generator generator = GENERATOR_POOL.get(type.getClass()); - if (generator == null) { - synchronized (GenerateCodeFactory.class) { - generator = GENERATOR_POOL.get(type.getClass()); - if (generator == null) { + JSONArray configArr = JsonUtil.parseArray(configStr); - generator = getGenrator(type); - if (generator == null) { - //如果未找到generator就使用默认generator - generator = getGenrator(GenerateCodeType.DEFAULT); - } + List results = new ArrayList<>(); - if (generator == null) { - throw new DefaultSysException("未找到" + type + "单号生成器!"); - } + for (int i = 0; i < configArr.size(); i++) { + JSONObject config = configArr.getJSONObject(i); - GENERATOR_POOL.put(type.getClass(), generator); - } + Integer type = config.getInt("type"); + if (type == null) { + throw new DefaultSysException("configStr {} 配置信息错误!"); } - } - - return generator; - } - private static Generator getGenrator(GenerateCodeType type) { - - Map generators = ApplicationUtil.getBeansOfType(Generator.class); - for (Generator value : generators.values()) { - if (!value.isSpecial()) { - // 优先匹配自定义生成器 - if (value.getType().getClass() == type.getClass()) { - return value; + Collection handlerList = handlerMap.values(); + for (GenerateCodeRuleHandler handler : handlerList) { + if (handler.match(type)) { + results.add(handler); } } } - for (Generator value : generators.values()) { - if (value.isSpecial()) { - // 匹配内置生成器 - if (value.getType().getClass() == type.getClass()) { - return value; - } - } + if (results.isEmpty()) { + throw new DefaultSysException("configStr {} 配置信息错误!"); } - return null; + return results; } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/Generator.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/Generator.java deleted file mode 100644 index 90efb6d..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/Generator.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.lframework.starter.web.components.generator; - -import com.lframework.starter.web.components.code.GenerateCodeType; - -/** - * 单号生成器 根据#getType进行类型比对 比对成功后,#generate进行单号生成 如果需要自定义单号生成器规则,步骤如下: 1、实现GenerateCodeType接口,定义类型 - * - * @see GenerateCodeType 2、实现Generator接口,定义生成器,然后注册成Bean - */ -public interface Generator { - - /** - * 获取类型 - * - * @return - */ - GenerateCodeType getType(); - - /** - * 生成code - * - * @return - */ - String generate(); - - /** - * 是否内置生成器 用于区分是内置的还是自定义的生成器 - * - * @return - */ - boolean isSpecial(); -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java new file mode 100644 index 0000000..a821dcb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.components.generator.handler; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; + +public interface GenerateCodeRuleHandler { + + /** + * 根据规则类型匹配 + * + * @param ruleType + * @return + */ + boolean match(Integer ruleType); + + /** + * 根据规则匹配 + * @param rule + * @return + */ + boolean match(GenerateCodeRule rule); + + /** + * 生成单号 + * + * @param rule 规则数据 + * @return + */ + String generate(T rule); + + /** + * 生成示例单号 + * + * @param rule + * @return + */ + String generateSimple(T rule); + + /** + * 解析规则 + * + * @param json + * @return + */ + T parseRule(String json); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java new file mode 100644 index 0000000..cdc18f9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.components.generator.handler.impl; + +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.components.generator.rule.impl.CurrentDateTimeGenerateCodeRule; +import com.lframework.starter.web.utils.JsonUtil; +import java.time.LocalDateTime; + +public class CurrentDateTimeRuleGenerateCodeHandler implements + GenerateCodeRuleHandler { + + @Override + public boolean match(Integer ruleType) { + return ruleType != null && ruleType == 1; + } + + @Override + public boolean match(GenerateCodeRule rule) { + return rule instanceof CurrentDateTimeGenerateCodeRule; + } + + @Override + public String generate(CurrentDateTimeGenerateCodeRule rule) { + return DateUtil.formatDateTime(LocalDateTime.now(), rule.getPattern()); + } + + @Override + public String generateSimple(CurrentDateTimeGenerateCodeRule rule) { + return generate(rule); + } + + @Override + public CurrentDateTimeGenerateCodeRule parseRule(String json) { + CurrentDateTimeGenerateCodeRule rule = JsonUtil.parseObject(json, + CurrentDateTimeGenerateCodeRule.class); + if (StringUtil.isBlank(rule.getPattern())) { + rule.setPattern("yyyyMMddHHmmss"); + } + return rule; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java new file mode 100644 index 0000000..df66fd2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.components.generator.handler.impl; + +import cn.hutool.core.util.RandomUtil; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.components.generator.rule.impl.CustomRandomStrGenerateCodeRule; +import com.lframework.starter.web.components.generator.rule.impl.RandomIntGenerateCodeRule; +import com.lframework.starter.web.utils.JsonUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class CustomRandomStrGenerateCodeRuleHandler implements + GenerateCodeRuleHandler { + + @Override + public boolean match(Integer ruleType) { + return ruleType != null && (ruleType == 2 || ruleType == 4); + } + + @Override + public boolean match(GenerateCodeRule rule) { + return rule instanceof CustomRandomStrGenerateCodeRule; + } + + @Override + public String generate(CustomRandomStrGenerateCodeRule rule) { + Integer len = rule.getLen() == null ? 1 : rule.getLen(); + char[] charArr = rule.getPool().toCharArray(); + List pool = new ArrayList<>(); + for (char c : charArr) { + pool.add(String.valueOf(c)); + } + List eles = RandomUtil.randomEles(pool, len); + return StringUtil.join(StringPool.EMPTY_STR, eles); + } + + @Override + public String generateSimple(CustomRandomStrGenerateCodeRule rule) { + return generate(rule); + } + + @Override + public CustomRandomStrGenerateCodeRule parseRule(String json) { + Map tmpMap = JsonUtil.parseMap(json, String.class, String.class); + CustomRandomStrGenerateCodeRule rule; + if ("2".equals(tmpMap.get("type"))) { + rule = JsonUtil.parseObject(json, + CustomRandomStrGenerateCodeRule.class); + } else { + rule = JsonUtil.parseObject(json, + RandomIntGenerateCodeRule.class); + } + + if (rule.getLen() == null) { + rule.setLen(1); + } + + return rule; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractFlowGenerator.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java similarity index 35% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractFlowGenerator.java rename to web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java index dd18433..7596375 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractFlowGenerator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java @@ -1,26 +1,23 @@ -package com.lframework.starter.web.components.generator.impl; +package com.lframework.starter.web.components.generator.handler.impl; import com.lframework.starter.common.exceptions.impl.DefaultClientException; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; -import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.common.tenant.TenantContextHolder; -import com.lframework.starter.web.components.code.GenerateCodeType; -import com.lframework.starter.web.components.generator.Generator; +import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.components.generator.rule.impl.FlowGenerateCodeRule; import com.lframework.starter.web.components.redis.RedisHandler; +import com.lframework.starter.web.utils.IdUtil; +import com.lframework.starter.web.utils.JsonUtil; import com.lframework.starter.web.utils.TenantUtil; -import java.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; -/** - * 流水号生成器 - * - * @author zmj - */ -public abstract class AbstractFlowGenerator extends AbstractGenerator implements Generator { +public class FlowGenerateCodeRuleHandler implements GenerateCodeRuleHandler { - private static final String LOCK_KEY = "flow_generator_index"; + private static final String LOCK_KEY = "flow_generator_index_"; @Autowired private RedisHandler redisHandler; @@ -29,57 +26,80 @@ public abstract class AbstractFlowGenerator extends AbstractGenerator implements private LockBuilder lockBuilder; @Override - public String generate() { + public boolean match(Integer ruleType) { + return ruleType != null && ruleType == 3; + } - GenerateCodeType type = getType(); - if (type == null) { - throw new DefaultSysException("code为null!"); - } - String lockerName = LOCK_KEY + type.getClass().getName(); - String nowStr = DateUtil.formatDate(LocalDate.now(), "yyyyMMdd"); + @Override + public boolean match(GenerateCodeRule rule) { + return rule instanceof FlowGenerateCodeRule; + } + + @Override + public String generate(FlowGenerateCodeRule rule) { + Integer codeLen = rule.getLen() == null ? 1 : rule.getLen(); + String lockerName = LOCK_KEY + rule.getKey(); String redisKey = - nowStr + "_" + (TenantUtil.enableTenant() ? TenantContextHolder.getTenantId() : "noTenant") - + "_" + lockerName; + lockerName + "_" + (TenantUtil.enableTenant() ? TenantContextHolder.getTenantId() + : "noTenant"); Locker locker = lockBuilder.buildLocker(redisKey + "_Locker", 60000L, 5000L); long no; if (locker.lock()) { try { - no = redisHandler.incr(redisKey, 1L); + no = redisHandler.incr(redisKey, rule.getStep()); } finally { locker.unLock(); } } else { throw new DefaultClientException("生成单号失败,请稍后重试!"); } - redisHandler.expire(redisKey, 86400000L); + redisHandler.expire(redisKey, rule.getExpireSeconds() * 1000L); String noStr = String.valueOf(no); - if (noStr.length() > getCodeLength()) { + if (noStr.length() > codeLen) { throw new DefaultSysException("单号超长!"); } StringBuilder builder = new StringBuilder(); - builder.append(getPreffix()).append(nowStr); - for (int i = 0, len = getCodeLength() - noStr.length(); i < len; i++) { + for (int i = 0, len = codeLen - noStr.length(); i < len; i++) { builder.append("0"); } return builder.append(noStr).toString(); } - /** - * 获取流水号长度 - * - * @return - */ - protected int getCodeLength() { + @Override + public String generateSimple(FlowGenerateCodeRule rule) { + Integer codeLen = rule.getLen() == null ? 1 : rule.getLen(); + String noStr = "1"; + StringBuilder builder = new StringBuilder(); + for (int i = 0, len = codeLen - noStr.length(); i < len; i++) { + builder.append("0"); + } - return 10; + return builder.append(noStr).toString(); } - protected String getPreffix() { + @Override + public FlowGenerateCodeRule parseRule(String json) { + FlowGenerateCodeRule rule = JsonUtil.parseObject(json, FlowGenerateCodeRule.class); + if (StringUtil.isBlank(rule.getKey())) { + rule.setKey(IdUtil.getUUID()); + } + + if (rule.getLen() == null) { + rule.setLen(10); + } + + if (rule.getStep() == null) { + rule.setStep(1); + } + + if (rule.getExpireSeconds() == null) { + rule.setExpireSeconds(24 * 60 * 60L); + } - return ""; + return rule; } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java new file mode 100644 index 0000000..d02c202 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java @@ -0,0 +1,39 @@ +package com.lframework.starter.web.components.generator.handler.impl; + +import com.lframework.starter.common.utils.IdWorker; +import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.components.generator.rule.impl.SnowFlakeGenerateCodeRule; +import org.springframework.beans.factory.annotation.Autowired; + +public class SnowFlakeGenerateCodeRuleHandler implements + GenerateCodeRuleHandler { + + @Autowired + private IdWorker idWorker; + + @Override + public boolean match(Integer ruleType) { + return ruleType != null && ruleType == 5; + } + + @Override + public boolean match(GenerateCodeRule rule) { + return rule instanceof SnowFlakeGenerateCodeRule; + } + + @Override + public String generate(SnowFlakeGenerateCodeRule rule) { + return idWorker.nextIdStr(); + } + + @Override + public String generateSimple(SnowFlakeGenerateCodeRule rule) { + return generate(rule); + } + + @Override + public SnowFlakeGenerateCodeRule parseRule(String json) { + return new SnowFlakeGenerateCodeRule(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java new file mode 100644 index 0000000..51e5ae6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.components.generator.handler.impl; + +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.components.generator.rule.impl.StaticStrGenerateCodeRule; +import com.lframework.starter.web.utils.JsonUtil; + +public class StaticStrGenerateCodeRuleHandler implements + GenerateCodeRuleHandler { + + @Override + public boolean match(Integer ruleType) { + return ruleType != null && ruleType == 6; + } + + @Override + public boolean match(GenerateCodeRule rule) { + return rule instanceof StaticStrGenerateCodeRule; + } + + @Override + public String generate(StaticStrGenerateCodeRule rule) { + + return rule.getVal(); + } + + @Override + public String generateSimple(StaticStrGenerateCodeRule rule) { + return generate(rule); + } + + @Override + public StaticStrGenerateCodeRule parseRule(String json) { + StaticStrGenerateCodeRule rule = JsonUtil.parseObject(json, StaticStrGenerateCodeRule.class); + + Assert.notNull(rule.getVal()); + + return rule; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java new file mode 100644 index 0000000..7042db6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.components.generator.handler.impl; + +import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.components.generator.rule.impl.UUIDGenerateCodeRule; +import com.lframework.starter.web.utils.IdUtil; + +public class UUIDGenerateCodeRuleHandler implements GenerateCodeRuleHandler { + + @Override + public boolean match(Integer ruleType) { + return ruleType != null && ruleType == 7; + } + + @Override + public boolean match(GenerateCodeRule rule) { + return rule instanceof UUIDGenerateCodeRule; + } + + @Override + public String generate(UUIDGenerateCodeRule rule) { + return IdUtil.getUUID(); + } + + @Override + public String generateSimple(UUIDGenerateCodeRule rule) { + return generate(rule); + } + + @Override + public UUIDGenerateCodeRule parseRule(String json) { + return new UUIDGenerateCodeRule(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractGenerator.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractGenerator.java deleted file mode 100644 index f1818e5..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.lframework.starter.web.components.generator.impl; - -import com.lframework.starter.web.components.generator.Generator; - -public abstract class AbstractGenerator implements Generator { - - @Override - public boolean isSpecial() { - - return false; - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractSnowFlakeGenerator.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractSnowFlakeGenerator.java deleted file mode 100644 index d94421e..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/AbstractSnowFlakeGenerator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.lframework.starter.web.components.generator.impl; - -import com.lframework.starter.common.utils.IdWorker; -import com.lframework.starter.web.components.generator.Generator; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * 单号生成器 - * - * @author zmj - */ -public abstract class AbstractSnowFlakeGenerator extends AbstractGenerator implements Generator { - - @Autowired - private IdWorker idWorker; - - @Override - public String generate() { - - return getPreffix() + idWorker.nextIdStr(); - } - - protected String getPreffix() { - - return ""; - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultFlowGenerator.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultFlowGenerator.java deleted file mode 100644 index 5e95707..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultFlowGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.lframework.starter.web.components.generator.impl; - -import com.lframework.starter.web.components.code.GenerateCodeType; -import com.lframework.starter.web.components.generator.Generator; -import org.springframework.stereotype.Component; - -/** - * 默认流水号生成器 流水号位数是10位,即:yyyyMMdd0000000001格式 - */ -public class DefaultFlowGenerator extends AbstractFlowGenerator implements Generator { - - @Override - public GenerateCodeType getType() { - - return GenerateCodeType.FLOW; - } - - @Override - protected int getCodeLength() { - - return 10; - } - - @Override - public boolean isSpecial() { - - return true; - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultGenerator.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultGenerator.java deleted file mode 100644 index 74f0e13..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultGenerator.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.lframework.starter.web.components.generator.impl; - -import com.lframework.starter.web.components.code.GenerateCodeType; -import com.lframework.starter.web.components.generator.Generator; -import com.lframework.starter.web.config.properties.DefaultSettingProperties; -import org.springframework.beans.factory.annotation.Autowired; - -/** - * 默认单号生成器 - * - * @author zmj - */ -public class DefaultGenerator extends AbstractSnowFlakeGenerator implements Generator { - - private DefaultSettingProperties defaultSettingProperties; - - @Autowired - private DefaultFlowGenerator defaultFlowGenerator; - - @Autowired - private DefaultSnowFlakeGenerator defaultSnowFlakeGenerator; - - @Override - public GenerateCodeType getType() { - - return GenerateCodeType.DEFAULT; - } - - @Override - public String generate() { - - if (defaultSettingProperties.getGeneratorType() == GeneratorType.FLOW) { - return defaultFlowGenerator.generate(); - } else { - return defaultSnowFlakeGenerator.generate(); - } - } - - @Override - public boolean isSpecial() { - - return true; - } - - public enum GeneratorType { - FLOW, SNOW_FLAKE - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultSnowFlakeGenerator.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultSnowFlakeGenerator.java deleted file mode 100644 index 9fde034..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/impl/DefaultSnowFlakeGenerator.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.lframework.starter.web.components.generator.impl; - -import com.lframework.starter.web.components.code.GenerateCodeType; -import com.lframework.starter.web.components.generator.Generator; - -/** - * 默认雪花算法单号生成器 - * - * @author zmj - */ -public class DefaultSnowFlakeGenerator extends AbstractSnowFlakeGenerator implements Generator { - - @Override - public GenerateCodeType getType() { - - return GenerateCodeType.SNOW_FLAKE; - } - - @Override - public boolean isSpecial() { - - return true; - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/GenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/GenerateCodeRule.java new file mode 100644 index 0000000..53bb71a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/GenerateCodeRule.java @@ -0,0 +1,5 @@ +package com.lframework.starter.web.components.generator.rule; + +public interface GenerateCodeRule { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java new file mode 100644 index 0000000..fd82605 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.components.generator.rule.impl; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import java.io.Serializable; +import lombok.Data; + +/** + * 当前时间生成规则 + */ +@Data +public class CurrentDateTimeGenerateCodeRule implements GenerateCodeRule, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 时间格式 + */ + private String pattern; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java new file mode 100644 index 0000000..30f6d8b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.components.generator.rule.impl; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import java.io.Serializable; +import lombok.Data; + +/** + * 自定义随机字符串生成规则 + */ +@Data +public class CustomRandomStrGenerateCodeRule implements GenerateCodeRule, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 字符池 + */ + private String pool; + + /** + * 长度 + */ + private Integer len; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/FlowGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/FlowGenerateCodeRule.java new file mode 100644 index 0000000..22685ca --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/FlowGenerateCodeRule.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.components.generator.rule.impl; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import java.io.Serializable; +import lombok.Data; + +/** + * 流水号生成规则 + */ +@Data +public class FlowGenerateCodeRule implements GenerateCodeRule, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 唯一标识 + */ + private String key; + + /** + * 长度 + */ + private Integer len; + + /** + * 步长 + */ + private Integer step; + + /** + * 过期秒数(过期后会从1重新计数) + */ + private Long expireSeconds; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/RandomIntGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/RandomIntGenerateCodeRule.java new file mode 100644 index 0000000..65f5192 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/RandomIntGenerateCodeRule.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.components.generator.rule.impl; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import java.io.Serializable; +import lombok.Data; + +/** + * 随机整数生成规则 + */ +@Data +public class RandomIntGenerateCodeRule extends CustomRandomStrGenerateCodeRule implements + GenerateCodeRule, Serializable { + + private static final long serialVersionUID = 1L; + + public RandomIntGenerateCodeRule() { + setPool("0123456789"); + } + + /** + * 长度 + */ + private Integer len; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java new file mode 100644 index 0000000..0288679 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java @@ -0,0 +1,14 @@ +package com.lframework.starter.web.components.generator.rule.impl; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import java.io.Serializable; +import lombok.Data; + +/** + * 雪花算法生成规则 + */ +@Data +public class SnowFlakeGenerateCodeRule implements GenerateCodeRule, Serializable { + + private static final long serialVersionUID = 1L; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/StaticStrGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/StaticStrGenerateCodeRule.java new file mode 100644 index 0000000..f1de619 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/StaticStrGenerateCodeRule.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.components.generator.rule.impl; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import java.io.Serializable; +import lombok.Data; + +/** + * 静态字符串生成规则 + */ +@Data +public class StaticStrGenerateCodeRule implements GenerateCodeRule, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 字符串 + */ + private String val; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/UUIDGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/UUIDGenerateCodeRule.java new file mode 100644 index 0000000..134a73d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/UUIDGenerateCodeRule.java @@ -0,0 +1,14 @@ +package com.lframework.starter.web.components.generator.rule.impl; + +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import java.io.Serializable; +import lombok.Data; + +/** + * UUID生成规则 + */ +@Data +public class UUIDGenerateCodeRule implements GenerateCodeRule, Serializable { + + private static final long serialVersionUID = 1L; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJson.java b/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJson.java new file mode 100644 index 0000000..a04b088 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJson.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.components.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.validation.Constraint; +import javax.validation.Payload; + +/** + * JSON类型 + * + * @author zmj + */ +@Target({ElementType.FIELD, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint(validatedBy = JsonValidator.class) +public @interface IsJson { + + Class[] groups() default {}; + + String message(); + + Class[] payload() default {}; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonArray.java b/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonArray.java new file mode 100644 index 0000000..db0c045 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonArray.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.components.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.validation.Constraint; +import javax.validation.Payload; + +/** + * JSONArray类型 + * + * @author zmj + */ +@Target({ElementType.FIELD, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint(validatedBy = JsonArrayValidator.class) +public @interface IsJsonArray { + + Class[] groups() default {}; + + String message(); + + Class[] payload() default {}; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonObject.java b/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonObject.java new file mode 100644 index 0000000..d92ae81 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonObject.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.components.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.validation.Constraint; +import javax.validation.Payload; + +/** + * JSONObject类型 + * + * @author zmj + */ +@Target({ElementType.FIELD, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint(validatedBy = JsonObjectValidator.class) +public @interface IsJsonObject { + + Class[] groups() default {}; + + String message(); + + Class[] payload() default {}; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonArrayValidator.java b/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonArrayValidator.java new file mode 100644 index 0000000..df9cf61 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonArrayValidator.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.components.validation; + +import cn.hutool.json.JSONUtil; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * JSONArray校验 如果参数是null 则通过校验 + * + * @author zmj + */ +public class JsonArrayValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + + return value == null || JSONUtil.isJsonArray(value); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonObjectValidator.java b/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonObjectValidator.java new file mode 100644 index 0000000..612e103 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonObjectValidator.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.components.validation; + +import cn.hutool.json.JSONUtil; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * JSONObject校验 如果参数是null 则通过校验 + * + * @author zmj + */ +public class JsonObjectValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + + return value == null || JSONUtil.isJsonObj(value); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonValidator.java b/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonValidator.java new file mode 100644 index 0000000..6c18219 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonValidator.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.components.validation; + +import cn.hutool.json.JSONUtil; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * JSON校验 如果参数是null 则通过校验 + * + * @author zmj + */ +public class JsonValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + + return value == null || JSONUtil.isJson(value); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java index 62d48cc..40f224e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java @@ -4,20 +4,20 @@ import com.lframework.starter.web.aop.ControllerAspector; import com.lframework.starter.web.aop.OpenApiAspect; import com.lframework.starter.web.aop.PermissionAspect; import com.lframework.starter.web.components.cache.CacheVariables; -import com.lframework.starter.web.components.generator.Generator; -import com.lframework.starter.web.components.generator.impl.DefaultFlowGenerator; -import com.lframework.starter.web.components.generator.impl.DefaultGenerator; -import com.lframework.starter.web.components.generator.impl.DefaultSnowFlakeGenerator; +import com.lframework.starter.web.components.generator.handler.impl.CurrentDateTimeRuleGenerateCodeHandler; +import com.lframework.starter.web.components.generator.handler.impl.CustomRandomStrGenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.handler.impl.FlowGenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.handler.impl.SnowFlakeGenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.handler.impl.StaticStrGenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.handler.impl.UUIDGenerateCodeRuleHandler; import com.lframework.starter.web.components.security.UserTokenResolver; import com.lframework.starter.web.components.upload.handler.UploadHandler; import com.lframework.starter.web.components.upload.handler.impl.CosUploadHandler; import com.lframework.starter.web.components.upload.handler.impl.LocalUploadHandler; import com.lframework.starter.web.components.upload.handler.impl.ObsUploadHandler; import com.lframework.starter.web.components.upload.handler.impl.OssUploadHandler; -import com.lframework.starter.web.impl.GenerateCodeServiceImpl; import com.lframework.starter.web.resp.InvokeResultErrorBuilderWrapper; import com.lframework.starter.web.resp.ResponseErrorBuilder; -import com.lframework.starter.web.service.GenerateCodeService; import com.lframework.starter.web.sign.CheckSignFactory; import com.lframework.starter.web.sign.DefaultCheckSignFactory; import org.springframework.context.annotation.Bean; @@ -42,21 +42,6 @@ public class WebBeanAutoConfiguration { return new PermissionAspect(); } - @Bean - public Generator defaultFlowGenerator() { - return new DefaultFlowGenerator(); - } - - @Bean - public Generator defaultSnowFlakeGenerator() { - return new DefaultSnowFlakeGenerator(); - } - - @Bean - public Generator defaultGenerator() { - return new DefaultGenerator(); - } - @Bean public UploadHandler cosUploadHandler() { return new CosUploadHandler(); @@ -77,11 +62,6 @@ public class WebBeanAutoConfiguration { return new OssUploadHandler(); } - @Bean - public GenerateCodeService generateCodeService() { - return new GenerateCodeServiceImpl(); - } - @Bean public ResponseErrorBuilder invokeResultBuilderWrapper() { return new InvokeResultErrorBuilderWrapper(); @@ -101,4 +81,34 @@ public class WebBeanAutoConfiguration { public UserTokenResolver userTokenResolver() { return new UserTokenResolver(); } + + @Bean + public CurrentDateTimeRuleGenerateCodeHandler currentDateTimeRuleGenerateHandler() { + return new CurrentDateTimeRuleGenerateCodeHandler(); + } + + @Bean + public CustomRandomStrGenerateCodeRuleHandler customRandomStrGenerateRuleHandler() { + return new CustomRandomStrGenerateCodeRuleHandler(); + } + + @Bean + public FlowGenerateCodeRuleHandler flowGenerateRuleHandler() { + return new FlowGenerateCodeRuleHandler(); + } + + @Bean + public SnowFlakeGenerateCodeRuleHandler snowFlakeGenerateRuleHandler() { + return new SnowFlakeGenerateCodeRuleHandler(); + } + + @Bean + public StaticStrGenerateCodeRuleHandler staticStrGenerateRuleHandler() { + return new StaticStrGenerateCodeRuleHandler(); + } + + @Bean + public UUIDGenerateCodeRuleHandler uuidGenerateRuleHandler() { + return new UUIDGenerateCodeRuleHandler(); + } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/properties/DefaultSettingProperties.java b/web-starter/src/main/java/com/lframework/starter/web/config/properties/DefaultSettingProperties.java index fba9836..59a8a67 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/properties/DefaultSettingProperties.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/properties/DefaultSettingProperties.java @@ -1,6 +1,5 @@ package com.lframework.starter.web.config.properties; -import com.lframework.starter.web.components.generator.impl.DefaultGenerator.GeneratorType; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -17,9 +16,4 @@ public class DefaultSettingProperties { * 默认的用户姓名,用于写入数据库时的createBy和updateBy的自动赋值,如果有登录人则取登录人姓名,如果没有则取默认用户姓名,如果不配置,默认是系统管理员 */ private String defaultUserName = "系统管理员"; - - /** - * 默认单号生成类型 FLOW:流水号 SNOW_FLAKE:雪花算法,如果不配置,默认是SNOW_FLAKE - */ - private GeneratorType generatorType = GeneratorType.SNOW_FLAKE; } diff --git a/web-starter/src/main/java/com/lframework/starter/web/impl/GenerateCodeServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/impl/GenerateCodeServiceImpl.java deleted file mode 100644 index d864d05..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/impl/GenerateCodeServiceImpl.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.lframework.starter.web.impl; - -import com.lframework.starter.web.components.code.GenerateCodeType; -import com.lframework.starter.web.components.generator.GenerateCodeFactory; -import com.lframework.starter.web.service.GenerateCodeService; -import org.springframework.stereotype.Service; - -public class GenerateCodeServiceImpl implements GenerateCodeService { - - @Override - public String generate(GenerateCodeType type) { - - return GenerateCodeFactory.getInstance(type).generate(); - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/GenerateCodeService.java b/web-starter/src/main/java/com/lframework/starter/web/service/GenerateCodeService.java deleted file mode 100644 index f8dd390..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/service/GenerateCodeService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.lframework.starter.web.service; - -import com.lframework.starter.web.components.code.GenerateCodeType; - -/** - * 生成单号Service - * - * @author zmj - */ -public interface GenerateCodeService extends BaseService { - - /** - * 生成code - * - * @param type - * @return - */ - String generate(GenerateCodeType type); -} -- Gitee From 0e0e2684a425af432c5d74c3f8b3e276d943532b Mon Sep 17 00:00:00 2001 From: lframework Date: Sat, 2 Nov 2024 22:53:24 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- activemq-starter/pom.xml | 2 +- cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/pom.xml | 2 +- pom.xml | 4 ++-- web-common/pom.xml | 2 +- web-starter/pom.xml | 2 +- websocket-starter/pom.xml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/activemq-starter/pom.xml b/activemq-starter/pom.xml index 20dc354..643f17d 100644 --- a/activemq-starter/pom.xml +++ b/activemq-starter/pom.xml @@ -6,7 +6,7 @@ com.lframework parent - 3.1.3 + 3.1.4 activemq-starter diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index 93ee9e3..1436f94 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.3 + 3.1.4 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 8061061..0133029 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.3 + 3.1.4 4.0.0 diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index b80250d..30f4e3f 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.3 + 3.1.4 mq-starter diff --git a/pom.xml b/pom.xml index 02d5d9b..3a324b8 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 3.1.3 + 3.1.4 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 3.1.3 + 3.1.4 1.18.10 1.7.21 1.1.7 diff --git a/web-common/pom.xml b/web-common/pom.xml index 4580776..ef02908 100644 --- a/web-common/pom.xml +++ b/web-common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.3 + 3.1.4 4.0.0 diff --git a/web-starter/pom.xml b/web-starter/pom.xml index 8499b7e..8671d52 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.3 + 3.1.4 4.0.0 diff --git a/websocket-starter/pom.xml b/websocket-starter/pom.xml index b5a7b9b..dc0c645 100644 --- a/websocket-starter/pom.xml +++ b/websocket-starter/pom.xml @@ -7,7 +7,7 @@ parent com.lframework - 3.1.3 + 3.1.4 websocket-starter -- Gitee From e56af1ebc97ecff77aa550f9c384565c24a985b6 Mon Sep 17 00:00:00 2001 From: lframework Date: Sat, 2 Nov 2024 23:48:39 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/GenerateCodeFactory.java | 60 ++++++++++++++++++- .../handler/GenerateCodeRuleHandler.java | 2 +- ...urrentDateTimeRuleGenerateCodeHandler.java | 2 +- ...ustomRandomStrGenerateCodeRuleHandler.java | 2 +- .../impl/FlowGenerateCodeRuleHandler.java | 2 +- .../SnowFlakeGenerateCodeRuleHandler.java | 2 +- .../StaticStrGenerateCodeRuleHandler.java | 2 +- .../impl/UUIDGenerateCodeRuleHandler.java | 2 +- 8 files changed, 66 insertions(+), 8 deletions(-) diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java index 5ebfd6d..65c93b3 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java @@ -6,6 +6,7 @@ import cn.hutool.json.JSONObject; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.web.common.utils.ApplicationUtil; import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; import com.lframework.starter.web.utils.JsonUtil; import java.util.ArrayList; import java.util.Collection; @@ -19,7 +20,49 @@ import java.util.Map; */ public class GenerateCodeFactory { - public static List getInstance(String configStr) { + public static String generate(String configStr) { + return generate(getRules(configStr)); + } + + public static String generate(List ruleList) { + Map handlerMap = ApplicationUtil.getBeansOfType( + GenerateCodeRuleHandler.class); + Collection handlerList = handlerMap.values(); + + StringBuilder builder = new StringBuilder(); + for (GenerateCodeRule rule : ruleList) { + for (GenerateCodeRuleHandler handler : handlerList) { + if (handler.match(rule)) { + builder.append(handler.generate(rule)); + } + } + } + + return builder.toString(); + } + + public static String generateExample(String configStr) { + return generateExample(getRules(configStr)); + } + + public static String generateExample(List ruleList) { + Map handlerMap = ApplicationUtil.getBeansOfType( + GenerateCodeRuleHandler.class); + Collection handlerList = handlerMap.values(); + + StringBuilder builder = new StringBuilder(); + for (GenerateCodeRule rule : ruleList) { + for (GenerateCodeRuleHandler handler : handlerList) { + if (handler.match(rule)) { + builder.append(handler.generateExample(rule)); + } + } + } + + return builder.toString(); + } + + public static List getHandlers(String configStr) { Map handlerMap = ApplicationUtil.getBeansOfType( GenerateCodeRuleHandler.class); @@ -50,4 +93,19 @@ public class GenerateCodeFactory { return results; } + + public static List getRules(String configStr) { + List ruleHandlerList = GenerateCodeFactory.getHandlers( + configStr); + JSONArray configArr = JsonUtil.parseArray(configStr); + + List results = new ArrayList<>(); + + for (int i = 0; i < ruleHandlerList.size(); i++) { + GenerateCodeRuleHandler ruleHandler = ruleHandlerList.get(i); + results.add(ruleHandler.parseRule(configArr.getStr(i))); + } + + return results; + } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java index a821dcb..4761f0f 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java @@ -33,7 +33,7 @@ public interface GenerateCodeRuleHandler { * @param rule * @return */ - String generateSimple(T rule); + String generateExample(T rule); /** * 解析规则 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java index cdc18f9..3701b28 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java @@ -27,7 +27,7 @@ public class CurrentDateTimeRuleGenerateCodeHandler implements } @Override - public String generateSimple(CurrentDateTimeGenerateCodeRule rule) { + public String generateExample(CurrentDateTimeGenerateCodeRule rule) { return generate(rule); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java index df66fd2..3bbe46d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java @@ -38,7 +38,7 @@ public class CustomRandomStrGenerateCodeRuleHandler implements } @Override - public String generateSimple(CustomRandomStrGenerateCodeRule rule) { + public String generateExample(CustomRandomStrGenerateCodeRule rule) { return generate(rule); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java index 7596375..99b4edd 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java @@ -70,7 +70,7 @@ public class FlowGenerateCodeRuleHandler implements GenerateCodeRuleHandler Date: Fri, 17 Jan 2025 00:31:46 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E5=A4=A7=E5=8D=87=E7=BA=A7=EF=BC=9A=201?= =?UTF-8?q?=E3=80=81=E9=9B=86=E6=88=90rabbitmq=202=E3=80=81=E9=83=A8?= =?UTF-8?q?=E5=88=86event=E6=94=B9=E7=94=A8mq=203=E3=80=81=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=BA=93=E5=AD=98=E9=A2=84=E8=AD=A6=204=E3=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B6=88=E6=81=AF=E4=B8=AD=E5=BF=83=205?= =?UTF-8?q?=E3=80=81=E8=A7=A3=E5=86=B3=E9=83=A8=E5=88=86=E5=B7=B2=E7=9F=A5?= =?UTF-8?q?bug=206=E3=80=81=E8=B0=83=E6=95=B4=E9=A1=B9=E7=9B=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - .../activemq/producer/ActiveMQProducer.java | 64 -------- cloud-starter/pom.xml | 2 +- .../cloud/resp/ApiInvokeResultBuilder.java | 2 +- common/pom.xml | 2 +- .../starter/common/locker/LockBuilder.java | 8 + .../activemq-starter}/pom.xml | 10 +- .../config/ActiveMqAutoConfiguration.java | 10 +- .../ActiveMqTenantInterceptor.java | 4 +- .../activemq/producer/ActiveMqProducer.java | 125 ++++++++++++++++ .../queue/ActiveMqQueueDefinition.java | 17 +++ .../src/main/java/lombok.config | 0 .../main/resources/META-INF/spring.factories | 2 +- mq-starter/mq-core/pom.xml | 21 +++ .../starter/mq/core/producer/MqProducer.java | 82 +++++++++++ .../mq/core/queue/QueueDefinition.java | 8 + mq-starter/pom.xml | 45 +++--- .../rabbitmq-starter}/pom.xml | 37 ++--- .../config/RabbitMqAutoConfiguration.java | 80 ++++++++++ .../config/TenantMethodInterceptor.java | 63 ++++++++ .../rabbitmq/producer/RabbitMqProducer.java | 138 ++++++++++++++++++ .../queue/RabbitMQQueueDefinition.java | 27 ++++ .../src/main/java/lombok.config | 0 .../main/resources/META-INF/spring.factories | 2 +- .../starter/mq/listener/MqListener.java | 5 - .../starter/mq/producer/MqProducer.java | 44 ------ pom.xml | 18 +-- web-starter/pom.xml | 12 +- .../web/annotations/constants/EncryType.java | 14 ++ .../starter/web/aop/OpenApiAspect.java | 3 +- .../web/components/cache/CacheVariables.java | 2 +- .../components/excel/ExcelImportListener.java | 10 +- .../generator/GenerateCodeFactory.java | 2 +- .../impl/FlowGenerateCodeRuleHandler.java | 2 +- .../web/components/locker/LockFactory.java | 3 +- .../redis/locker/RedisLockBuilder.java | 4 +- .../security/AbstractUserDetails.java | 2 +- .../security/CheckPermissionHandlerImpl.java | 2 - .../security/DefaultUserDetails.java | 2 +- .../components/security/LoginInterceptor.java | 7 - .../security/SecurityConstants.java | 2 +- .../components}/security/SecurityUtil.java | 10 +- .../web/components}/security/UserDetails.java | 2 +- .../security/UserDetailsService.java | 1 - .../tenant/TenantContextHolder.java | 10 +- .../upload/UploadHandlerFactory.java | 2 +- .../upload/handler/impl/CosUploadHandler.java | 7 +- .../upload/handler/impl/ObsUploadHandler.java | 7 +- .../upload/handler/impl/OssUploadHandler.java | 7 +- .../web/config/LettuceAutoConfiguration.java | 86 +++++++++-- .../web/config/MailAutoConfiguration.java | 6 +- .../web/config/SaTokenAutoConfiguration.java | 136 +++++++++++++++++ .../web/config/SwaggerAutoConfiguration.java | 2 +- .../config/WebCommonAutoConfiguration.java | 4 +- .../web/controller/BaseController.java | 4 +- .../starter/web}/event/ClearTenantEvent.java | 2 +- .../starter/web}/event/ReloadTenantEvent.java | 2 +- .../starter/web}/event/SetTenantEvent.java | 2 +- .../DefaultBaseEntityFillHandler.java | 4 +- .../interceptors/TenantInterceptorImpl.java | 10 +- .../starter/web/listeners/TenantListener.java | 6 +- .../starter/web/resp/InvokeResultBuilder.java | 2 +- .../starter/web/service/BaseMpService.java | 2 +- ...ameterService.java => SysConfService.java} | 2 +- .../web/sign/DefaultCheckSignFactory.java | 3 +- .../starter/web}/threads/DefaultCallable.java | 35 +++-- .../starter/web}/threads/DefaultRunnable.java | 35 +++-- .../starter/web}/utils/ApplicationUtil.java | 2 +- .../starter/web/utils/CacheUtil.java | 1 - .../starter/web/utils/DataSourceUtil.java | 1 - .../starter/web/utils/EncryptUtil.java | 1 - .../starter/web/utils/EnumUtil.java | 1 - .../starter/web/utils/FieldEncryptUtil.java | 23 +++ .../starter/web/utils/GroovyUtil.java | 1 - .../lframework/starter/web/utils/IdUtil.java | 1 - .../starter/web/utils/JsonUtil.java | 1 - .../starter/web/utils/TenantUtil.java | 1 - .../starter/web/utils/TransactionUtil.java | 1 - .../starter/web/utils/UploadUtil.java | 7 +- .../main/resources/META-INF/spring.factories | 4 +- websocket-starter/pom.xml | 2 +- .../components/WsDataPushWorker.java | 55 ++++--- .../components/WsDataPusherImpl.java | 2 +- .../starter/websocket/entity/WsSession.java | 3 +- .../websocket/events/UserConnectEvent.java | 2 +- .../websocket/events/UserDisConnectEvent.java | 2 +- .../starter/websocket/handler/WsHandler.java | 8 +- .../interceptor/WsHandshakeInterceptor.java | 4 +- 88 files changed, 1045 insertions(+), 351 deletions(-) delete mode 100644 activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMQProducer.java rename {activemq-starter => mq-starter/activemq-starter}/pom.xml (79%) rename activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMQAutoConfiguration.java => mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMqAutoConfiguration.java (49%) rename activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMQTenantInterceptor.java => mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java (86%) create mode 100644 mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java create mode 100644 mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/queue/ActiveMqQueueDefinition.java rename {activemq-starter => mq-starter/activemq-starter}/src/main/java/lombok.config (100%) rename {activemq-starter => mq-starter/activemq-starter}/src/main/resources/META-INF/spring.factories (50%) create mode 100644 mq-starter/mq-core/pom.xml create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/producer/MqProducer.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/queue/QueueDefinition.java rename {web-common => mq-starter/rabbitmq-starter}/pom.xml (41%) create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/queue/RabbitMQQueueDefinition.java rename {web-common => mq-starter/rabbitmq-starter}/src/main/java/lombok.config (100%) rename {web-common => mq-starter/rabbitmq-starter}/src/main/resources/META-INF/spring.factories (50%) delete mode 100644 mq-starter/src/main/java/com/lframework/starter/mq/listener/MqListener.java delete mode 100644 mq-starter/src/main/java/com/lframework/starter/mq/producer/MqProducer.java rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web/components}/security/AbstractUserDetails.java (97%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web/components}/security/DefaultUserDetails.java (81%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web/components}/security/SecurityConstants.java (91%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web/components}/security/SecurityUtil.java (90%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web/components}/security/UserDetails.java (94%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web/components}/tenant/TenantContextHolder.java (65%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/config/SaTokenAutoConfiguration.java rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web}/config/WebCommonAutoConfiguration.java (70%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web}/event/ClearTenantEvent.java (88%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web}/event/ReloadTenantEvent.java (96%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web}/event/SetTenantEvent.java (87%) rename web-starter/src/main/java/com/lframework/starter/web/service/{SysParameterService.java => SysConfService.java} (94%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web}/threads/DefaultCallable.java (38%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web}/threads/DefaultRunnable.java (36%) rename {web-common/src/main/java/com/lframework/starter/web/common => web-starter/src/main/java/com/lframework/starter/web}/utils/ApplicationUtil.java (98%) diff --git a/README.md b/README.md index 62b0413..e885572 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ Jugg是用来开发业务系统的脚手架,将常用的开发框架整合并 ### 项目构成 * common * web-starter -* web-common * gen * cloud-starter * mq-starter diff --git a/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMQProducer.java b/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMQProducer.java deleted file mode 100644 index bd23092..0000000 --- a/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMQProducer.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.lframework.starter.mq.activemq.producer; - -import com.lframework.starter.mq.producer.MqProducer; -import com.lframework.starter.web.common.tenant.TenantContextHolder; -import com.lframework.starter.web.common.utils.ApplicationUtil; -import com.lframework.starter.web.utils.TenantUtil; -import java.io.Serializable; -import javax.jms.Message; -import javax.jms.Session; -import org.apache.activemq.ScheduledMessage; -import org.springframework.jms.core.JmsMessagingTemplate; -import org.springframework.jms.core.JmsTemplate; - -/** - * ActiveMQ生产者 - * - * @author zmj - * @since 2022/8/25 - */ -public class ActiveMQProducer implements MqProducer { - - @Override - public void sendDelayMessage(String queue, Serializable data, long millis) { - - JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class); - template.send(queue, session -> { - - Message msg = session.createObjectMessage(data); - if (TenantUtil.enableTenant()) { - msg.setIntProperty("tenantId", TenantContextHolder.getTenantId()); - } - msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis); - msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000); - msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1); - return msg; - }); - } - - @Override - public void sendMessage(String queue, Serializable data) { - - JmsMessagingTemplate template = ApplicationUtil.getBean(JmsMessagingTemplate.class); - template.convertAndSend(queue, data); - } - - @Override - public void sendDelayMessage(String queue, long millis) { - JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class); - template.send(queue, session -> { - - Message msg = session.createTextMessage(); - msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis); - msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000); - msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1); - return msg; - }); - } - - @Override - public void sendMessage(String queue) { - JmsTemplate template = ApplicationUtil.getBean(JmsTemplate.class); - template.send(queue, Session::createTextMessage); - } -} diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index 1436f94..8d92c39 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.4 + 3.1.5 4.0.0 diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java index b61aed0..c445645 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java @@ -2,7 +2,7 @@ package com.lframework.starter.cloud.resp; import com.lframework.starter.common.exceptions.BaseException; import com.lframework.starter.cloud.constants.ResponseConstants; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; public class ApiInvokeResultBuilder { diff --git a/common/pom.xml b/common/pom.xml index 0133029..0cd7b3c 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.4 + 3.1.5 4.0.0 diff --git a/common/src/main/java/com/lframework/starter/common/locker/LockBuilder.java b/common/src/main/java/com/lframework/starter/common/locker/LockBuilder.java index e3150c2..6aae705 100644 --- a/common/src/main/java/com/lframework/starter/common/locker/LockBuilder.java +++ b/common/src/main/java/com/lframework/starter/common/locker/LockBuilder.java @@ -2,5 +2,13 @@ package com.lframework.starter.common.locker; public interface LockBuilder { + /** + * 构建锁 + * + * @param lockName 锁名称 + * @param expireTime 过期时间(毫秒)只有Redis锁会生效 + * @param waitTime 等待时间(毫秒)只有Redis锁会生效 + * @return + */ Locker buildLocker(String lockName, long expireTime, long waitTime); } diff --git a/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml similarity index 79% rename from activemq-starter/pom.xml rename to mq-starter/activemq-starter/pom.xml index 643f17d..93a3524 100644 --- a/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -4,9 +4,9 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + mq-starter com.lframework - parent - 3.1.4 + 3.1.5 activemq-starter @@ -19,7 +19,7 @@ true - mq-starter + mq-core com.lframework @@ -27,6 +27,10 @@ spring-boot-starter-activemq org.springframework.boot + + pooled-jms + org.messaginghub + \ No newline at end of file diff --git a/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMQAutoConfiguration.java b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMqAutoConfiguration.java similarity index 49% rename from activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMQAutoConfiguration.java rename to mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMqAutoConfiguration.java index 3fdca9f..aaad290 100644 --- a/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMQAutoConfiguration.java +++ b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/config/ActiveMqAutoConfiguration.java @@ -1,17 +1,17 @@ package com.lframework.starter.mq.activemq.config; -import com.lframework.starter.mq.activemq.producer.ActiveMQProducer; -import com.lframework.starter.mq.producer.MqProducer; +import com.lframework.starter.mq.activemq.producer.ActiveMqProducer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; +import org.springframework.jms.core.JmsTemplate; @EnableJms @Configuration -public class ActiveMQAutoConfiguration { +public class ActiveMqAutoConfiguration { @Bean - public ActiveMQProducer activeMQProducer() { - return new ActiveMQProducer(); + public ActiveMqProducer activeMqProducer(JmsTemplate jmsTemplate) { + return new ActiveMqProducer(jmsTemplate); } } diff --git a/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMQTenantInterceptor.java b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java similarity index 86% rename from activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMQTenantInterceptor.java rename to mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java index 3581c8d..cb4317e 100644 --- a/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMQTenantInterceptor.java +++ b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java @@ -1,7 +1,7 @@ package com.lframework.starter.mq.activemq.interceptors; import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.web.common.tenant.TenantContextHolder; +import com.lframework.starter.web.components.tenant.TenantContextHolder; import com.lframework.starter.web.utils.TenantUtil; import lombok.extern.slf4j.Slf4j; import org.apache.activemq.broker.ProducerBrokerExchange; @@ -9,7 +9,7 @@ import org.apache.activemq.broker.inteceptor.MessageInterceptor; import org.apache.activemq.command.Message; @Slf4j -public class ActiveMQTenantInterceptor implements MessageInterceptor { +public class ActiveMqTenantInterceptor implements MessageInterceptor { @Override public void intercept(ProducerBrokerExchange producerBrokerExchange, Message message) { diff --git a/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java new file mode 100644 index 0000000..d8e8184 --- /dev/null +++ b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java @@ -0,0 +1,125 @@ +package com.lframework.starter.mq.activemq.producer; + +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.mq.activemq.queue.ActiveMqQueueDefinition; +import com.lframework.starter.mq.core.producer.MqProducer; +import com.lframework.starter.mq.core.queue.QueueDefinition; +import com.lframework.starter.web.components.tenant.TenantContextHolder; +import com.lframework.starter.web.utils.TenantUtil; +import java.io.Serializable; +import javax.jms.Message; +import org.apache.activemq.ScheduledMessage; +import org.springframework.jms.core.JmsTemplate; + +/** + * ActiveMQ生产者 + * + * @author zmj + * @since 2022/8/25 + */ +public class ActiveMqProducer implements MqProducer { + + private final JmsTemplate jmsTemplate; + + public ActiveMqProducer(JmsTemplate jmsTemplate) { + this.jmsTemplate = jmsTemplate; + } + + @Override + public void sendDelayMessage(QueueDefinition definition, Serializable data, long millis) { + sendDelayMessage(definition, data, millis, TenantContextHolder.getTenantId()); + } + + @Override + public void sendMessage(QueueDefinition definition, Serializable data) { + sendMessage(definition, data, TenantContextHolder.getTenantId()); + } + + @Override + public void sendDelayMessage(QueueDefinition definition, long millis) { + sendDelayMessage(definition, millis, TenantContextHolder.getTenantId()); + } + + @Override + public void sendMessage(QueueDefinition definition) { + sendMessage(definition, TenantContextHolder.getTenantId()); + } + + @Override + public void sendDelayMessage(QueueDefinition definition, Serializable data, long millis, + Integer tenantId) { + Assert.isTrue(millis <= Integer.MAX_VALUE && millis >= 0); + + jmsTemplate.send(convertDefinition(definition), session -> { + + Message msg = session.createObjectMessage(data); + if (TenantUtil.enableTenant()) { + Assert.notNull(tenantId); + msg.setIntProperty("tenantId", tenantId); + } + msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis); + msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000); + msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1); + return msg; + }); + } + + @Override + public void sendMessage(QueueDefinition definition, Serializable data, Integer tenantId) { + + jmsTemplate.send(convertDefinition(definition), session -> { + + Message msg = session.createObjectMessage(data); + if (TenantUtil.enableTenant()) { + Assert.notNull(tenantId); + msg.setIntProperty("tenantId", tenantId); + } + return msg; + }); + } + + @Override + public void sendDelayMessage(QueueDefinition definition, long millis, Integer tenantId) { + Assert.isTrue(millis <= Integer.MAX_VALUE && millis >= 0); + + jmsTemplate.send(convertDefinition(definition), session -> { + + Message msg = session.createTextMessage(); + if (TenantUtil.enableTenant()) { + Assert.notNull(tenantId); + msg.setIntProperty("tenantId", tenantId); + } + msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, millis); + msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000); + msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1); + return msg; + }); + } + + @Override + public void sendMessage(QueueDefinition definition, Integer tenantId) { + jmsTemplate.send(convertDefinition(definition), session -> { + + Message msg = session.createTextMessage(); + if (TenantUtil.enableTenant()) { + Assert.notNull(tenantId); + msg.setIntProperty("tenantId", tenantId); + } + return msg; + }); + } + + private String convertDefinition(QueueDefinition definition) { + if (definition == null) { + throw new DefaultSysException("definition不能为空!"); + } + + if (definition instanceof ActiveMqQueueDefinition) { + return ((ActiveMqQueueDefinition) definition).getQueue(); + } else { + throw new DefaultSysException( + "没有找到" + definition.getClass().getName() + "对应的QueueDefinition"); + } + } +} diff --git a/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/queue/ActiveMqQueueDefinition.java b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/queue/ActiveMqQueueDefinition.java new file mode 100644 index 0000000..48cc6b6 --- /dev/null +++ b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/queue/ActiveMqQueueDefinition.java @@ -0,0 +1,17 @@ +package com.lframework.starter.mq.activemq.queue; + +import com.lframework.starter.mq.core.queue.QueueDefinition; +import lombok.Getter; + +@Getter +public class ActiveMqQueueDefinition implements QueueDefinition { + + /** + * 队列名 + */ + private String queue; + + public ActiveMqQueueDefinition(String queue) { + this.queue = queue; + } +} diff --git a/activemq-starter/src/main/java/lombok.config b/mq-starter/activemq-starter/src/main/java/lombok.config similarity index 100% rename from activemq-starter/src/main/java/lombok.config rename to mq-starter/activemq-starter/src/main/java/lombok.config diff --git a/activemq-starter/src/main/resources/META-INF/spring.factories b/mq-starter/activemq-starter/src/main/resources/META-INF/spring.factories similarity index 50% rename from activemq-starter/src/main/resources/META-INF/spring.factories rename to mq-starter/activemq-starter/src/main/resources/META-INF/spring.factories index ff53d28..b0d9603 100644 --- a/activemq-starter/src/main/resources/META-INF/spring.factories +++ b/mq-starter/activemq-starter/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lframework.starter.mq.activemq.config.ActiveMQAutoConfiguration \ No newline at end of file +org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lframework.starter.mq.activemq.config.ActiveMqAutoConfiguration \ No newline at end of file diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml new file mode 100644 index 0000000..68a78dd --- /dev/null +++ b/mq-starter/mq-core/pom.xml @@ -0,0 +1,21 @@ + + + + mq-starter + com.lframework + 3.1.5 + + + mq-core + 4.0.0 + 【${project.artifactId}】MQ基础依赖 + + + + web-starter + com.lframework + + + \ No newline at end of file diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/producer/MqProducer.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/producer/MqProducer.java new file mode 100644 index 0000000..b74df9f --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/producer/MqProducer.java @@ -0,0 +1,82 @@ +package com.lframework.starter.mq.core.producer; + +import com.lframework.starter.mq.core.queue.QueueDefinition; +import java.io.Serializable; + +/** + * MQ生产者 + * + * @author zmj + * @since 2022/8/25 + */ +public interface MqProducer { + + /** + * 发送延时消息 + * + * @param definition 队列 + * @param data 数据 + * @param millis 毫秒 + */ + void sendDelayMessage(QueueDefinition definition, Serializable data, long millis); + + /** + * 发送即时消息 + * + * @param definition 队列 + * @param data 数据 + */ + void sendMessage(QueueDefinition definition, Serializable data); + + /** + * 发送延时消息 + * + * @param definition 队列 + * @param millis 毫秒 + */ + void sendDelayMessage(QueueDefinition definition, long millis); + + /** + * 发送即时消息 + * + * @param definition 队列 + */ + void sendMessage(QueueDefinition definition); + + /** + * 发送延时消息 + * + * @param definition 队列 + * @param data 数据 + * @param millis 毫秒 + * @param tenantId 租户ID + */ + void sendDelayMessage(QueueDefinition definition, Serializable data, long millis, + Integer tenantId); + + /** + * 发送即时消息 + * + * @param definition 队列 + * @param data 数据 + * @param tenantId 租户ID + */ + void sendMessage(QueueDefinition definition, Serializable data, Integer tenantId); + + /** + * 发送延时消息 + * + * @param definition 队列 + * @param millis 毫秒 + * @param tenantId 租户ID + */ + void sendDelayMessage(QueueDefinition definition, long millis, Integer tenantId); + + /** + * 发送即时消息 + * + * @param definition 队列 + * @param tenantId 租户ID + */ + void sendMessage(QueueDefinition definition, Integer tenantId); +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/queue/QueueDefinition.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/queue/QueueDefinition.java new file mode 100644 index 0000000..9f8a1c2 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/queue/QueueDefinition.java @@ -0,0 +1,8 @@ +package com.lframework.starter.mq.core.queue; + +/** + * 队列定义 + */ +public interface QueueDefinition { + +} diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index 30f4e3f..0e3fc81 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,28 +5,37 @@ parent com.lframework - 3.1.4 + 3.1.5 mq-starter 4.0.0 - 【${project.artifactId}】集成MQ通用能力 + 【${project.artifactId}】集成MQ能力 + pom - - - org.springframework.boot - spring-boot-configuration-processor - true - + + mq-core + activemq-starter + rabbitmq-starter + - - web-starter - com.lframework - - - - pooled-jms - org.messaginghub - - + + + + com.lframework + mq-core + ${jugg.version} + + + com.lframework + activemq-starter + ${jugg.version} + + + com.lframework + rabbitmq-starter + ${jugg.version} + + + \ No newline at end of file diff --git a/web-common/pom.xml b/mq-starter/rabbitmq-starter/pom.xml similarity index 41% rename from web-common/pom.xml rename to mq-starter/rabbitmq-starter/pom.xml index ef02908..36e7bc4 100644 --- a/web-common/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -3,45 +3,30 @@ 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 + mq-starter com.lframework - 3.1.4 + 3.1.5 - 4.0.0 - web-common - 【${project.artifactId}】需要提供给外部系统使用的依赖 + rabbitmq-starter + 4.0.0 + 【${project.artifactId}】集成RabbitMQ能力 - - org.projectlombok - lombok - - org.springframework.boot - spring-boot-starter + spring-boot-configuration-processor + true - org.apache.commons - commons-pool2 + com.lframework + mq-core - cn.dev33 - sa-token-spring-boot-starter - - - - cn.dev33 - sa-token-dao-redis-jackson - - - - cn.dev33 - sa-token-alone-redis + org.springframework.boot + spring-boot-starter-amqp - \ No newline at end of file diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java new file mode 100644 index 0000000..9e72abe --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java @@ -0,0 +1,80 @@ +package com.lframework.starter.mq.rabbitmq.config; + +import com.lframework.starter.common.utils.ArrayUtil; +import com.lframework.starter.mq.rabbitmq.producer.RabbitMqProducer; +import org.aopalliance.aop.Advice; +import org.springframework.amqp.rabbit.annotation.EnableRabbit; +import org.springframework.amqp.rabbit.config.DirectRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.rabbit.retry.MessageRecoverer; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.amqp.DirectRabbitListenerContainerFactoryConfigurer; +import org.springframework.boot.autoconfigure.amqp.RabbitProperties; +import org.springframework.boot.autoconfigure.amqp.RabbitRetryTemplateCustomizer; +import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@EnableRabbit +@Configuration +public class RabbitMqAutoConfiguration { + + private final ObjectProvider messageConverter; + + private final ObjectProvider messageRecoverer; + + private final ObjectProvider retryTemplateCustomizers; + + private final RabbitProperties properties; + + RabbitMqAutoConfiguration(ObjectProvider messageConverter, + ObjectProvider messageRecoverer, + ObjectProvider retryTemplateCustomizers, RabbitProperties properties) { + this.messageConverter = messageConverter; + this.messageRecoverer = messageRecoverer; + this.retryTemplateCustomizers = retryTemplateCustomizers; + this.properties = properties; + } + + @Bean + public RabbitMqProducer activeMQProducer(RabbitTemplate rabbitTemplate) { + return new RabbitMqProducer(rabbitTemplate); + } + + @Bean(name = "rabbitListenerContainerFactory") + @ConditionalOnProperty(prefix = "spring.rabbitmq.listener", name = "type", havingValue = "simple", + matchIfMissing = true) + SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory( + SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { + SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); + configurer.configure(factory, connectionFactory); + factory.setAdviceChain(combineAdvice(factory.getAdviceChain())); + return factory; + } + + @Bean(name = "rabbitListenerContainerFactory") + @ConditionalOnProperty(prefix = "spring.rabbitmq.listener", name = "type", havingValue = "direct") + DirectRabbitListenerContainerFactory directRabbitListenerContainerFactory( + DirectRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { + DirectRabbitListenerContainerFactory factory = new DirectRabbitListenerContainerFactory(); + configurer.configure(factory, connectionFactory); + factory.setAdviceChain(combineAdvice(factory.getAdviceChain())); + return factory; + } + + private Advice[] combineAdvice(Advice[] advices) { + Advice[] result = new Advice[(ArrayUtil.isEmpty(advices) ? 0 : advices.length) + 1]; + if (!ArrayUtil.isEmpty(advices)) { + for (int i = 0; i < advices.length; i++) { + result[i] = advices[i]; + } + } + + result[result.length - 1] = new TenantMethodInterceptor(); + return result; + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java new file mode 100644 index 0000000..b668bf9 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java @@ -0,0 +1,63 @@ +package com.lframework.starter.mq.rabbitmq.config; + +import com.lframework.starter.common.utils.ArrayUtil; +import com.lframework.starter.web.components.tenant.TenantContextHolder; +import com.lframework.starter.web.utils.TenantUtil; +import lombok.extern.slf4j.Slf4j; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.amqp.core.Message; + +@Slf4j +public class TenantMethodInterceptor implements MethodInterceptor { + + @Override + public Object invoke(MethodInvocation invocation) throws Throwable { + boolean isTenantEnabled = TenantUtil.enableTenant(); + Integer tenantId = null; + + if (isTenantEnabled) { + log.debug("RabbitMq开始处理TenantId"); + tenantId = convertTenantId(invocation); + log.debug("TenantId = {}", tenantId); + if (tenantId != null) { + TenantContextHolder.setTenantId(tenantId); + } + } + + try { + return invocation.proceed(); + } catch (Throwable e) { + log.error(e.getMessage(), e); + throw e; + } finally { + TenantContextHolder.clearTenantId(); + } + } + + private Integer convertTenantId(MethodInvocation invocation) { + Object[] args = invocation.getArguments(); + + if (ArrayUtil.isEmpty(args)) { + return null; + } + + for (Object arg : args) { + if (arg instanceof Message) { + Message message = (Message) arg; + Object headerValue = message.getMessageProperties().getHeader("tenantId"); + if (headerValue instanceof Integer) { + return (Integer) headerValue; + } else if (headerValue != null) { + try { + return Integer.parseInt(headerValue.toString()); + } catch (NumberFormatException e) { + return null; + } + } + } + } + + return null; + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java new file mode 100644 index 0000000..47d346a --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java @@ -0,0 +1,138 @@ +package com.lframework.starter.mq.rabbitmq.producer; + +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.mq.core.producer.MqProducer; +import com.lframework.starter.mq.core.queue.QueueDefinition; +import com.lframework.starter.mq.rabbitmq.queue.RabbitMQQueueDefinition; +import com.lframework.starter.web.components.tenant.TenantContextHolder; +import com.lframework.starter.web.utils.TenantUtil; +import java.io.Serializable; +import org.springframework.amqp.rabbit.core.RabbitTemplate; + +/** + * RabbitMQ生产者 + * + * @author zmj + * @since 2022/8/25 + */ +public class RabbitMqProducer implements MqProducer { + + private final RabbitTemplate rabbitTemplate; + + private final Object EMPTY_MSG = new Object(); + + public RabbitMqProducer(RabbitTemplate rabbitTemplate) { + this.rabbitTemplate = rabbitTemplate; + } + + @Override + public void sendDelayMessage(QueueDefinition definition, Serializable data, long millis) { + + sendDelayMessage(definition, data, millis, TenantContextHolder.getTenantId()); + } + + @Override + public void sendMessage(QueueDefinition definition, Serializable data) { + + sendMessage(definition, data, TenantContextHolder.getTenantId()); + } + + @Override + public void sendDelayMessage(QueueDefinition definition, long millis) { + sendDelayMessage(definition, millis, TenantContextHolder.getTenantId()); + } + + @Override + public void sendMessage(QueueDefinition definition) { + sendMessage(definition, TenantContextHolder.getTenantId()); + } + + @Override + public void sendDelayMessage(QueueDefinition definition, Serializable data, long millis, + Integer tenantId) { + Assert.isTrue(millis <= Integer.MAX_VALUE && millis >= 0); + rabbitTemplate.convertAndSend( + convertExchange(definition), + convertRoutingKey(definition), + data, + m -> { + m.getMessageProperties().setDelay((int) millis); + if (TenantUtil.enableTenant() && tenantId != null) { + m.getMessageProperties().setHeader("tenantId", tenantId); + } + + return m; + } + ); + } + + @Override + public void sendMessage(QueueDefinition definition, Serializable data, Integer tenantId) { + rabbitTemplate.convertAndSend(convertExchange(definition), convertRoutingKey(definition), data, + m -> { + if (TenantUtil.enableTenant() && tenantId != null) { + m.getMessageProperties().setHeader("tenantId", tenantId); + } + + return m; + }); + } + + @Override + public void sendDelayMessage(QueueDefinition definition, long millis, Integer tenantId) { + Assert.isTrue(millis <= Integer.MAX_VALUE && millis >= 0); + rabbitTemplate.convertAndSend( + convertExchange(definition), + convertRoutingKey(definition), + EMPTY_MSG, + m -> { + m.getMessageProperties().setDelay((int) millis); + + if (TenantUtil.enableTenant() && tenantId != null) { + m.getMessageProperties().setHeader("tenantId", tenantId); + } + + return m; + } + ); + } + + @Override + public void sendMessage(QueueDefinition definition, Integer tenantId) { + rabbitTemplate.convertAndSend(convertExchange(definition), convertRoutingKey(definition), + EMPTY_MSG, m -> { + if (TenantUtil.enableTenant() && tenantId != null) { + m.getMessageProperties().setHeader("tenantId", tenantId); + } + + return m; + }); + } + + private String convertExchange(QueueDefinition definition) { + if (definition == null) { + throw new DefaultSysException("definition不能为空!"); + } + + if (definition instanceof RabbitMQQueueDefinition) { + return ((RabbitMQQueueDefinition) definition).getExchange(); + } else { + throw new DefaultSysException( + "没有找到" + definition.getClass().getName() + "对应的QueueDefinition"); + } + } + + private String convertRoutingKey(QueueDefinition definition) { + if (definition == null) { + throw new DefaultSysException("definition不能为空!"); + } + + if (definition instanceof RabbitMQQueueDefinition) { + return ((RabbitMQQueueDefinition) definition).getRoutingKey(); + } else { + throw new DefaultSysException( + "没有找到" + definition.getClass().getName() + "对应的QueueDefinition"); + } + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/queue/RabbitMQQueueDefinition.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/queue/RabbitMQQueueDefinition.java new file mode 100644 index 0000000..707109a --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/queue/RabbitMQQueueDefinition.java @@ -0,0 +1,27 @@ +package com.lframework.starter.mq.rabbitmq.queue; + +import com.lframework.starter.mq.core.queue.QueueDefinition; +import lombok.Getter; + +@Getter +public class RabbitMQQueueDefinition implements QueueDefinition { + + /** + * 交换机名 + */ + private final String exchange; + + /** + * 路由键 + */ + private String routingKey; + + public RabbitMQQueueDefinition(String exchange) { + this.exchange = exchange; + } + + public RabbitMQQueueDefinition(String exchange, String routingKey) { + this.exchange = exchange; + this.routingKey = routingKey; + } +} diff --git a/web-common/src/main/java/lombok.config b/mq-starter/rabbitmq-starter/src/main/java/lombok.config similarity index 100% rename from web-common/src/main/java/lombok.config rename to mq-starter/rabbitmq-starter/src/main/java/lombok.config diff --git a/web-common/src/main/resources/META-INF/spring.factories b/mq-starter/rabbitmq-starter/src/main/resources/META-INF/spring.factories similarity index 50% rename from web-common/src/main/resources/META-INF/spring.factories rename to mq-starter/rabbitmq-starter/src/main/resources/META-INF/spring.factories index 2d31cb3..258ac18 100644 --- a/web-common/src/main/resources/META-INF/spring.factories +++ b/mq-starter/rabbitmq-starter/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lframework.starter.web.common.config.WebCommonAutoConfiguration \ No newline at end of file +org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lframework.starter.mq.rabbitmq.config.RabbitMqAutoConfiguration \ No newline at end of file diff --git a/mq-starter/src/main/java/com/lframework/starter/mq/listener/MqListener.java b/mq-starter/src/main/java/com/lframework/starter/mq/listener/MqListener.java deleted file mode 100644 index 8d94934..0000000 --- a/mq-starter/src/main/java/com/lframework/starter/mq/listener/MqListener.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.lframework.starter.mq.listener; - -public interface MqListener { - -} diff --git a/mq-starter/src/main/java/com/lframework/starter/mq/producer/MqProducer.java b/mq-starter/src/main/java/com/lframework/starter/mq/producer/MqProducer.java deleted file mode 100644 index fb3e3eb..0000000 --- a/mq-starter/src/main/java/com/lframework/starter/mq/producer/MqProducer.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.lframework.starter.mq.producer; - -import java.io.Serializable; - -/** - * MQ生产者 - * - * @author zmj - * @since 2022/8/25 - */ -public interface MqProducer { - - /** - * 发送延时消息 - * - * @param queue 队列名 - * @param data 数据 - * @param millis 毫秒 - */ - void sendDelayMessage(String queue, Serializable data, long millis); - - /** - * 发送即时消息 - * - * @param queue 队列名 - * @param data 数据 - */ - void sendMessage(String queue, Serializable data); - - /** - * 发送延时消息 - * - * @param queue 队列名 - * @param millis 毫秒 - */ - void sendDelayMessage(String queue, long millis); - - /** - * 发送即时消息 - * - * @param queue 队列名 - */ - void sendMessage(String queue); -} diff --git a/pom.xml b/pom.xml index 3a324b8..7f0482a 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 3.1.4 + 3.1.5 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 3.1.4 + 3.1.5 1.18.10 1.7.21 1.1.7 @@ -56,10 +56,8 @@ common web-starter - web-common cloud-starter mq-starter - activemq-starter websocket-starter @@ -130,12 +128,6 @@ ${jugg.version} - - com.lframework - web-common - ${jugg.version} - - com.lframework web-starter @@ -154,12 +146,6 @@ ${jugg.version} - - com.lframework - activemq-starter - ${jugg.version} - - com.lframework websocket-starter diff --git a/web-starter/pom.xml b/web-starter/pom.xml index 8671d52..5132b8f 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.4 + 3.1.5 4.0.0 @@ -48,11 +48,6 @@ common - - com.lframework - web-common - - org.springframework.boot spring-boot-starter-web @@ -161,11 +156,6 @@ sa-token-dao-redis-jackson - - cn.dev33 - sa-token-alone-redis - - com.github.xiaoymin knife4j-spring-boot-starter diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/constants/EncryType.java b/web-starter/src/main/java/com/lframework/starter/web/annotations/constants/EncryType.java index 8b90a46..935a91b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/constants/EncryType.java +++ b/web-starter/src/main/java/com/lframework/starter/web/annotations/constants/EncryType.java @@ -5,4 +5,18 @@ public enum EncryType { AUTO, // 密码 PASSWORD, + //中文名 + CHINESE_NAME, + //身份证号 + ID_CARD, + //座机号 + FIXED_PHONE, + //手机号 + MOBILE_PHONE, + //电子邮件 + EMAIL, + //中国大陆车牌,包含普通车辆、新能源车辆 + CAR_LICENSE, + //银行卡 + BANK_CARD } diff --git a/web-starter/src/main/java/com/lframework/starter/web/aop/OpenApiAspect.java b/web-starter/src/main/java/com/lframework/starter/web/aop/OpenApiAspect.java index 223f44f..4ebf004 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/aop/OpenApiAspect.java +++ b/web-starter/src/main/java/com/lframework/starter/web/aop/OpenApiAspect.java @@ -6,7 +6,7 @@ import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.web.annotations.OpenApi; import com.lframework.starter.web.sign.CheckSignFactory; import com.lframework.starter.web.sign.CheckSignHandler; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; import com.lframework.starter.web.vo.OpenApiReqVo; import java.util.Arrays; import java.util.List; @@ -18,7 +18,6 @@ import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; /** * OpenApi切面 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/cache/CacheVariables.java b/web-starter/src/main/java/com/lframework/starter/web/components/cache/CacheVariables.java index 7d13ebd..e7262cc 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/cache/CacheVariables.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/cache/CacheVariables.java @@ -1,7 +1,7 @@ package com.lframework.starter.web.components.cache; import com.lframework.starter.common.constants.StringPool; -import com.lframework.starter.web.common.tenant.TenantContextHolder; +import com.lframework.starter.web.components.tenant.TenantContextHolder; import com.lframework.starter.web.utils.TenantUtil; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java b/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java index 8b03c72..ae18647 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java @@ -9,8 +9,8 @@ import com.lframework.starter.common.utils.NumberUtil; import com.lframework.starter.common.utils.ReflectUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.annotations.excel.ExcelRequired; -import com.lframework.starter.web.common.utils.ApplicationUtil; -import com.lframework.starter.web.service.SysParameterService; +import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.ExcelImportUtil; import com.lframework.starter.web.utils.TransactionUtil; import java.lang.reflect.Field; @@ -27,8 +27,8 @@ import org.springframework.transaction.TransactionStatus; @Slf4j public abstract class ExcelImportListener extends ExcelEventListener { - private final SysParameterService sysParameterService = ApplicationUtil.getBean( - SysParameterService.class); + private final SysConfService sysConfService = ApplicationUtil.getBean( + SysConfService.class); /** * 数据 */ @@ -64,7 +64,7 @@ public abstract class ExcelImportListener extends ExcelEve this.totalRows = Math.max(0, context.readSheetHolder().getApproximateTotalRowNumber() - 1); if (limitRows == null) { this.limitRows = Integer.valueOf( - sysParameterService.findRequiredByKey("excel-import.max-size")); + sysConfService.findRequiredByKey("excel-import.max-size")); } if (this.totalRows == 0) { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java index 65c93b3..7f6542e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java @@ -4,7 +4,7 @@ package com.lframework.starter.web.components.generator; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; import com.lframework.starter.web.utils.JsonUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java index 99b4edd..13cb456 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java @@ -5,7 +5,7 @@ import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.common.tenant.TenantContextHolder; +import com.lframework.starter.web.components.tenant.TenantContextHolder; import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; import com.lframework.starter.web.components.generator.rule.impl.FlowGenerateCodeRule; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/locker/LockFactory.java b/web-starter/src/main/java/com/lframework/starter/web/components/locker/LockFactory.java index 2f3d14e..7d4784d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/locker/LockFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/locker/LockFactory.java @@ -3,8 +3,7 @@ package com.lframework.starter.web.components.locker; import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.common.utils.ApplicationUtil; -import org.springframework.stereotype.Component; +import com.lframework.starter.web.utils.ApplicationUtil; public class LockFactory { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockBuilder.java index 6e0e4d8..7b9ec45 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockBuilder.java @@ -8,7 +8,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Conditional; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisStringCommands; @@ -16,14 +15,13 @@ import org.springframework.data.redis.connection.ReturnType; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.types.Expiration; -import org.springframework.stereotype.Component; public class RedisLockBuilder implements LockBuilder { private static final ThreadLocal> LOCKERS; static { - LOCKERS = new ThreadLocal<>(); + LOCKERS = new InheritableThreadLocal<>(); } @Resource(name = "redisTemplate") diff --git a/web-common/src/main/java/com/lframework/starter/web/common/security/AbstractUserDetails.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java similarity index 97% rename from web-common/src/main/java/com/lframework/starter/web/common/security/AbstractUserDetails.java rename to web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java index e420dc4..d97f70b 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/security/AbstractUserDetails.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.security; +package com.lframework.starter.web.components.security; import java.io.Serializable; import java.util.Set; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandlerImpl.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandlerImpl.java index bf001ce..4e8b194 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandlerImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandlerImpl.java @@ -3,8 +3,6 @@ package com.lframework.starter.web.components.security; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; import java.util.Arrays; import java.util.Set; import lombok.extern.slf4j.Slf4j; diff --git a/web-common/src/main/java/com/lframework/starter/web/common/security/DefaultUserDetails.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/DefaultUserDetails.java similarity index 81% rename from web-common/src/main/java/com/lframework/starter/web/common/security/DefaultUserDetails.java rename to web-starter/src/main/java/com/lframework/starter/web/components/security/DefaultUserDetails.java index 922247e..07e94b7 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/security/DefaultUserDetails.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/DefaultUserDetails.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.security; +package com.lframework.starter.web.components.security; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/LoginInterceptor.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/LoginInterceptor.java index cc8cfd5..6b1d195 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/LoginInterceptor.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/LoginInterceptor.java @@ -5,7 +5,6 @@ import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.annotation.AnnotationUtil; import com.lframework.starter.common.exceptions.impl.AuthExpiredException; import com.lframework.starter.web.annotations.OpenApi; -import com.lframework.starter.web.common.tenant.TenantContextHolder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -54,10 +53,4 @@ public class LoginInterceptor implements HandlerInterceptor { return true; } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, - Object handler, Exception ex) throws Exception { - TenantContextHolder.clearTenantId(); - } } diff --git a/web-common/src/main/java/com/lframework/starter/web/common/security/SecurityConstants.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityConstants.java similarity index 91% rename from web-common/src/main/java/com/lframework/starter/web/common/security/SecurityConstants.java rename to web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityConstants.java index f1a1571..0dfb030 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/security/SecurityConstants.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityConstants.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.security; +package com.lframework.starter.web.components.security; public interface SecurityConstants { diff --git a/web-common/src/main/java/com/lframework/starter/web/common/security/SecurityUtil.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java similarity index 90% rename from web-common/src/main/java/com/lframework/starter/web/common/security/SecurityUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java index 67247b8..bc149fb 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/security/SecurityUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.security; +package com.lframework.starter.web.components.security; import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.session.SaSession; @@ -15,7 +15,7 @@ import org.springframework.web.context.request.RequestContextHolder; @Slf4j public class SecurityUtil { - private static final ThreadLocal LOGIN_POOL = new ThreadLocal<>(); + private static final ThreadLocal LOGIN_POOL = new InheritableThreadLocal<>(); /** * 清除当前登录人 只能用于子线程的登录人信息传递 @@ -90,11 +90,7 @@ public class SecurityUtil { } try { - Object loginId = StpUtil.getLoginIdByToken(token); - if (loginId == null) { - return null; - } - SaSession session = StpUtil.getSessionByLoginId(loginId); + SaSession session = StpUtil.getSession(); if (session == null) { return null; } diff --git a/web-common/src/main/java/com/lframework/starter/web/common/security/UserDetails.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetails.java similarity index 94% rename from web-common/src/main/java/com/lframework/starter/web/common/security/UserDetails.java rename to web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetails.java index 4e54fef..c389191 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/security/UserDetails.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetails.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.security; +package com.lframework.starter.web.components.security; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetailsService.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetailsService.java index 09d0364..d87c1a2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetailsService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetailsService.java @@ -1,7 +1,6 @@ package com.lframework.starter.web.components.security; import com.lframework.starter.common.exceptions.impl.UserLoginException; -import com.lframework.starter.web.common.security.AbstractUserDetails; public interface UserDetailsService { diff --git a/web-common/src/main/java/com/lframework/starter/web/common/tenant/TenantContextHolder.java b/web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantContextHolder.java similarity index 65% rename from web-common/src/main/java/com/lframework/starter/web/common/tenant/TenantContextHolder.java rename to web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantContextHolder.java index c124ff9..9336612 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/tenant/TenantContextHolder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantContextHolder.java @@ -1,12 +1,12 @@ -package com.lframework.starter.web.common.tenant; +package com.lframework.starter.web.components.tenant; -import com.lframework.starter.web.common.event.ClearTenantEvent; -import com.lframework.starter.web.common.event.SetTenantEvent; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.event.ClearTenantEvent; +import com.lframework.starter.web.event.SetTenantEvent; +import com.lframework.starter.web.utils.ApplicationUtil; public class TenantContextHolder { - private static final ThreadLocal TENANT_ID = new ThreadLocal<>(); + private static final ThreadLocal TENANT_ID = new InheritableThreadLocal<>(); public static void setTenantId(Integer tenantId) { if (tenantId == null) { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java index c60e944..300ee84 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java @@ -2,7 +2,7 @@ package com.lframework.starter.web.components.upload; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; import com.lframework.starter.web.components.upload.handler.UploadHandler; import java.util.Map; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java index a4750cb..52ffe53 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java @@ -5,7 +5,7 @@ import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysParameterService; +import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.JsonUtil; import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; @@ -22,13 +22,12 @@ import java.util.List; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; @Slf4j public class CosUploadHandler implements UploadHandler { @Autowired - private SysParameterService sysParameterService; + private SysConfService sysConfService; @Override public String getType() { @@ -37,7 +36,7 @@ public class CosUploadHandler implements UploadHandler { @Override public String upload(InputStream is, List locations, String fileName) { - String configStr = sysParameterService.findRequiredByKey("upload.cos.config"); + String configStr = sysConfService.findRequiredByKey("upload.cos.config"); CosConfig config = JsonUtil.parseObject(configStr, CosConfig.class); Assert.notBlank(config.getCustomUrl()); diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java index 4d77852..d41a56e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java @@ -6,7 +6,7 @@ import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysParameterService; +import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.JsonUtil; import com.obs.services.ObsClient; import com.obs.services.model.PutObjectResult; @@ -16,13 +16,12 @@ import java.util.List; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; @Slf4j public class ObsUploadHandler implements UploadHandler { @Autowired - private SysParameterService sysParameterService; + private SysConfService sysConfService; @Override public String getType() { @@ -31,7 +30,7 @@ public class ObsUploadHandler implements UploadHandler { @Override public String upload(InputStream is, List locations, String fileName) { - String configStr = sysParameterService.findRequiredByKey("upload.obs.config"); + String configStr = sysConfService.findRequiredByKey("upload.obs.config"); ObsConfig config = JsonUtil.parseObject(configStr, ObsConfig.class); Assert.notBlank(config.getEndpoint()); diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java index 94ef68d..0d26ea8 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java @@ -6,18 +6,17 @@ import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysParameterService; +import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.JsonUtil; import java.io.InputStream; import java.util.List; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; public class OssUploadHandler implements UploadHandler { @Autowired - private SysParameterService sysParameterService; + private SysConfService sysConfService; @Override public String getType() { @@ -26,7 +25,7 @@ public class OssUploadHandler implements UploadHandler { @Override public String upload(InputStream is, List locations, String fileName) { - String configStr = sysParameterService.findRequiredByKey("upload.oss.config"); + String configStr = sysConfService.findRequiredByKey("upload.oss.config"); OssConfig config = JsonUtil.parseObject(configStr, OssConfig.class); Assert.notBlank(config.getEndpoint()); diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/LettuceAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/LettuceAutoConfiguration.java index c010283..309e7e8 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/LettuceAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/LettuceAutoConfiguration.java @@ -1,22 +1,86 @@ package com.lframework.starter.web.config; +import io.lettuce.core.resource.ClientResources; +import io.lettuce.core.resource.NettyCustomizer; +import io.netty.channel.Channel; +import io.netty.channel.ChannelDuplexHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.handler.timeout.IdleStateHandler; import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer; +import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration.LettuceClientConfigurationBuilder; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.stereotype.Component; -@Component -public class LettuceAutoConfiguration implements InitializingBean { +public class LettuceAutoConfiguration { - @Autowired - private RedisConnectionFactory redisConnectionFactory; + @Value("${spring.redis.lettuce.reader-idle-time-seconds:30}") + private Integer readerIdleTimeSeconds; - @Override - public void afterPropertiesSet() throws Exception { - if (redisConnectionFactory instanceof LettuceConnectionFactory) { - LettuceConnectionFactory c = (LettuceConnectionFactory) redisConnectionFactory; - c.setValidateConnection(true); + // @Bean + public LettuceInitializingBean lettuceInitializingBean(RedisConnectionFactory redisConnectionFactory) { + return new LettuceInitializingBean(redisConnectionFactory); + } + + @Bean + public ClientResources clientResources() { + NettyCustomizer nettyCustomizer = new NettyCustomizer() { + @Override + public void afterChannelInitialized(Channel channel) { + channel.pipeline().addLast( + //第一个参数readerIdleTimeSeconds设置为小于超时时间timeout,单位为秒, + //每隔readerIdleTimeSeconds会进行重连,在超时之前重连就能避免命令超时报错。 + new IdleStateHandler(readerIdleTimeSeconds, 0, 0)); + channel.pipeline().addLast(new ChannelDuplexHandler() { + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object isEvt) throws Exception { + if (isEvt instanceof IdleStateEvent) { + ctx.disconnect(); + } + } + }); + } + }; + return ClientResources.builder().nettyCustomizer(nettyCustomizer).build(); + } + + @Bean + public CustomLettuceClientConfigurationBuilderCustomizer customLettuceClientConfigurationBuilderCustomizer() { + return new CustomLettuceClientConfigurationBuilderCustomizer(clientResources()); + } + + public static class CustomLettuceClientConfigurationBuilderCustomizer implements + LettuceClientConfigurationBuilderCustomizer { + + private ClientResources clientResources; + + public CustomLettuceClientConfigurationBuilderCustomizer(ClientResources clientResources) { + this.clientResources = clientResources; + } + + @Override + public void customize(LettuceClientConfigurationBuilder clientConfigurationBuilder) { + clientConfigurationBuilder.clientResources(clientResources); + } + } + + public static class LettuceInitializingBean implements InitializingBean { + + private RedisConnectionFactory redisConnectionFactory; + + public LettuceInitializingBean(RedisConnectionFactory redisConnectionFactory) { + this.redisConnectionFactory = redisConnectionFactory; + } + + @Override + public void afterPropertiesSet() throws Exception { + if (redisConnectionFactory instanceof LettuceConnectionFactory) { + LettuceConnectionFactory c = (LettuceConnectionFactory) redisConnectionFactory; + c.setValidateConnection(true); + } } } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java index 5e1f16d..3494781 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java @@ -4,7 +4,7 @@ import cn.hutool.extra.mail.MailAccount; import com.lframework.starter.web.config.properties.MailProperties; import com.lframework.starter.web.impl.MailServiceImpl; import com.lframework.starter.web.service.MailService; -import com.lframework.starter.web.service.SysParameterService; +import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.JsonUtil; import com.sun.mail.util.MailSSLSocketFactory; import java.security.GeneralSecurityException; @@ -19,10 +19,10 @@ public class MailAutoConfiguration { @Bean @Scope("prototype") @ConditionalOnMissingBean(MailService.class) - public MailService getMailService(SysParameterService sysParameterService) + public MailService getMailService(SysConfService sysConfService) throws GeneralSecurityException { - String configStr = sysParameterService.findRequiredByKey("mail"); + String configStr = sysConfService.findRequiredByKey("mail"); MailProperties properties = JsonUtil.parseObject(configStr, MailProperties.class); MailAccount account = new MailAccount(); account.setHost(properties.getHost()); diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/SaTokenAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/SaTokenAutoConfiguration.java new file mode 100644 index 0000000..3761663 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/config/SaTokenAutoConfiguration.java @@ -0,0 +1,136 @@ +package com.lframework.starter.web.config; + +import cn.dev33.satoken.dao.SaTokenDao; +import cn.dev33.satoken.dao.SaTokenDaoDefaultImpl; +import cn.dev33.satoken.dao.SaTokenDaoRedisJackson; +import io.lettuce.core.resource.ClientResources; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer; +import org.springframework.boot.autoconfigure.data.redis.RedisProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.context.EnvironmentAware; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; +import org.springframework.data.redis.connection.RedisPassword; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; + +class SaTokenAutoConfiguration { + + @Bean + public SaAloneRedisInject saAloneRedisInject( + @Autowired(required = false) SaTokenDao saTokenDao, + ObjectProvider builderCustomizers, + ClientResources clientResources) { + return new SaAloneRedisInject(saTokenDao, builderCustomizers, clientResources); + } + + public static class SaAloneRedisInject implements EnvironmentAware { + + /** + * 配置信息的前缀 + */ + public static final String ALONE_PREFIX = "sa-token.alone-redis"; + + /** + * Sa-Token 持久层接口 + */ + private SaTokenDao saTokenDao; + + private ObjectProvider builderCustomizers; + + private ClientResources clientResources; + + public SaAloneRedisInject(SaTokenDao saTokenDao, + ObjectProvider builderCustomizers, + ClientResources clientResources) { + this.saTokenDao = saTokenDao; + this.builderCustomizers = builderCustomizers; + this.clientResources = clientResources; + } + + /** + * 开始注入 + */ + @Override + public void setEnvironment(Environment environment) { + try { + // 如果为空或者默认实现,则不进行任何操作 + if (saTokenDao == null || saTokenDao instanceof SaTokenDaoDefaultImpl) { + return; + } + // 如果配置文件不包含相关配置,则不进行任何操作 + if (environment.getProperty(ALONE_PREFIX + ".host") == null) { + return; + } + + // ------------------- 开始注入 + + // 获取cfg对象 + RedisProperties cfg = Binder.get(environment).bind(ALONE_PREFIX, RedisProperties.class) + .get(); + + // 1. Redis配置 + RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration(); + redisConfig.setHostName(cfg.getHost()); + redisConfig.setPort(cfg.getPort()); + redisConfig.setDatabase(cfg.getDatabase()); + redisConfig.setPassword(RedisPassword.of(cfg.getPassword())); + + // 2. 连接池配置 + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); + // pool配置 + RedisProperties.Lettuce lettuce = cfg.getLettuce(); + if (lettuce.getPool() != null) { + RedisProperties.Pool pool = cfg.getLettuce().getPool(); + // 连接池最大连接数 + poolConfig.setMaxTotal(pool.getMaxActive()); + // 连接池中的最大空闲连接 + poolConfig.setMaxIdle(pool.getMaxIdle()); + // 连接池中的最小空闲连接 + poolConfig.setMinIdle(pool.getMinIdle()); + // 连接池最大阻塞等待时间(使用负值表示没有限制) + poolConfig.setMaxWaitMillis(pool.getMaxWait().toMillis()); + } + LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder(); + // timeout + if (cfg.getTimeout() != null) { + builder.commandTimeout(cfg.getTimeout()); + } + // shutdownTimeout + if (lettuce.getShutdownTimeout() != null) { + builder.shutdownTimeout(lettuce.getShutdownTimeout()); + } + builder.clientResources(clientResources); + builderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder)); + // 创建Factory对象 + LettuceClientConfiguration clientConfig = builder.poolConfig(poolConfig).build(); + LettuceConnectionFactory factory = new LettuceConnectionFactory(redisConfig, clientConfig); + factory.afterPropertiesSet(); + + // 3. 开始初始化 SaTokenDao + SaTokenDaoRedisJackson dao = (SaTokenDaoRedisJackson) saTokenDao; + dao.isInit = false; + dao.init(factory); + return; + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 骗过编辑器,增加配置文件代码提示 + * + * @return 配置对象 + */ + @ConfigurationProperties(prefix = ALONE_PREFIX) + public RedisProperties getSaAloneRedisConfig() { + return new RedisProperties(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java index f444e0c..54069e8 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java @@ -1,6 +1,6 @@ package com.lframework.starter.web.config; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; import java.net.InetAddress; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; diff --git a/web-common/src/main/java/com/lframework/starter/web/common/config/WebCommonAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebCommonAutoConfiguration.java similarity index 70% rename from web-common/src/main/java/com/lframework/starter/web/common/config/WebCommonAutoConfiguration.java rename to web-starter/src/main/java/com/lframework/starter/web/config/WebCommonAutoConfiguration.java index fd9a83f..9d410c5 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/config/WebCommonAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebCommonAutoConfiguration.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.common.config; +package com.lframework.starter.web.config; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java b/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java index 9eae82d..0bcbea2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java +++ b/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java @@ -3,8 +3,8 @@ package com.lframework.starter.web.controller; import com.lframework.starter.common.utils.ObjectUtil; import com.lframework.starter.web.constants.MybatisConstants; import com.lframework.starter.web.vo.PageVo; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; +import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.SecurityUtil; /** * BaseController diff --git a/web-common/src/main/java/com/lframework/starter/web/common/event/ClearTenantEvent.java b/web-starter/src/main/java/com/lframework/starter/web/event/ClearTenantEvent.java similarity index 88% rename from web-common/src/main/java/com/lframework/starter/web/common/event/ClearTenantEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/event/ClearTenantEvent.java index 2e2db4c..33ba2e7 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/event/ClearTenantEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/event/ClearTenantEvent.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.event; +package com.lframework.starter.web.event; import org.springframework.context.ApplicationEvent; diff --git a/web-common/src/main/java/com/lframework/starter/web/common/event/ReloadTenantEvent.java b/web-starter/src/main/java/com/lframework/starter/web/event/ReloadTenantEvent.java similarity index 96% rename from web-common/src/main/java/com/lframework/starter/web/common/event/ReloadTenantEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/event/ReloadTenantEvent.java index 40be70d..779dcce 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/event/ReloadTenantEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/event/ReloadTenantEvent.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.event; +package com.lframework.starter.web.event; import org.springframework.context.ApplicationEvent; diff --git a/web-common/src/main/java/com/lframework/starter/web/common/event/SetTenantEvent.java b/web-starter/src/main/java/com/lframework/starter/web/event/SetTenantEvent.java similarity index 87% rename from web-common/src/main/java/com/lframework/starter/web/common/event/SetTenantEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/event/SetTenantEvent.java index 55c2bda..5f488b5 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/event/SetTenantEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/event/SetTenantEvent.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.event; +package com.lframework.starter.web.event; import org.springframework.context.ApplicationEvent; diff --git a/web-starter/src/main/java/com/lframework/starter/web/handlers/DefaultBaseEntityFillHandler.java b/web-starter/src/main/java/com/lframework/starter/web/handlers/DefaultBaseEntityFillHandler.java index 9d6fc5a..4ec3eab 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/handlers/DefaultBaseEntityFillHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/handlers/DefaultBaseEntityFillHandler.java @@ -2,8 +2,8 @@ package com.lframework.starter.web.handlers; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.lframework.starter.common.utils.ObjectUtil; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; +import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.SecurityUtil; import com.lframework.starter.web.config.properties.DefaultSettingProperties; import com.lframework.starter.web.constants.MyBatisStringPool; import java.time.LocalDateTime; diff --git a/web-starter/src/main/java/com/lframework/starter/web/interceptors/TenantInterceptorImpl.java b/web-starter/src/main/java/com/lframework/starter/web/interceptors/TenantInterceptorImpl.java index 7cdc497..40168ec 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/interceptors/TenantInterceptorImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/interceptors/TenantInterceptorImpl.java @@ -1,8 +1,8 @@ package com.lframework.starter.web.interceptors; import com.lframework.starter.web.components.tenant.TenantInterceptor; -import com.lframework.starter.web.common.tenant.TenantContextHolder; -import com.lframework.starter.web.common.security.SecurityUtil; +import com.lframework.starter.web.components.tenant.TenantContextHolder; +import com.lframework.starter.web.components.security.SecurityUtil; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -20,4 +20,10 @@ public class TenantInterceptorImpl implements TenantInterceptor { return true; } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, + Object handler, Exception ex) throws Exception { + TenantContextHolder.clearTenantId(); + } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/listeners/TenantListener.java b/web-starter/src/main/java/com/lframework/starter/web/listeners/TenantListener.java index f16be91..db8ad0a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/listeners/TenantListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/listeners/TenantListener.java @@ -5,9 +5,9 @@ import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourcePrope import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.lframework.starter.web.utils.DataSourceUtil; -import com.lframework.starter.web.common.event.ClearTenantEvent; -import com.lframework.starter.web.common.event.ReloadTenantEvent; -import com.lframework.starter.web.common.event.SetTenantEvent; +import com.lframework.starter.web.event.ClearTenantEvent; +import com.lframework.starter.web.event.ReloadTenantEvent; +import com.lframework.starter.web.event.SetTenantEvent; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; diff --git a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultBuilder.java index 68d5ccb..930c80b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultBuilder.java @@ -3,7 +3,7 @@ package com.lframework.starter.web.resp; import com.lframework.starter.common.constants.ResponseConstants; import com.lframework.starter.common.exceptions.BaseException; import com.lframework.starter.web.components.trace.TraceBuilder; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; import lombok.extern.slf4j.Slf4j; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/BaseMpService.java b/web-starter/src/main/java/com/lframework/starter/web/service/BaseMpService.java index e09df61..133f198 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/BaseMpService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/service/BaseMpService.java @@ -8,7 +8,7 @@ import com.lframework.starter.common.utils.BeanUtil; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.web.constants.MyBatisStringPool; import com.lframework.starter.web.mapper.BaseMapper; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.utils.ApplicationUtil; import java.io.Serializable; import java.util.Collection; import org.springframework.transaction.annotation.Transactional; diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/SysParameterService.java b/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java similarity index 94% rename from web-starter/src/main/java/com/lframework/starter/web/service/SysParameterService.java rename to web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java index bd9c5d3..bbe866e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/SysParameterService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java @@ -2,7 +2,7 @@ package com.lframework.starter.web.service; import com.lframework.starter.common.exceptions.impl.ParameterNotFoundException; -public interface SysParameterService extends BaseService { +public interface SysConfService extends BaseService { /** * 根据Key查询 diff --git a/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignFactory.java b/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignFactory.java index 9d4dcac..29bc52d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignFactory.java @@ -1,7 +1,6 @@ package com.lframework.starter.web.sign; -import com.lframework.starter.web.common.utils.ApplicationUtil; -import org.springframework.stereotype.Component; +import com.lframework.starter.web.utils.ApplicationUtil; public class DefaultCheckSignFactory implements CheckSignFactory { diff --git a/web-common/src/main/java/com/lframework/starter/web/common/threads/DefaultCallable.java b/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultCallable.java similarity index 38% rename from web-common/src/main/java/com/lframework/starter/web/common/threads/DefaultCallable.java rename to web-starter/src/main/java/com/lframework/starter/web/threads/DefaultCallable.java index 790e72d..aea2004 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/threads/DefaultCallable.java +++ b/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultCallable.java @@ -1,8 +1,9 @@ -package com.lframework.starter.web.common.threads; +package com.lframework.starter.web.threads; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; -import com.lframework.starter.web.common.tenant.TenantContextHolder; +import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.SecurityUtil; +import com.lframework.starter.web.components.tenant.TenantContextHolder; +import com.lframework.starter.web.utils.TenantUtil; import java.util.concurrent.Callable; /** @@ -17,27 +18,43 @@ public class DefaultCallable implements Callable { private final Callable callable; + private final Integer tenantId; + public DefaultCallable(Callable callable) { this.user = SecurityUtil.getCurrentUser(); this.callable = callable; + this.tenantId = TenantUtil.enableTenant() ? TenantContextHolder.getTenantId() : null; } public DefaultCallable(AbstractUserDetails user, Callable callable) { this.user = user; this.callable = callable; + this.tenantId = TenantUtil.enableTenant() ? TenantContextHolder.getTenantId() : null; + } + + public DefaultCallable(AbstractUserDetails user, Callable callable, Integer tenantId) { + this.user = user; + this.callable = callable; + this.tenantId = tenantId; } @Override public T call() throws Exception { try { - SecurityUtil.setCurrentUser(this.user); - if (this.user.getTenantId() != null) { - TenantContextHolder.setTenantId(this.user.getTenantId()); + if (this.user != null) { + SecurityUtil.setCurrentUser(this.user); + } + if (this.tenantId != null) { + TenantContextHolder.setTenantId(this.tenantId); } return this.callable.call(); } finally { - SecurityUtil.removeCurrentUser(); - TenantContextHolder.clearTenantId(); + if (this.user != null) { + SecurityUtil.removeCurrentUser(); + } + if (this.tenantId != null) { + TenantContextHolder.clearTenantId(); + } } } } diff --git a/web-common/src/main/java/com/lframework/starter/web/common/threads/DefaultRunnable.java b/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultRunnable.java similarity index 36% rename from web-common/src/main/java/com/lframework/starter/web/common/threads/DefaultRunnable.java rename to web-starter/src/main/java/com/lframework/starter/web/threads/DefaultRunnable.java index 81d3a1b..e8a27f2 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/threads/DefaultRunnable.java +++ b/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultRunnable.java @@ -1,8 +1,9 @@ -package com.lframework.starter.web.common.threads; +package com.lframework.starter.web.threads; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; -import com.lframework.starter.web.common.tenant.TenantContextHolder; +import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.SecurityUtil; +import com.lframework.starter.web.components.tenant.TenantContextHolder; +import com.lframework.starter.web.utils.TenantUtil; /** * 默认的Runnable 可传递当前登录人信息 @@ -16,27 +17,43 @@ public class DefaultRunnable implements Runnable { private final Runnable runnable; + private final Integer tenantId; + public DefaultRunnable(Runnable runnable) { this.user = SecurityUtil.getCurrentUser(); this.runnable = runnable; + this.tenantId = TenantUtil.enableTenant() ? TenantContextHolder.getTenantId() : null; } public DefaultRunnable(AbstractUserDetails user, Runnable runnable) { this.user = user; this.runnable = runnable; + this.tenantId = TenantUtil.enableTenant() ? TenantContextHolder.getTenantId() : null; + } + + public DefaultRunnable(AbstractUserDetails user, Runnable runnable, Integer tenantId) { + this.user = user; + this.runnable = runnable; + this.tenantId = tenantId; } @Override public void run() { try { - SecurityUtil.setCurrentUser(this.user); - if (this.user.getTenantId() != null) { - TenantContextHolder.setTenantId(this.user.getTenantId()); + if (this.user != null) { + SecurityUtil.setCurrentUser(this.user); + } + if (this.tenantId != null) { + TenantContextHolder.setTenantId(this.tenantId); } this.runnable.run(); } finally { - SecurityUtil.removeCurrentUser(); - TenantContextHolder.clearTenantId(); + if (this.user != null) { + SecurityUtil.removeCurrentUser(); + } + if (this.tenantId != null) { + TenantContextHolder.clearTenantId(); + } } } } diff --git a/web-common/src/main/java/com/lframework/starter/web/common/utils/ApplicationUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/ApplicationUtil.java similarity index 98% rename from web-common/src/main/java/com/lframework/starter/web/common/utils/ApplicationUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/utils/ApplicationUtil.java index 7c7c3ce..6c962ba 100644 --- a/web-common/src/main/java/com/lframework/starter/web/common/utils/ApplicationUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/ApplicationUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.common.utils; +package com.lframework.starter.web.utils; import java.util.Map; import java.util.Set; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/CacheUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/CacheUtil.java index c36c976..6d40c9e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/CacheUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/CacheUtil.java @@ -1,6 +1,5 @@ package com.lframework.starter.web.utils; -import com.lframework.starter.web.common.utils.ApplicationUtil; import org.springframework.cache.CacheManager; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/DataSourceUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/DataSourceUtil.java index 3227664..5e976a1 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/DataSourceUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/DataSourceUtil.java @@ -4,7 +4,6 @@ import com.baomidou.dynamic.datasource.creator.BasicDataSourceCreator; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; import com.lframework.starter.common.utils.BeanUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.common.utils.ApplicationUtil; import javax.sql.DataSource; public class DataSourceUtil { diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/EncryptUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/EncryptUtil.java index 140a2d1..d063dc0 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/EncryptUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/EncryptUtil.java @@ -4,7 +4,6 @@ import cn.hutool.core.codec.Base64; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.AES; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; -import com.lframework.starter.web.common.utils.ApplicationUtil; import com.lframework.starter.web.config.properties.SecretProperties; public class EncryptUtil { diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/EnumUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/EnumUtil.java index 8f840cd..0cbb80c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/EnumUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/EnumUtil.java @@ -6,7 +6,6 @@ import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.ObjectUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.enums.BaseEnum; -import com.lframework.starter.web.common.utils.ApplicationUtil; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/FieldEncryptUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/FieldEncryptUtil.java index 6c13e8e..92107d6 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/FieldEncryptUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/FieldEncryptUtil.java @@ -1,5 +1,6 @@ package com.lframework.starter.web.utils; +import cn.hutool.core.util.DesensitizedUtil; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.annotations.constants.EncryType; @@ -7,6 +8,7 @@ import com.lframework.starter.web.annotations.constants.EncryType; public class FieldEncryptUtil { public static String encrypt(CharSequence str, EncryType type) { + String s = str == null ? null : str.toString(); switch (type) { case AUTO: { return autoEncrypt(str); @@ -19,6 +21,27 @@ public class FieldEncryptUtil { return builder.toString(); } + case EMAIL: { + return DesensitizedUtil.email(s); + } + case CHINESE_NAME: { + return DesensitizedUtil.chineseName(s); + } + case ID_CARD: { + return DesensitizedUtil.idCardNum(s, 4, 4); + } + case FIXED_PHONE: { + return DesensitizedUtil.fixedPhone(s); + } + case MOBILE_PHONE: { + return DesensitizedUtil.mobilePhone(s); + } + case CAR_LICENSE: { + return DesensitizedUtil.carLicense(s); + } + case BANK_CARD: { + return DesensitizedUtil.bankCard(s); + } } return StringPool.ENCRYPT_STR; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/GroovyUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/GroovyUtil.java index dd31269..cbc49eb 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/GroovyUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/GroovyUtil.java @@ -1,6 +1,5 @@ package com.lframework.starter.web.utils; -import com.lframework.starter.web.common.utils.ApplicationUtil; import com.lframework.starter.web.service.GroovySupportService; import groovy.lang.Binding; import groovy.lang.GroovyClassLoader; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/IdUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/IdUtil.java index da2a52c..8712ab9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/IdUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/IdUtil.java @@ -1,7 +1,6 @@ package com.lframework.starter.web.utils; import com.lframework.starter.common.utils.IdWorker; -import com.lframework.starter.web.common.utils.ApplicationUtil; /** * ID工具类 diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java index 3a91662..8666c18 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java @@ -7,7 +7,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.JsonNodeType; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.common.utils.ApplicationUtil; import java.util.List; import java.util.Map; import lombok.extern.slf4j.Slf4j; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/TenantUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/TenantUtil.java index 1949f2a..307caee 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/TenantUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/TenantUtil.java @@ -1,6 +1,5 @@ package com.lframework.starter.web.utils; -import com.lframework.starter.web.common.utils.ApplicationUtil; import com.lframework.starter.web.config.properties.TenantProperties; public class TenantUtil { diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/TransactionUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/TransactionUtil.java index f9808de..a8da38c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/TransactionUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/TransactionUtil.java @@ -1,6 +1,5 @@ package com.lframework.starter.web.utils; -import com.lframework.starter.web.common.utils.ApplicationUtil; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java index 092a7ec..8f41a21 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java @@ -6,10 +6,9 @@ import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.FileUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.common.utils.ApplicationUtil; import com.lframework.starter.web.components.upload.UploadHandlerFactory; import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysParameterService; +import com.lframework.starter.web.service.SysConfService; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; @@ -30,8 +29,8 @@ public class UploadUtil { public static String upload(MultipartFile file) { Assert.notNull(file); - SysParameterService sysParameterService = ApplicationUtil.getBean(SysParameterService.class); - String uploadTypeStr = sysParameterService.findByKey("upload.type", "LOCAL"); + SysConfService sysConfService = ApplicationUtil.getBean(SysConfService.class); + String uploadTypeStr = sysConfService.findByKey("upload.type", "LOCAL"); UploadHandler uploadHandler = UploadHandlerFactory.getInstance(uploadTypeStr); diff --git a/web-starter/src/main/resources/META-INF/spring.factories b/web-starter/src/main/resources/META-INF/spring.factories index 2b77d3d..4a8751f 100644 --- a/web-starter/src/main/resources/META-INF/spring.factories +++ b/web-starter/src/main/resources/META-INF/spring.factories @@ -15,4 +15,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.lframework.starter.web.config.WebAutoConfiguration,\ com.lframework.starter.web.config.WebBeanAutoConfiguration,\ com.lframework.starter.web.config.WebMvcAutoConfiguration,\ - com.lframework.starter.web.config.TenantSwitchConfiguration \ No newline at end of file + com.lframework.starter.web.config.TenantSwitchConfiguration,\ + com.lframework.starter.web.config.WebCommonAutoConfiguration,\ + com.lframework.starter.web.config.SaTokenAutoConfiguration \ No newline at end of file diff --git a/websocket-starter/pom.xml b/websocket-starter/pom.xml index dc0c645..c8c51b3 100644 --- a/websocket-starter/pom.xml +++ b/websocket-starter/pom.xml @@ -7,7 +7,7 @@ parent com.lframework - 3.1.4 + 3.1.5 websocket-starter diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java index d71b40b..edaa9d0 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java @@ -2,8 +2,10 @@ package com.lframework.starter.websocket.components; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.common.utils.ThreadUtil; import com.lframework.starter.web.dto.WsPushData; +import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.websocket.entity.WsSession; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -11,6 +13,7 @@ import java.util.List; import java.util.Map; import lombok.extern.slf4j.Slf4j; import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketMessage; @Slf4j public class WsDataPushWorker { @@ -28,16 +31,13 @@ public class WsDataPushWorker { log.debug("全员广播"); } // 全员广播 - WsSessionManager.getAllAvailableSessions(data.getTenantId(), data.getIncludeSessionIds(), data.getExcludeSessionIds()) + WsSessionManager.getAllAvailableSessions(data.getTenantId(), data.getIncludeSessionIds(), + data.getExcludeSessionIds()) .stream().forEach(t -> { - try { - Map obj = new HashMap(2, 1); - obj.put("bizType", data.getBizType()); - obj.put("data", data.getData()); - t.getWebSocketSession().sendMessage(new TextMessage(JsonUtil.toJsonString(obj))); - } catch (IOException e) { - log.error(e.getMessage(), e); - } + Map obj = new HashMap(2, 1); + obj.put("bizType", data.getBizType()); + obj.put("data", data.getData()); + sendMessage(t, new TextMessage(JsonUtil.toJsonString(obj))); }); } else { List userIds = new ArrayList<>(); @@ -53,17 +53,36 @@ public class WsDataPushWorker { log.debug("部分成员接收消息"); } - WsSessionManager.getAvailableSessionsByUserIds(data.getTenantId(), userIds, data.getIncludeSessionIds(), + WsSessionManager.getAvailableSessionsByUserIds(data.getTenantId(), userIds, + data.getIncludeSessionIds(), data.getExcludeSessionIds()).forEach(t -> { - try { - Map obj = new HashMap(2, 1); - obj.put("bizType", data.getBizType()); - obj.put("data", data.getData()); - t.getWebSocketSession().sendMessage(new TextMessage(JsonUtil.toJsonString(obj))); - } catch (IOException e) { + Map obj = new HashMap(2, 1); + obj.put("bizType", data.getBizType()); + obj.put("data", data.getData()); + sendMessage(t, new TextMessage(JsonUtil.toJsonString(obj))); + }); + } + } + + private static void sendMessage(WsSession session, WebSocketMessage message) { + int retryCount = 5; + int currentRetryCount = retryCount; + while (currentRetryCount > 0) { + try { + session.getWebSocketSession().sendMessage(message); + break; + } catch (IllegalStateException e) { + currentRetryCount--; + if (currentRetryCount > 0) { + log.warn("推送WS消息失败,休眠一秒,重试第{}次", (retryCount - currentRetryCount)); + } else { log.error(e.getMessage(), e); } - }); + // 休眠200毫秒再重试 + ThreadUtil.safeSleep(1000); + } catch (IOException e) { + log.error(e.getMessage(), e); + } } } } diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusherImpl.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusherImpl.java index d2362be..d833cd7 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusherImpl.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusherImpl.java @@ -1,6 +1,6 @@ package com.lframework.starter.websocket.components; -import com.lframework.starter.web.common.tenant.TenantContextHolder; +import com.lframework.starter.web.components.tenant.TenantContextHolder; import com.lframework.starter.web.dto.WsPushData; import com.lframework.starter.web.utils.JsonUtil; import com.lframework.starter.web.utils.TenantUtil; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/entity/WsSession.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/entity/WsSession.java index 8042c32..589fb95 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/entity/WsSession.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/entity/WsSession.java @@ -1,7 +1,6 @@ package com.lframework.starter.websocket.entity; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; +import com.lframework.starter.web.components.security.AbstractUserDetails; import com.lframework.starter.websocket.components.WsSessionManager; import com.lframework.starter.websocket.constants.WsPool; import lombok.Data; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserConnectEvent.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserConnectEvent.java index cf0e6a8..7c51d52 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserConnectEvent.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserConnectEvent.java @@ -1,6 +1,6 @@ package com.lframework.starter.websocket.events; -import com.lframework.starter.web.common.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.AbstractUserDetails; import org.springframework.context.ApplicationEvent; /** diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserDisConnectEvent.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserDisConnectEvent.java index 75c6b4e..a683ec8 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserDisConnectEvent.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserDisConnectEvent.java @@ -1,6 +1,6 @@ package com.lframework.starter.websocket.events; -import com.lframework.starter.web.common.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.AbstractUserDetails; import org.springframework.context.ApplicationEvent; /** diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/handler/WsHandler.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/handler/WsHandler.java index ef8139b..d5da97e 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/handler/WsHandler.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/handler/WsHandler.java @@ -3,10 +3,10 @@ package com.lframework.starter.websocket.handler; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.websocket.events.UserConnectEvent; import com.lframework.starter.websocket.events.UserDisConnectEvent; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; -import com.lframework.starter.web.common.tenant.TenantContextHolder; -import com.lframework.starter.web.common.utils.ApplicationUtil; +import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.SecurityUtil; +import com.lframework.starter.web.components.tenant.TenantContextHolder; +import com.lframework.starter.web.utils.ApplicationUtil; import com.lframework.starter.web.utils.JsonUtil; import com.lframework.starter.web.utils.TenantUtil; import com.lframework.starter.websocket.components.WsSessionManager; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/interceptor/WsHandshakeInterceptor.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/interceptor/WsHandshakeInterceptor.java index 0b7578b..8fa6946 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/interceptor/WsHandshakeInterceptor.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/interceptor/WsHandshakeInterceptor.java @@ -1,7 +1,7 @@ package com.lframework.starter.websocket.interceptor; -import com.lframework.starter.web.common.security.AbstractUserDetails; -import com.lframework.starter.web.common.security.SecurityUtil; +import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.components.security.SecurityUtil; import com.lframework.starter.websocket.constants.WsPool; import java.util.Map; import org.springframework.http.server.ServerHttpRequest; -- Gitee From 79a7977520fc383c2b871c62906c4ffef57608de Mon Sep 17 00:00:00 2001 From: lframework Date: Tue, 21 Jan 2025 22:09:02 +0800 Subject: [PATCH 05/18] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=A4=E4=BA=92=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../starter/websocket/components/WsDataPushWorker.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java b/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java index edaa9d0..0604339 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java +++ b/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java @@ -69,6 +69,9 @@ public class WsDataPushWorker { int currentRetryCount = retryCount; while (currentRetryCount > 0) { try { + if (log.isDebugEnabled()) { + log.debug("准备向sessionId {} 推送消息 {}", session.getWebSocketSession().getId(), message.getPayload()); + } session.getWebSocketSession().sendMessage(message); break; } catch (IllegalStateException e) { -- Gitee From 15a795e2286debdf25ae39603c478a00289bce8c Mon Sep 17 00:00:00 2001 From: lframework Date: Sun, 13 Apr 2025 10:14:53 +0800 Subject: [PATCH 06/18] =?UTF-8?q?1=E3=80=81=E9=87=8D=E5=86=99=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=E9=80=BB=E8=BE=91=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AE=89=E5=85=A8=E4=B8=8A=E4=BC=A0=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E5=85=AC=E5=BC=80=E4=B8=8A=E4=BC=A0=E5=92=8C?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E4=B8=8A=E4=BC=A0=E5=8C=BA=E5=88=86=E5=BC=80?= =?UTF-8?q?=E3=80=82=202=E3=80=81=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=97=B6loginId=E7=BD=AE=E4=B8=BA=E5=85=A8=E5=B1=80=E5=94=AF?= =?UTF-8?q?=E4=B8=80ID=E3=80=82=203=E3=80=81=E6=96=87=E4=BB=B6=E6=94=B6?= =?UTF-8?q?=E7=BA=B3=E7=AE=B1=E4=BF=AE=E6=94=B9=E6=88=90=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E3=80=82=204=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=BA=A4=E4=BA=92=E6=96=B9=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=88=B0=E5=AF=BC=E5=87=BA=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=AF=BC=E5=87=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/activemq-starter/pom.xml | 2 +- mq-starter/mq-core/pom.xml | 2 +- mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- pom.xml | 27 ++-- web-starter/pom.xml | 2 +- .../security/AbstractUserDetails.java | 5 + .../web/components/security/SecurityUtil.java | 11 +- .../security/UserTokenResolver.java | 1 - .../upload/UploadHandlerFactory.java | 17 +- .../upload/client/UploadClient.java | 27 ++++ .../upload/client/config/CosUploadConfig.java | 22 +++ .../client/config/LocalUploadConfig.java | 16 ++ .../upload/client/config/ObsUploadConfig.java | 20 +++ .../upload/client/config/OssUploadConfig.java | 22 +++ .../upload/client/dto/UploadDto.java | 16 ++ .../upload/client/impl/CosUploadClient.java | 153 ++++++++++++++++++ .../upload/client/impl/LocalUploadClient.java | 96 +++++++++++ .../upload/client/impl/ObsUploadClient.java | 89 ++++++++++ .../upload/client/impl/OssUploadClient.java | 123 ++++++++++++++ .../upload/handler/SecurityUploadHandler.java | 34 ++++ .../upload/handler/UploadHandler.java | 5 +- .../impl/CosSecurityUploadHandler.java | 52 ++++++ .../upload/handler/impl/CosUploadHandler.java | 88 ++-------- .../impl/LocalSecurityUploadHandler.java | 53 ++++++ .../handler/impl/LocalUploadHandler.java | 75 ++------- .../impl/ObsSecurityUploadHandler.java | 44 +++++ .../upload/handler/impl/ObsUploadHandler.java | 55 +------ .../impl/OssSecurityUploadHandler.java | 43 +++++ .../upload/handler/impl/OssUploadHandler.java | 57 +------ .../web/config/UploadAutoConfiguration.java | 3 +- .../web/config/WebBeanAutoConfiguration.java | 25 +++ .../properties/SecurityUploadProperties.java | 19 +++ .../web/constants/MybatisConstants.java | 5 - .../web/controller/BaseController.java | 5 - .../starter/web/service/SysConfService.java | 16 ++ .../starter/web/utils/ExcelUtil.java | 30 ---- .../starter/web/utils/UploadUtil.java | 144 +++++++++++++++-- websocket-starter/pom.xml | 2 +- 41 files changed, 1096 insertions(+), 318 deletions(-) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/UploadClient.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/CosUploadConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/LocalUploadConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/ObsUploadConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/OssUploadConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/dto/UploadDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/LocalUploadClient.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/SecurityUploadHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosSecurityUploadHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalSecurityUploadHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsSecurityUploadHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssSecurityUploadHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/config/properties/SecurityUploadProperties.java diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index 8d92c39..205c285 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.5 + 3.1.6 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 0cd7b3c..1413054 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.5 + 3.1.6 4.0.0 diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index 93a3524..9922d5c 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 3.1.5 + 3.1.6 activemq-starter diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index 68a78dd..1f5fd21 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.5 + 3.1.6 mq-core diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index 0e3fc81..053d27c 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.5 + 3.1.6 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index 36e7bc4..9f39604 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.5 + 3.1.6 rabbitmq-starter diff --git a/pom.xml b/pom.xml index 7f0482a..b2c7c50 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 3.1.5 + 3.1.6 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 3.1.5 + 3.1.6 1.18.10 1.7.21 1.1.7 @@ -83,19 +83,6 @@ https://gitee.com/lframework/jugg - - - sonatype_snapshots - https://s01.oss.sonatype.org/content/repositories/snapshots/ - default - - - sonatype_releases - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - default - - - @@ -472,6 +459,16 @@ + + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 + true + + central + true + + diff --git a/web-starter/pom.xml b/web-starter/pom.xml index 5132b8f..b5a4ebc 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.5 + 3.1.6 4.0.0 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java index d97f70b..c635627 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java @@ -74,6 +74,11 @@ public abstract class AbstractUserDetails implements UserDetails, Serializable { */ private Boolean isAdmin; + /** + * loginId + */ + private String loginId; + @Override public boolean isAccountNonExpired() { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java index bc149fb..b0331ed 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java @@ -89,8 +89,13 @@ public class SecurityUtil { return null; } + Object loginId = StpUtil.getLoginIdByToken(token); + if (loginId == null) { + return null; + } + try { - SaSession session = StpUtil.getSession(); + SaSession session = getSessionByLoginId(loginId); if (session == null) { return null; } @@ -99,4 +104,8 @@ public class SecurityUtil { return null; } } + + public static SaSession getSessionByLoginId(Object loginId) { + return StpUtil.getSessionByLoginId(loginId, false); + } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserTokenResolver.java b/web-starter/src/main/java/com/lframework/starter/web/components/security/UserTokenResolver.java index 149d186..c26b783 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserTokenResolver.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/security/UserTokenResolver.java @@ -8,7 +8,6 @@ public class UserTokenResolver implements IUserTokenResolver { @Override public String getToken() { - return StpUtil.getTokenValue(); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java index 300ee84..d27a3ca 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java @@ -2,8 +2,9 @@ package com.lframework.starter.web.components.upload; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; import com.lframework.starter.web.components.upload.handler.UploadHandler; +import com.lframework.starter.web.utils.ApplicationUtil; import java.util.Map; public class UploadHandlerFactory { @@ -21,4 +22,18 @@ public class UploadHandlerFactory { throw new DefaultSysException("没有找到" + type + "对应的UploadHandler"); } + + public static SecurityUploadHandler getSecurityInstance(String type) { + Assert.notBlank(type); + + Map uploadHandlerMap = ApplicationUtil.getBeansOfType( + SecurityUploadHandler.class); + for (SecurityUploadHandler value : uploadHandlerMap.values()) { + if (value.getType().equalsIgnoreCase(type)) { + return value; + } + } + + throw new DefaultSysException("没有找到" + type + "对应的UploadHandler"); + } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/UploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/UploadClient.java new file mode 100644 index 0000000..d79a49a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/UploadClient.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.components.upload.client; + +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import java.io.InputStream; +import java.util.List; + +public interface UploadClient { + + /** + * 上传文件 + * + * @param is 输入流 + * @param locations 路径 比如想把文件存在${baseLocation}/datas/2022/01/01目录处,此时locations = ['datas', '2022', + * '01', '01'] + * @param fileName 文件名 + */ + UploadDto upload(InputStream is, List locations, String fileName); + + /** + * 获取预签名URL + * + * @param objectName 文件名(全目录) + * @param expiration 过期时间,单位秒 + * @return + */ + String generatePresignedUrl(String objectName, long expiration); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/CosUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/CosUploadConfig.java new file mode 100644 index 0000000..6bd4135 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/CosUploadConfig.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.components.upload.client.config; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class CosUploadConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + private String customUrl; + + private String endpoint; + + private String region; + + private String secretId; + + private String secretKey; + + private String bucketName; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/LocalUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/LocalUploadConfig.java new file mode 100644 index 0000000..abd00e8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/LocalUploadConfig.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.components.upload.client.config; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class LocalUploadConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + private String domain; + + private String url; + + private String location; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/ObsUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/ObsUploadConfig.java new file mode 100644 index 0000000..2b05e4e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/ObsUploadConfig.java @@ -0,0 +1,20 @@ +package com.lframework.starter.web.components.upload.client.config; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class ObsUploadConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + private String customUrl; + + private String endpoint; + + private String ak; + + private String sk; + + private String bucketName; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/OssUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/OssUploadConfig.java new file mode 100644 index 0000000..a041606 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/OssUploadConfig.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.components.upload.client.config; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class OssUploadConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + private String customUrl; + + private String endpoint; + + private String internalEndPoint; + + private String accessKeyId; + + private String accessKeySecret; + + private String bucketName; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/dto/UploadDto.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/dto/UploadDto.java new file mode 100644 index 0000000..745e5ab --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/dto/UploadDto.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.components.upload.client.dto; + +import com.lframework.starter.web.dto.BaseDto; +import lombok.Data; + +@Data +public class UploadDto implements BaseDto { + + private static final long serialVersionUID = 1L; + + private String url; + + private String objectName; + + private String uploadType; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java new file mode 100644 index 0000000..92973c1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java @@ -0,0 +1,153 @@ +package com.lframework.starter.web.components.upload.client.impl; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.CosUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.qcloud.cos.COSClient; +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.Headers; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.endpoint.UserSpecifiedEndpointBuilder; +import com.qcloud.cos.http.HttpMethodName; +import com.qcloud.cos.http.HttpProtocol; +import com.qcloud.cos.model.GeneratePresignedUrlRequest; +import com.qcloud.cos.model.ObjectMetadata; +import com.qcloud.cos.model.PutObjectRequest; +import com.qcloud.cos.model.ResponseHeaderOverrides; +import com.qcloud.cos.region.Region; +import com.qcloud.cos.transfer.TransferManager; +import com.qcloud.cos.transfer.Upload; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class CosUploadClient implements UploadClient { + + private CosUploadConfig config; + + public CosUploadClient(CosUploadConfig config) { + this.config = config; + } + + @Override + public UploadDto upload(InputStream is, List locations, String fileName) { + Assert.notBlank(config.getEndpoint()); + Assert.notBlank(config.getBucketName()); + Assert.notBlank(config.getSecretId()); + Assert.notBlank(config.getSecretKey()); + Assert.notBlank(config.getRegion()); + + String objectName = StringUtil.join("/", locations) + fileName; + + TransferManager transferManager = null; + try { + transferManager = createTransferManager(); + + PutObjectRequest request = new PutObjectRequest(config.getBucketName(), objectName, is, + new ObjectMetadata()); + Upload upload = transferManager.upload(request); + upload.waitForUploadResult(); + } catch (InterruptedException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + if (transferManager != null) { + transferManager.shutdownNow(true); + } + } + String url = config.getEndpoint(); + if (!StringUtil.isBlank(config.getCustomUrl())) { + url = config.getCustomUrl(); + } + UploadDto dto = new UploadDto(); + dto.setUrl(url + (url.endsWith("/") ? StringPool.EMPTY_STR + : "/") + objectName); + dto.setObjectName(objectName); + dto.setUploadType("COS"); + + return dto; + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + Assert.notBlank(config.getBucketName()); + COSClient cosClient = createCosClient(); + LocalDateTime now = LocalDateTime.now(); + + GeneratePresignedUrlRequest req = + new GeneratePresignedUrlRequest(config.getBucketName(), objectName, HttpMethodName.GET); + ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides(); + String responseContentDispositon = null; + try { + responseContentDispositon = "attachment;filename=" + URLEncoder.encode( + objectName.substring(objectName.lastIndexOf("/") + 1), "UTF-8"); + } catch (UnsupportedEncodingException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + String responseCacheControl = "no-cache"; + responseHeaders.setContentDisposition(responseContentDispositon); + responseHeaders.setCacheControl(responseCacheControl); + req.setResponseHeaders(responseHeaders); + Date expirationDate = DateUtil.toDate(now.plusSeconds(expiration)); + req.setExpiration(expirationDate); + req.putCustomRequestHeader(Headers.HOST, + cosClient.getClientConfig().getEndpointBuilder() + .buildGeneralApiEndpoint(config.getBucketName())); + + try { + URL url = cosClient.generatePresignedUrl(req); + return url.toString(); + } finally { + cosClient.shutdown(); + } + } + + private TransferManager createTransferManager() { + + COSClient cosClient = createCosClient(); + + TransferManager transferManager = new TransferManager(cosClient); + + return transferManager; + } + + private COSClient createCosClient() { + + COSCredentials cred = new BasicCOSCredentials(config.getSecretId(), config.getSecretKey()); + + ClientConfig clientConfig = new ClientConfig(); + clientConfig.setRegion(new Region(config.getRegion())); + + String url = config.getEndpoint(); + if (!StringUtil.isBlank(config.getCustomUrl())) { + url = config.getCustomUrl(); + // 设置自定义的域名 + UserSpecifiedEndpointBuilder endpointBuilder = new UserSpecifiedEndpointBuilder( + url.replace("http://", "").replace("https://", ""), "service.cos.myqcloud.com"); + clientConfig.setEndpointBuilder(endpointBuilder); + } + + clientConfig.setHttpProtocol( + url.startsWith("https://") ? HttpProtocol.https : HttpProtocol.http); + + // 设置 socket 读取超时,默认 30s + clientConfig.setSocketTimeout(30 * 1000); + // 设置建立连接超时,默认 30s + clientConfig.setConnectionTimeout(30 * 1000); + + return new COSClient(cred, clientConfig); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/LocalUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/LocalUploadClient.java new file mode 100644 index 0000000..b52fccc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/LocalUploadClient.java @@ -0,0 +1,96 @@ +package com.lframework.starter.web.components.upload.client.impl; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.FileUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.redis.RedisHandler; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.LocalUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.service.SysConfService; +import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.utils.IdUtil; +import java.io.File; +import java.io.InputStream; +import java.util.List; + +public class LocalUploadClient implements UploadClient { + + private LocalUploadConfig config; + + public LocalUploadClient(LocalUploadConfig config) { + this.config = config; + } + + @Override + public UploadDto upload(InputStream is, List locations, + String fileName) { + String domain = config.getDomain(); + String baseUrl = config.getUrl(); + String location = config.getLocation(); + + Assert.notNull(is); + Assert.notBlank(domain); + Assert.notBlank(baseUrl); + Assert.notBlank(location); + Assert.notBlank(fileName); + + if (domain.endsWith("/")) { + domain = domain.substring(0, domain.length() - 1); + } + if (!baseUrl.startsWith("/")) { + baseUrl = "/" + baseUrl; + } + + String url = domain + baseUrl; + + if (StringUtil.isEmpty(url)) { + url = StringPool.EMPTY_STR; + } + + if (!url.endsWith("/")) { + url = url + "/"; + } + + if (!location.endsWith(File.separator)) { + // 路径不是以分隔符结尾 + location = location + File.separator; + } + + //文件全路径 比如/upload/datas/2022/01/01/ + String fullPath = location + (CollectionUtil.isEmpty(locations) ? + StringPool.EMPTY_STR : + CollectionUtil.join(locations, File.separator)) + File.separator; + + File dest = FileUtil.touch(fullPath, fileName); + + FileUtil.writeFromStream(is, dest); + + UploadDto dto = new UploadDto(); + dto.setUrl(url + (CollectionUtil.isEmpty(locations) ? + StringPool.EMPTY_STR : + CollectionUtil.join(locations, "/") + "/") + fileName); + dto.setObjectName(fullPath + fileName); + dto.setUploadType("LOCAL"); + return dto; + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + + String baseUrl = config.getDomain(); + String uri = "/download/security"; + String sign = IdUtil.getUUID(); + + SysConfService sysConfService = ApplicationUtil.getBean(SysConfService.class); + Long expire = sysConfService.getLong("security-upload.sign-url-expired", 600L); + + RedisHandler redisHandler = ApplicationUtil.getBean(RedisHandler.class); + redisHandler.hset("security-upload", sign, objectName, + expire * 1000L); + + return baseUrl + uri + "?sign=" + sign; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java new file mode 100644 index 0000000..e999649 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java @@ -0,0 +1,89 @@ +package com.lframework.starter.web.components.upload.client.impl; + +import cn.hutool.core.util.URLUtil; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.ObsUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.obs.services.ObsClient; +import com.obs.services.model.HttpMethodEnum; +import com.obs.services.model.PutObjectResult; +import com.obs.services.model.TemporarySignatureRequest; +import com.obs.services.model.TemporarySignatureResponse; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class ObsUploadClient implements UploadClient { + + private ObsUploadConfig config; + + public ObsUploadClient(ObsUploadConfig config) { + this.config = config; + } + + @Override + public UploadDto upload(InputStream is, List locations, String fileName) { + + String endPoint = config.getEndpoint(); + String bucketName = config.getBucketName(); + String ak = config.getAk(); + String sk = config.getSk(); + String customUrl = config.getCustomUrl(); + + Assert.notBlank(endPoint); + Assert.notBlank(bucketName); + Assert.notBlank(ak); + Assert.notBlank(sk); + + String objectName = StringUtil.join("/", locations) + fileName; + + try (ObsClient obsClient = new ObsClient(ak, sk, + endPoint)) { + // 不判断桶是否存在,建议桶在控台创建 + PutObjectResult result = obsClient.putObject(bucketName, objectName, is); + + UploadDto dto = new UploadDto(); + dto.setObjectName(objectName); + if (StringUtil.isNotBlank(customUrl)) { + dto.setUrl(customUrl + (customUrl.endsWith("/") ? StringPool.EMPTY_STR + : "/") + objectName); + } else { + dto.setUrl(URLUtil.decode(result.getObjectUrl())); + } + + dto.setUploadType("OBS"); + return dto; + } catch (IOException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + String ak = config.getAk(); + String sk = config.getSk(); + String endPoint = config.getEndpoint(); + String bucketName = config.getBucketName(); + + try (ObsClient obsClient = new ObsClient(ak, sk, endPoint)) { + TemporarySignatureRequest req = new TemporarySignatureRequest(); + req.setExpires(expiration); + req.setMethod(HttpMethodEnum.GET); + req.setBucketName(bucketName); + req.setObjectKey(objectName); + + TemporarySignatureResponse resp = obsClient.createTemporarySignature(req); + return resp.getSignedUrl(); + } catch (IOException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java new file mode 100644 index 0000000..c7bc248 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java @@ -0,0 +1,123 @@ +package com.lframework.starter.web.components.upload.client.impl; + +import com.aliyun.oss.ClientBuilderConfiguration; +import com.aliyun.oss.HttpMethod; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.common.comm.SignVersion; +import com.aliyun.oss.model.GeneratePresignedUrlRequest; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.OssUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.util.List; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class OssUploadClient implements UploadClient { + + private OssUploadConfig config; + + public OssUploadClient(OssUploadConfig config) { + this.config = config; + } + + @Override + public UploadDto upload(InputStream is, List locations, String fileName) { + + String customUrl = config.getCustomUrl(); + String endPoint = config.getEndpoint(); + String internalEndPoint = config.getInternalEndPoint(); + String accessKeyId = config.getAccessKeyId(); + String accessKeySecret = config.getAccessKeySecret(); + String bucketName = config.getBucketName(); + + Assert.notBlank(endPoint); + Assert.notBlank(bucketName); + Assert.notBlank(accessKeyId); + Assert.notBlank(accessKeySecret); + + OSS ossClient = new OSSClientBuilder().build( + StringUtil.isBlank(internalEndPoint) ? endPoint + : internalEndPoint, accessKeyId, + accessKeySecret); + + String objectName = StringUtil.join("/", locations) + fileName; + try { + // 这里不判断桶是否存在,通过控台创建 + ossClient.putObject(bucketName, objectName, is); + + UploadDto dto = new UploadDto(); + + dto.setObjectName(objectName); + + if (StringUtil.isNotBlank(customUrl)) { + dto.setUrl(customUrl + (customUrl.endsWith("/") ? StringPool.EMPTY_STR + : "/") + objectName); + } else { + dto.setUrl("https://" + bucketName + "." + endPoint + "/" + objectName); + } + dto.setUploadType("OSS"); + return dto; + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + String customUrl = config.getCustomUrl(); + String endPoint = config.getEndpoint(); + String accessKeyId = config.getAccessKeyId(); + String accessKeySecret = config.getAccessKeySecret(); + String bucketName = config.getBucketName(); + + Assert.notBlank(endPoint); + Assert.notBlank(bucketName); + Assert.notBlank(accessKeyId); + Assert.notBlank(accessKeySecret); + if (!StringUtil.isBlank(customUrl)) { + // 这里只判断customUrl即可,涉及到下载,不会使用内网endPoint + endPoint = customUrl; + } + + ClientBuilderConfiguration configuration = new ClientBuilderConfiguration(); + // 请注意,设置true开启CNAME选项。 + configuration.setSupportCname(true); + // 显式声明使用 V4 签名算法 + configuration.setSignatureVersion(SignVersion.V4); + + // 生成预签名URL。 + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, + HttpMethod.GET); + + // 设置下载行为(强制下载而非预览)及文件名 + try { + request.getResponseHeaders().setContentDisposition("attachment;filename=" + URLEncoder.encode( + objectName.substring(objectName.lastIndexOf("/") + 1), "UTF-8")); + } catch (UnsupportedEncodingException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + + // 设置过期时间。 + LocalDateTime now = LocalDateTime.now(); + request.setExpiration(DateUtil.toDate(now.plusSeconds(expiration))); + + // 通过HTTP GET请求生成预签名URL。 + OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, + accessKeySecret, configuration); + + return ossClient.generatePresignedUrl(request).toString(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/SecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/SecurityUploadHandler.java new file mode 100644 index 0000000..855d0da --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/SecurityUploadHandler.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.components.upload.handler; + +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import java.io.InputStream; +import java.util.List; + +public interface SecurityUploadHandler { + + /** + * 获取上传类型 + * + * @return + */ + String getType(); + + /** + * 上传文件 + * + * @param is + * @param locations + * @param fileName + * @return + */ + UploadDto upload(InputStream is, List locations, String fileName); + + /** + * 获取预签名URL + * + * @param objectName 文件名(全目录) + * @param expiration 过期时间,单位秒 + * @return + */ + String generatePresignedUrl(String objectName, long expiration); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/UploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/UploadHandler.java index 321daf1..e1225bd 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/UploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/UploadHandler.java @@ -1,5 +1,6 @@ package com.lframework.starter.web.components.upload.handler; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; import java.io.InputStream; import java.util.List; @@ -18,7 +19,7 @@ public interface UploadHandler { * @param is * @param locations * @param fileName - * @return + * @return 下载链接 */ - String upload(InputStream is, List locations, String fileName); + UploadDto upload(InputStream is, List locations, String fileName); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosSecurityUploadHandler.java new file mode 100644 index 0000000..0c0d80d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosSecurityUploadHandler.java @@ -0,0 +1,52 @@ +package com.lframework.starter.web.components.upload.handler.impl; + +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.CosUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.CosUploadClient; +import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.service.SysConfService; +import com.lframework.starter.web.utils.JsonUtil; +import java.io.InputStream; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +public class CosSecurityUploadHandler implements SecurityUploadHandler { + + @Autowired + private SysConfService sysConfService; + + @Override + public String getType() { + return "COS"; + } + + @Override + public UploadDto upload(InputStream is, List locations, String fileName) { + String configStr = sysConfService.findRequiredByKey("security-upload.cos.config"); + CosUploadConfig config = JsonUtil.parseObject(configStr, CosUploadConfig.class); + + Assert.notBlank(config.getEndpoint()); + Assert.notBlank(config.getRegion()); + Assert.notBlank(config.getBucketName()); + Assert.notBlank(config.getSecretId()); + Assert.notBlank(config.getSecretKey()); + + UploadClient uploadClient = new CosUploadClient(config); + + return uploadClient.upload(is, locations, fileName); + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + String configStr = sysConfService.findRequiredByKey("security-upload.cos.config"); + CosUploadConfig config = JsonUtil.parseObject(configStr, CosUploadConfig.class); + + UploadClient uploadClient = new CosUploadClient(config); + + return uploadClient.generatePresignedUrl(objectName, expiration); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java index 52ffe53..cf901b8 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java @@ -1,25 +1,15 @@ package com.lframework.starter.web.components.upload.handler.impl; -import com.lframework.starter.common.constants.StringPool; -import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.CosUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.CosUploadClient; import com.lframework.starter.web.components.upload.handler.UploadHandler; import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.JsonUtil; -import com.qcloud.cos.COSClient; -import com.qcloud.cos.ClientConfig; -import com.qcloud.cos.auth.BasicCOSCredentials; -import com.qcloud.cos.auth.COSCredentials; -import com.qcloud.cos.http.HttpProtocol; -import com.qcloud.cos.model.ObjectMetadata; -import com.qcloud.cos.model.PutObjectRequest; -import com.qcloud.cos.region.Region; -import com.qcloud.cos.transfer.TransferManager; -import com.qcloud.cos.transfer.Upload; import java.io.InputStream; import java.util.List; -import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -35,78 +25,18 @@ public class CosUploadHandler implements UploadHandler { } @Override - public String upload(InputStream is, List locations, String fileName) { + public UploadDto upload(InputStream is, List locations, String fileName) { String configStr = sysConfService.findRequiredByKey("upload.cos.config"); - CosConfig config = JsonUtil.parseObject(configStr, CosConfig.class); + CosUploadConfig config = JsonUtil.parseObject(configStr, CosUploadConfig.class); - Assert.notBlank(config.getCustomUrl()); + Assert.notBlank(config.getEndpoint()); Assert.notBlank(config.getRegion()); Assert.notBlank(config.getBucketName()); Assert.notBlank(config.getSecretId()); Assert.notBlank(config.getSecretKey()); - String objectName = StringUtil.join("/", locations) + fileName; + UploadClient uploadClient = new CosUploadClient(config); - TransferManager transferManager = null; - try { - transferManager = createTransferManager(config); - - PutObjectRequest request = new PutObjectRequest(config.getBucketName(), objectName, is, - new ObjectMetadata()); - Upload upload = transferManager.upload(request); - upload.waitForUploadResult(); - - return config.getCustomUrl() + (config.getCustomUrl().endsWith("/") ? StringPool.EMPTY_STR - : "/") + objectName; - } catch (InterruptedException e) { - log.error(e.getMessage(), e); - throw new DefaultSysException(e.getMessage()); - } finally { - if (transferManager != null) { - transferManager.shutdownNow(true); - } - } - } - - private TransferManager createTransferManager(CosConfig config) { - - COSClient cosClient = createCosClient(config); - - TransferManager transferManager = new TransferManager(cosClient); - - return transferManager; - } - - private COSClient createCosClient(CosConfig config) { - - String secretId = config.getSecretId(); - String secretKey = config.getSecretKey(); - COSCredentials cred = new BasicCOSCredentials(secretId, secretKey); - - ClientConfig clientConfig = new ClientConfig(); - clientConfig.setRegion(new Region(config.getRegion())); - - clientConfig.setHttpProtocol(HttpProtocol.https); - - // 设置 socket 读取超时,默认 30s - clientConfig.setSocketTimeout(30 * 1000); - // 设置建立连接超时,默认 30s - clientConfig.setConnectionTimeout(30 * 1000); - - return new COSClient(cred, clientConfig); - } - - @Data - public static class CosConfig { - - private String customUrl; - - private String region; - - private String secretId; - - private String secretKey; - - private String bucketName; + return uploadClient.upload(is, locations, fileName); } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalSecurityUploadHandler.java new file mode 100644 index 0000000..20d97c4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalSecurityUploadHandler.java @@ -0,0 +1,53 @@ +package com.lframework.starter.web.components.upload.handler.impl; + +import com.lframework.starter.web.components.redis.RedisHandler; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.LocalUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.LocalUploadClient; +import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.config.properties.SecurityUploadProperties; +import com.lframework.starter.web.config.properties.UploadProperties; +import com.lframework.starter.web.service.SysConfService; +import java.io.InputStream; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +public class LocalSecurityUploadHandler implements SecurityUploadHandler { + + @Autowired + private UploadProperties uploadProperties; + + @Autowired + private SecurityUploadProperties securityUploadProperties; + + @Override + public String getType() { + return "LOCAL"; + } + + @Override + public UploadDto upload(InputStream is, List locations, String fileName) { + + LocalUploadConfig config = new LocalUploadConfig(); + config.setDomain(securityUploadProperties.getDomain()); + config.setUrl(uploadProperties.getUrl()); + config.setLocation(securityUploadProperties.getLocation()); + UploadClient uploadClient = new LocalUploadClient(config); + + return uploadClient.upload(is, locations, fileName); + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + LocalUploadConfig config = new LocalUploadConfig(); + config.setDomain(securityUploadProperties.getDomain()); + config.setUrl(uploadProperties.getUrl()); + config.setLocation(securityUploadProperties.getLocation()); + UploadClient uploadClient = new LocalUploadClient(config); + + return uploadClient.generatePresignedUrl(objectName, expiration); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalUploadHandler.java index 98a820d..1a10fd4 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalUploadHandler.java @@ -1,14 +1,11 @@ package com.lframework.starter.web.components.upload.handler.impl; -import com.lframework.starter.common.constants.StringPool; -import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.common.utils.CollectionUtil; -import com.lframework.starter.common.utils.FileUtil; -import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.config.properties.UploadProperties; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.LocalUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.LocalUploadClient; import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.utils.IdUtil; -import java.io.File; +import com.lframework.starter.web.config.properties.UploadProperties; import java.io.InputStream; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -26,62 +23,14 @@ public class LocalUploadHandler implements UploadHandler { } @Override - public String upload(InputStream is, List locations, String fileName) { - String domain = uploadProperties.getDomain(); - if (domain.endsWith("/")) { - domain = domain.substring(0, domain.length() - 1); - } - String baseUrl = uploadProperties.getUrl(); - if (!baseUrl.startsWith("/")) { - baseUrl = "/" + baseUrl; - } - String baseLocation = uploadProperties.getLocation(); - - return upload(is, baseLocation, locations, fileName, domain + baseUrl); - } - - /** - * 上传文件 - * - * @param is 输入流 - * @param baseLocation 基础存储路径 - * @param locations 路径 比如想把文件存在${baseLocation}/datas/2022/01/01目录处,此时locations = ['datas', - * '2022', '01', '01'] - * @param fileName 文件名 - * @param baseUrl 基础url - * @return - */ - private String upload(InputStream is, String baseLocation, List locations, - String fileName, - String baseUrl) { - - Assert.notNull(is); - Assert.notBlank(baseLocation); - Assert.notBlank(fileName); - - if (!baseLocation.endsWith(File.separator)) { - // 路径不是以分隔符结尾 - baseLocation = baseLocation + File.separator; - } - - if (StringUtil.isEmpty(baseUrl)) { - baseUrl = StringPool.EMPTY_STR; - } - - if (!baseUrl.endsWith("/")) { - baseUrl = baseUrl + "/"; - } - //文件全路径 比如/upload/datas/2022/01/01/ - String fullPath = baseLocation + (CollectionUtil.isEmpty(locations) ? - StringPool.EMPTY_STR : - CollectionUtil.join(locations, File.separator)) + File.separator; - - File dest = FileUtil.touch(fullPath, fileName); + public UploadDto upload(InputStream is, List locations, String fileName) { - FileUtil.writeFromStream(is, dest); + LocalUploadConfig config = new LocalUploadConfig(); + config.setDomain(uploadProperties.getDomain()); + config.setUrl(uploadProperties.getUrl()); + config.setLocation(uploadProperties.getLocation()); + UploadClient uploadClient = new LocalUploadClient(config); - return baseUrl + (CollectionUtil.isEmpty(locations) ? - StringPool.EMPTY_STR : - CollectionUtil.join(locations, "/") + "/") + fileName; + return uploadClient.upload(is, locations, fileName); } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsSecurityUploadHandler.java new file mode 100644 index 0000000..baecba1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsSecurityUploadHandler.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.components.upload.handler.impl; + +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.config.ObsUploadConfig; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.ObsUploadClient; +import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.service.SysConfService; +import com.lframework.starter.web.utils.JsonUtil; +import java.io.InputStream; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +@Slf4j +public class ObsSecurityUploadHandler implements SecurityUploadHandler { + + @Autowired + private SysConfService sysConfService; + + @Override + public String getType() { + return "OBS"; + } + + @Override + public UploadDto upload(InputStream is, List locations, String fileName) { + String configStr = sysConfService.findRequiredByKey("security-upload.obs.config"); + ObsUploadConfig config = JsonUtil.parseObject(configStr, ObsUploadConfig.class); + + UploadClient uploadClient = new ObsUploadClient(config); + return uploadClient.upload(is, locations, fileName); + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + String configStr = sysConfService.findRequiredByKey("security-upload.obs.config"); + ObsUploadConfig config = JsonUtil.parseObject(configStr, ObsUploadConfig.class); + + UploadClient uploadClient = new ObsUploadClient(config); + + return uploadClient.generatePresignedUrl(objectName, expiration); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java index d41a56e..157199b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java @@ -1,19 +1,14 @@ package com.lframework.starter.web.components.upload.handler.impl; -import cn.hutool.core.util.URLUtil; -import com.lframework.starter.common.constants.StringPool; -import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.ObsUploadClient; +import com.lframework.starter.web.components.upload.client.config.ObsUploadConfig; import com.lframework.starter.web.components.upload.handler.UploadHandler; import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.JsonUtil; -import com.obs.services.ObsClient; -import com.obs.services.model.PutObjectResult; -import java.io.IOException; import java.io.InputStream; import java.util.List; -import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -29,45 +24,11 @@ public class ObsUploadHandler implements UploadHandler { } @Override - public String upload(InputStream is, List locations, String fileName) { + public UploadDto upload(InputStream is, List locations, String fileName) { String configStr = sysConfService.findRequiredByKey("upload.obs.config"); - ObsConfig config = JsonUtil.parseObject(configStr, ObsConfig.class); + ObsUploadConfig config = JsonUtil.parseObject(configStr, ObsUploadConfig.class); - Assert.notBlank(config.getEndpoint()); - Assert.notBlank(config.getBucketName()); - Assert.notBlank(config.getAk()); - Assert.notBlank(config.getSk()); - - String objectName = StringUtil.join("/", locations) + fileName; - - try (ObsClient obsClient = new ObsClient(config.getAk(), config.getSk(), - config.getEndpoint())) { - // 不判断桶是否存在,建议桶在控台创建 - PutObjectResult result = obsClient.putObject(config.getBucketName(), objectName, is); - - if (StringUtil.isNotBlank(config.getCustomUrl())) { - return config.getCustomUrl() + (config.getCustomUrl().endsWith("/") ? StringPool.EMPTY_STR - : "/") + objectName; - } - - return URLUtil.decode(result.getObjectUrl()); - } catch (IOException e) { - log.error(e.getMessage(), e); - throw new DefaultSysException(e.getMessage()); - } - } - - @Data - public static class ObsConfig { - - private String customUrl; - - private String endpoint; - - private String ak; - - private String sk; - - private String bucketName; + UploadClient uploadClient = new ObsUploadClient(config); + return uploadClient.upload(is, locations, fileName); } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssSecurityUploadHandler.java new file mode 100644 index 0000000..ea4e496 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssSecurityUploadHandler.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.components.upload.handler.impl; + +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.OssUploadClient; +import com.lframework.starter.web.components.upload.client.config.OssUploadConfig; +import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.service.SysConfService; +import com.lframework.starter.web.utils.JsonUtil; +import java.io.InputStream; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; + +public class OssSecurityUploadHandler implements SecurityUploadHandler { + + @Autowired + private SysConfService sysConfService; + + @Override + public String getType() { + return "OSS"; + } + + @Override + public UploadDto upload(InputStream is, List locations, String fileName) { + String configStr = sysConfService.findRequiredByKey("security-upload.oss.config"); + OssUploadConfig config = JsonUtil.parseObject(configStr, OssUploadConfig.class); + + UploadClient uploadClient = new OssUploadClient(config); + + return uploadClient.upload(is, locations, fileName); + } + + @Override + public String generatePresignedUrl(String objectName, long expiration) { + String configStr = sysConfService.findRequiredByKey("security-upload.oss.config"); + OssUploadConfig config = JsonUtil.parseObject(configStr, OssUploadConfig.class); + + UploadClient uploadClient = new OssUploadClient(config); + + return uploadClient.generatePresignedUrl(objectName, expiration); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java index 0d26ea8..b8d8231 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java @@ -1,16 +1,14 @@ package com.lframework.starter.web.components.upload.handler.impl; -import com.aliyun.oss.OSS; -import com.aliyun.oss.OSSClientBuilder; -import com.lframework.starter.common.constants.StringPool; -import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.components.upload.client.UploadClient; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.client.impl.OssUploadClient; +import com.lframework.starter.web.components.upload.client.config.OssUploadConfig; import com.lframework.starter.web.components.upload.handler.UploadHandler; import com.lframework.starter.web.service.SysConfService; import com.lframework.starter.web.utils.JsonUtil; import java.io.InputStream; import java.util.List; -import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; public class OssUploadHandler implements UploadHandler { @@ -24,51 +22,12 @@ public class OssUploadHandler implements UploadHandler { } @Override - public String upload(InputStream is, List locations, String fileName) { + public UploadDto upload(InputStream is, List locations, String fileName) { String configStr = sysConfService.findRequiredByKey("upload.oss.config"); - OssConfig config = JsonUtil.parseObject(configStr, OssConfig.class); + OssUploadConfig config = JsonUtil.parseObject(configStr, OssUploadConfig.class); - Assert.notBlank(config.getEndpoint()); - Assert.notBlank(config.getBucketName()); - Assert.notBlank(config.getAccessKeyId()); - Assert.notBlank(config.getAccessKeySecret()); + UploadClient uploadClient = new OssUploadClient(config); - OSS ossClient = new OSSClientBuilder().build( - StringUtil.isBlank(config.getInternalEndPoint()) ? config.getEndpoint() - : config.getInternalEndPoint(), config.getAccessKeyId(), - config.getAccessKeySecret()); - - String objectName = StringUtil.join("/", locations) + fileName; - try { - // 这里不判断桶是否存在,通过控台创建 - ossClient.putObject(config.getBucketName(), objectName, is); - - if (StringUtil.isNotBlank(config.getCustomUrl())) { - return config.getCustomUrl() + (config.getCustomUrl().endsWith("/") ? StringPool.EMPTY_STR - : "/") + objectName; - } - - return "https://" + config.getBucketName() + "." + config.getEndpoint() + "/" + objectName; - } finally { - if (ossClient != null) { - ossClient.shutdown(); - } - } - } - - @Data - public static class OssConfig { - - private String customUrl; - - private String endpoint; - - private String internalEndPoint; - - private String accessKeyId; - - private String accessKeySecret; - - private String bucketName; + return uploadClient.upload(is, locations, fileName); } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/UploadAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/UploadAutoConfiguration.java index 042212d..2af5037 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/UploadAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/UploadAutoConfiguration.java @@ -1,6 +1,7 @@ package com.lframework.starter.web.config; import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.config.properties.SecurityUploadProperties; import com.lframework.starter.web.config.properties.UploadProperties; import java.io.File; import org.springframework.beans.factory.annotation.Autowired; @@ -10,7 +11,7 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration -@EnableConfigurationProperties(UploadProperties.class) +@EnableConfigurationProperties({UploadProperties.class, SecurityUploadProperties.class}) public class UploadAutoConfiguration implements WebMvcConfigurer { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java index 40f224e..cc854eb 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java @@ -11,10 +11,15 @@ import com.lframework.starter.web.components.generator.handler.impl.SnowFlakeGen import com.lframework.starter.web.components.generator.handler.impl.StaticStrGenerateCodeRuleHandler; import com.lframework.starter.web.components.generator.handler.impl.UUIDGenerateCodeRuleHandler; import com.lframework.starter.web.components.security.UserTokenResolver; +import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; import com.lframework.starter.web.components.upload.handler.UploadHandler; +import com.lframework.starter.web.components.upload.handler.impl.CosSecurityUploadHandler; import com.lframework.starter.web.components.upload.handler.impl.CosUploadHandler; +import com.lframework.starter.web.components.upload.handler.impl.LocalSecurityUploadHandler; import com.lframework.starter.web.components.upload.handler.impl.LocalUploadHandler; +import com.lframework.starter.web.components.upload.handler.impl.ObsSecurityUploadHandler; import com.lframework.starter.web.components.upload.handler.impl.ObsUploadHandler; +import com.lframework.starter.web.components.upload.handler.impl.OssSecurityUploadHandler; import com.lframework.starter.web.components.upload.handler.impl.OssUploadHandler; import com.lframework.starter.web.resp.InvokeResultErrorBuilderWrapper; import com.lframework.starter.web.resp.ResponseErrorBuilder; @@ -62,6 +67,26 @@ public class WebBeanAutoConfiguration { return new OssUploadHandler(); } + @Bean + public SecurityUploadHandler ossSecurityUploadHandler() { + return new OssSecurityUploadHandler(); + } + + @Bean + public SecurityUploadHandler cosSecurityUploadHandler() { + return new CosSecurityUploadHandler(); + } + + @Bean + public SecurityUploadHandler localSecurityUploadHandler() { + return new LocalSecurityUploadHandler(); + } + + @Bean + public SecurityUploadHandler obsSecurityUploadHandler() { + return new ObsSecurityUploadHandler(); + } + @Bean public ResponseErrorBuilder invokeResultBuilderWrapper() { return new InvokeResultErrorBuilderWrapper(); diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/properties/SecurityUploadProperties.java b/web-starter/src/main/java/com/lframework/starter/web/config/properties/SecurityUploadProperties.java new file mode 100644 index 0000000..c5b19a9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/config/properties/SecurityUploadProperties.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.config.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "jugg.security-upload") +public class SecurityUploadProperties { + + /** + * 下载时的域名 + */ + private String domain; + + /** + * 上传文件的路径 + */ + private String location; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/constants/MybatisConstants.java b/web-starter/src/main/java/com/lframework/starter/web/constants/MybatisConstants.java index bbd0376..4c309f5 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/constants/MybatisConstants.java +++ b/web-starter/src/main/java/com/lframework/starter/web/constants/MybatisConstants.java @@ -11,9 +11,4 @@ public interface MybatisConstants { * 默认每页条数 */ int DEFAULT_PAGE_SIZE = 20; - - /** - * 默认导出条数 - */ - int DEFAULT_EXPORT_SIZE = 2000; } diff --git a/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java b/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java index 0bcbea2..6bcea16 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java +++ b/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java @@ -63,11 +63,6 @@ public abstract class BaseController { return getPageSize(null); } - public int getExportSize() { - - return MybatisConstants.DEFAULT_EXPORT_SIZE; - } - /** * 获取当前登录用户信息 * diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java b/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java index bbe866e..03dfd0c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java @@ -60,4 +60,20 @@ public interface SysConfService extends BaseService { * @return */ Integer getInteger(String key, Integer defaultValue); + + /** + * 根据Key查询Long + * + * @param key + * @return + */ + Long getLong(String key); + + /** + * 根据Key查询Long + * + * @param key + * @return + */ + Long getLong(String key, Long defaultValue); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelUtil.java index c73e383..67df914 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelUtil.java @@ -495,21 +495,6 @@ public class ExcelUtil { File file, String sheetName, Class clazz) { - return multipartExportXls(file, sheetName, sheetName, clazz); - } - - /** - * 分段导出Xls至文件 - * - * @param fileName - * @param sheetName - * @param clazz - * @param - */ - public static ExcelMultipartWriterSheetBuilder multipartExportXls( - File file, String fileName, - String sheetName, Class clazz) { - return multipartExportExcel(FileUtil.getOutputStream(file), sheetName, ExcelTypeEnum.XLS, clazz); } @@ -525,21 +510,6 @@ public class ExcelUtil { File file, String sheetName, Class clazz) { - return multipartExportXlsx(file, sheetName, sheetName, clazz); - } - - /** - * 分段导出Xlsx至文件 - * - * @param fileName - * @param sheetName - * @param clazz - * @param - */ - public static ExcelMultipartWriterSheetBuilder multipartExportXlsx( - File file, - String fileName, String sheetName, Class clazz) { - return multipartExportExcel(FileUtil.getOutputStream(file), sheetName, ExcelTypeEnum.XLSX, clazz); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java index 8f41a21..ef6f1f4 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java @@ -3,17 +3,23 @@ package com.lframework.starter.web.utils; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.FileUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.upload.UploadHandlerFactory; +import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; import com.lframework.starter.web.components.upload.handler.UploadHandler; import com.lframework.starter.web.service.SysConfService; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.springframework.web.multipart.MultipartFile; @@ -26,36 +32,152 @@ public class UploadUtil { * @param file * @return */ - public static String upload(MultipartFile file) { + public static UploadDto upload(MultipartFile file) { - Assert.notNull(file); - SysConfService sysConfService = ApplicationUtil.getBean(SysConfService.class); - String uploadTypeStr = sysConfService.findByKey("upload.type", "LOCAL"); + return upload(file, Collections.emptyList(), false); + } - UploadHandler uploadHandler = UploadHandlerFactory.getInstance(uploadTypeStr); + /** + * 上传文件 + * + * @param file + * @return + */ + public static UploadDto upload(MultipartFile file, String parentPath) { - String suffix = FileUtil.getSuffix(file.getOriginalFilename()); - String fileName = IdUtil.getUUID(); - String fullFileName = - fileName + (StringUtil.isEmpty(suffix) ? StringPool.EMPTY_STR : ("." + suffix)); + return upload(file, parentPath, false); + } + /** + * 上传文件 + * + * @param file + * @return + */ + public static UploadDto upload(MultipartFile file, String parentPath, Boolean security) { + + return upload(file, Collections.singletonList(parentPath), security); + } + + /** + * 上传文件 + * + * @param file + * @return + */ + public static UploadDto upload(MultipartFile file, List parentPathList, + Boolean security) { + + Assert.notNull(file); try (InputStream is = file.getInputStream()) { - return uploadHandler.upload(is, getDefaultLocations(), fullFileName); + return upload(is, file.getOriginalFilename(), parentPathList, security); + } catch (IOException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + } + + /** + * 上传文件 + * + * @param file + * @return + */ + public static UploadDto upload(File file) { + + return upload(file, Collections.emptyList(), false); + } + + /** + * 上传文件 + * + * @param file + * @return + */ + public static UploadDto upload(File file, String parentPath) { + + return upload(file, parentPath, false); + } + + /** + * 上传文件 + * + * @param file + * @return + */ + public static UploadDto upload(File file, String parentPath, Boolean security) { + + return upload(file, Collections.singletonList(parentPath), security); + } + + /** + * 上传文件 + * + * @param file + * @return + */ + public static UploadDto upload(File file, List parentPathList, Boolean security) { + + Assert.notNull(file); + try (InputStream is = FileUtil.getInputStream(file)) { + return upload(is, file.getName(), parentPathList, security); } catch (IOException e) { log.error(e.getMessage(), e); throw new DefaultSysException(e.getMessage()); } } + /** + * 上传文件 + * + * @return + */ + public static UploadDto upload(InputStream is, String fileName, List parentPathList, + Boolean security) { + + Assert.notNull(is); + SysConfService sysConfService = ApplicationUtil.getBean(SysConfService.class); + String key = security ? "security-upload.type" : "upload.type"; + String uploadTypeStr = sysConfService.findByKey(key, "LOCAL"); + + String suffix = FileUtil.getSuffix(fileName); + String randomFileName = IdUtil.getUUID(); + String fullFileName = + randomFileName + (StringUtil.isEmpty(suffix) ? StringPool.EMPTY_STR : ("." + suffix)); + + if (security) { + SecurityUploadHandler uploadHandler = UploadHandlerFactory.getSecurityInstance(uploadTypeStr); + + return uploadHandler.upload(is, getDefaultLocations(parentPathList), fullFileName); + } else { + UploadHandler uploadHandler = UploadHandlerFactory.getInstance(uploadTypeStr); + + return uploadHandler.upload(is, getDefaultLocations(parentPathList), fullFileName); + } + } + + public static String generatePresignedUrl(String uploadType, String objectName) { + + SysConfService sysConfService = ApplicationUtil.getBean(SysConfService.class); + SecurityUploadHandler uploadHandler = UploadHandlerFactory.getSecurityInstance(uploadType); + Long expire = sysConfService.getLong("security-upload.sign-url-expired", 600L); + + return uploadHandler.generatePresignedUrl(objectName, expire); + } + /** * 获取默认的locations * * @return */ - private static List getDefaultLocations() { + private static List getDefaultLocations(List parentPathList) { LocalDate now = LocalDate.now(); List locations = new ArrayList<>(); + if (!CollectionUtil.isEmpty(parentPathList)) { + locations.addAll(parentPathList.stream().filter(t -> !StringUtil.isBlank(t)).collect( + Collectors.toList())); + } locations.add(DateUtil.formatDate(now, "yyyy")); locations.add(DateUtil.formatDate(now, "MM")); locations.add(DateUtil.formatDate(now, "dd")); diff --git a/websocket-starter/pom.xml b/websocket-starter/pom.xml index c8c51b3..8521307 100644 --- a/websocket-starter/pom.xml +++ b/websocket-starter/pom.xml @@ -7,7 +7,7 @@ parent com.lframework - 3.1.5 + 3.1.6 websocket-starter -- Gitee From 801b8d864acf1aec3a59fc753cd22cd7d169a47a Mon Sep 17 00:00:00 2001 From: lframework Date: Sat, 26 Apr 2025 22:25:46 +0800 Subject: [PATCH 07/18] =?UTF-8?q?fix=20objectName=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E6=8B=BC=E6=8E=A5=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/components/upload/client/impl/CosUploadClient.java | 4 +++- .../web/components/upload/client/impl/ObsUploadClient.java | 4 +++- .../web/components/upload/client/impl/OssUploadClient.java | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java index 92973c1..6157b5e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java @@ -3,6 +3,7 @@ package com.lframework.starter.web.components.upload.client.impl; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.upload.client.UploadClient; @@ -49,7 +50,8 @@ public class CosUploadClient implements UploadClient { Assert.notBlank(config.getSecretKey()); Assert.notBlank(config.getRegion()); - String objectName = StringUtil.join("/", locations) + fileName; + String objectName = (CollectionUtil.isEmpty(locations) ? StringPool.EMPTY_STR + : (StringUtil.join("/", locations) + "/")) + fileName; TransferManager transferManager = null; try { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java index e999649..f6c0ea2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.URLUtil; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.upload.client.UploadClient; import com.lframework.starter.web.components.upload.client.config.ObsUploadConfig; @@ -41,7 +42,8 @@ public class ObsUploadClient implements UploadClient { Assert.notBlank(ak); Assert.notBlank(sk); - String objectName = StringUtil.join("/", locations) + fileName; + String objectName = (CollectionUtil.isEmpty(locations) ? StringPool.EMPTY_STR + : (StringUtil.join("/", locations) + "/")) + fileName; try (ObsClient obsClient = new ObsClient(ak, sk, endPoint)) { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java index c7bc248..fa7cf68 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java @@ -9,6 +9,7 @@ import com.aliyun.oss.model.GeneratePresignedUrlRequest; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.upload.client.UploadClient; @@ -50,7 +51,8 @@ public class OssUploadClient implements UploadClient { : internalEndPoint, accessKeyId, accessKeySecret); - String objectName = StringUtil.join("/", locations) + fileName; + String objectName = (CollectionUtil.isEmpty(locations) ? StringPool.EMPTY_STR + : (StringUtil.join("/", locations) + "/")) + fileName; try { // 这里不判断桶是否存在,通过控台创建 ossClient.putObject(bucketName, objectName, is); -- Gitee From a7eeb919f5aa8d1b4437c0a2e174c052cf26aa4b Mon Sep 17 00:00:00 2001 From: lframework Date: Wed, 30 Apr 2025 18:12:34 +0800 Subject: [PATCH 08/18] =?UTF-8?q?fix=20=E5=AF=BC=E5=85=A5=E5=88=A4?= =?UTF-8?q?=E7=A9=BA=E6=A0=A1=E9=AA=8C=E6=8F=90=E7=A4=BA=E8=A1=8C=E6=95=B0?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/components/excel/ExcelImportListener.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java b/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java index ae18647..3897514 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java @@ -9,8 +9,8 @@ import com.lframework.starter.common.utils.NumberUtil; import com.lframework.starter.common.utils.ReflectUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.annotations.excel.ExcelRequired; -import com.lframework.starter.web.utils.ApplicationUtil; import com.lframework.starter.web.service.SysConfService; +import com.lframework.starter.web.utils.ApplicationUtil; import com.lframework.starter.web.utils.ExcelImportUtil; import com.lframework.starter.web.utils.TransactionUtil; import java.lang.reflect.Field; @@ -125,21 +125,19 @@ public abstract class ExcelImportListener extends ExcelEve this.datas.add(data); // 校验必填项 - this.checkFields(data); + this.checkFields(data, context); this.doInvoke(data, context); } } - private void checkFields(T data) { + private void checkFields(T data, AnalysisContext context) { if (data == null) { return; } Field[] fields = ReflectUtil.getFields(data.getClass()); - int index = 0; for (Field field : fields) { - index++; ExcelRequired excelRequired = field.getAnnotation(ExcelRequired.class); if (excelRequired == null) { continue; @@ -162,7 +160,8 @@ public abstract class ExcelImportListener extends ExcelEve fieldName = ArrayUtil.join(fieldNames, "-"); } - throw new DefaultClientException("第" + (index) + "行“" + fieldName + "”不能为空"); + throw new DefaultClientException( + "第" + (context.readRowHolder().getRowIndex()) + "行“" + fieldName + "”不能为空"); } } } -- Gitee From a847389e69a808dce85c1f8fca89b013f3136eae Mon Sep 17 00:00:00 2001 From: lframework Date: Mon, 5 May 2025 17:10:53 +0800 Subject: [PATCH 09/18] =?UTF-8?q?fix=20=E6=B5=81=E6=B0=B4=E5=8F=B7?= =?UTF-8?q?=E7=9A=84key=E9=9C=80=E8=A6=81=E5=92=8C=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/handler/impl/FlowGenerateCodeRuleHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java index 13cb456..857948d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java @@ -4,6 +4,7 @@ import com.lframework.starter.common.exceptions.impl.DefaultClientException; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; +import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.components.tenant.TenantContextHolder; import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; @@ -13,6 +14,7 @@ import com.lframework.starter.web.components.redis.RedisHandler; import com.lframework.starter.web.utils.IdUtil; import com.lframework.starter.web.utils.JsonUtil; import com.lframework.starter.web.utils.TenantUtil; +import java.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; public class FlowGenerateCodeRuleHandler implements GenerateCodeRuleHandler { @@ -41,7 +43,7 @@ public class FlowGenerateCodeRuleHandler implements GenerateCodeRuleHandler Date: Mon, 5 May 2025 17:11:29 +0800 Subject: [PATCH 10/18] =?UTF-8?q?fix=20=E6=B5=81=E6=B0=B4=E5=8F=B7?= =?UTF-8?q?=E7=9A=84key=E9=9C=80=E8=A6=81=E5=92=8C=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/handler/impl/FlowGenerateCodeRuleHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java index 857948d..a2b9a09 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java @@ -43,7 +43,7 @@ public class FlowGenerateCodeRuleHandler implements GenerateCodeRuleHandler Date: Fri, 9 May 2025 23:57:30 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/activemq-starter/pom.xml | 2 +- mq-starter/mq-core/pom.xml | 2 +- mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- pom.xml | 4 ++-- web-starter/pom.xml | 2 +- .../com/lframework/starter/web/utils/JsonUtil.java | 14 ++++++++++++++ websocket-starter/pom.xml | 2 +- 10 files changed, 24 insertions(+), 10 deletions(-) diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index 205c285..e59bb5e 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.6 + 3.1.7 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 1413054..194aafd 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.6 + 3.1.7 4.0.0 diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index 9922d5c..4c39e47 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 3.1.6 + 3.1.7 activemq-starter diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index 1f5fd21..4fe2535 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.6 + 3.1.7 mq-core diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index 053d27c..19edc65 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.6 + 3.1.7 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index 9f39604..f8b2419 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.6 + 3.1.7 rabbitmq-starter diff --git a/pom.xml b/pom.xml index b2c7c50..d0d867c 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 3.1.6 + 3.1.7 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 3.1.6 + 3.1.7 1.18.10 1.7.21 1.1.7 diff --git a/web-starter/pom.xml b/web-starter/pom.xml index b5a4ebc..20a8da7 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.6 + 3.1.7 4.0.0 diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java index 8666c18..da82ad2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java @@ -2,6 +2,7 @@ package com.lframework.starter.web.utils; import cn.hutool.json.JSONUtil; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.JsonNodeType; @@ -29,6 +30,19 @@ public class JsonUtil extends JSONUtil { } } + public static T parseObject(String jsonStr, TypeReference typeRef) { + if (StringUtil.isEmpty(jsonStr) || typeRef == null) { + return null; + } + + try { + return OBJECT_MAPPER.readValue(jsonStr, typeRef); + } catch (JsonProcessingException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + } + public static T parseObject(String jsonStr, Class clazz) { if (StringUtil.isEmpty(jsonStr) || clazz == null) { diff --git a/websocket-starter/pom.xml b/websocket-starter/pom.xml index 8521307..77c65a1 100644 --- a/websocket-starter/pom.xml +++ b/websocket-starter/pom.xml @@ -7,7 +7,7 @@ parent com.lframework - 3.1.6 + 3.1.7 websocket-starter -- Gitee From d32987b49625f3a10f33a0fa8217a1fb5e779ff3 Mon Sep 17 00:00:00 2001 From: lframework Date: Sun, 18 May 2025 19:04:34 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E5=8D=95=E5=8F=B7=E8=A7=84=E5=88=99-?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E5=8F=B7=E5=A2=9E=E5=8A=A0=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/activemq-starter/pom.xml | 2 +- mq-starter/mq-core/pom.xml | 2 +- mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- pom.xml | 4 ++-- web-starter/pom.xml | 2 +- .../handler/impl/FlowGenerateCodeRuleHandler.java | 12 +++++++++--- .../generator/rule/AbstractGenerateCodeRule.java | 15 +++++++++++++++ .../impl/CurrentDateTimeGenerateCodeRule.java | 3 ++- .../impl/CustomRandomStrGenerateCodeRule.java | 3 ++- .../generator/rule/impl/FlowGenerateCodeRule.java | 9 ++++++++- .../rule/impl/SnowFlakeGenerateCodeRule.java | 3 ++- .../rule/impl/StaticStrGenerateCodeRule.java | 3 ++- .../generator/rule/impl/UUIDGenerateCodeRule.java | 3 ++- websocket-starter/pom.xml | 2 +- 17 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/AbstractGenerateCodeRule.java diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index e59bb5e..4409c05 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.7 + 3.1.8 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 194aafd..8a8a57f 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.7 + 3.1.8 4.0.0 diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index 4c39e47..a9db9d8 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 3.1.7 + 3.1.8 activemq-starter diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index 4fe2535..8c4ebe8 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.7 + 3.1.8 mq-core diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index 19edc65..95f0f74 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.7 + 3.1.8 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index f8b2419..e28d78c 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.7 + 3.1.8 rabbitmq-starter diff --git a/pom.xml b/pom.xml index d0d867c..18ccba1 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 3.1.7 + 3.1.8 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 3.1.7 + 3.1.8 1.18.10 1.7.21 1.1.7 diff --git a/web-starter/pom.xml b/web-starter/pom.xml index 20a8da7..195d1d9 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.7 + 3.1.8 4.0.0 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java index a2b9a09..69f6abb 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java @@ -6,11 +6,11 @@ import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.tenant.TenantContextHolder; import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; import com.lframework.starter.web.components.generator.rule.impl.FlowGenerateCodeRule; import com.lframework.starter.web.components.redis.RedisHandler; +import com.lframework.starter.web.components.tenant.TenantContextHolder; import com.lframework.starter.web.utils.IdUtil; import com.lframework.starter.web.utils.JsonUtil; import com.lframework.starter.web.utils.TenantUtil; @@ -43,7 +43,8 @@ public class FlowGenerateCodeRuleHandler implements GenerateCodeRuleHandler codeLen) { @@ -98,6 +100,10 @@ public class FlowGenerateCodeRuleHandler implements GenerateCodeRuleHandler parent com.lframework - 3.1.7 + 3.1.8 websocket-starter -- Gitee From 4d872814be7b2e63da05c2042bd835b4994b242c Mon Sep 17 00:00:00 2001 From: lframework Date: Fri, 6 Jun 2025 01:32:19 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E3=80=81=E9=9B=86=E6=88=90BPM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bpm-starter/pom.xml | 53 + .../flow/category/DetailFlowCategoryBo.java | 48 + .../category/QueryFlowCategoryTreeBo.java | 30 + .../definition/DetailFlowDefinitionBo.java | 66 + .../definition/FlowDefinitionSelectorBo.java | 62 + .../definition/QueryFlowDefinitionBo.java | 77 + .../instance/QueryBusinessFlowInstanceBo.java | 36 + .../bpm/bo/flow/task/QueryInstanceListBo.java | 146 ++ .../bpm/bo/flow/task/QueryMyTaskListBo.java | 146 ++ .../bpm/bo/flow/task/QueryTodoTaskListBo.java | 131 ++ .../bpm/config/BpmBeanAutoConfiguration.java | 66 + .../config/BpmSwaggerAutoConfiguration.java | 31 + .../bpm/controller/BpmSelectorController.java | 78 + .../controller/FlowCategoryController.java | 122 ++ .../controller/FlowDefinitionController.java | 202 ++ .../controller/FlowInstanceController.java | 67 + .../bpm/controller/FlowTaskController.java | 159 ++ .../starter/bpm/dto/FlowInstanceExtDto.java | 21 + .../starter/bpm/dto/FlowTaskDto.java | 92 + .../starter/bpm/entity/FlowCategory.java | 29 + .../starter/bpm/entity/FlowCuApproveHis.java | 76 + .../starter/bpm/entity/FlowCuInstance.java | 41 + .../bpm/entity/FlowDefinitionWrapper.java | 98 + .../bpm/entity/FlowInstanceWrapper.java | 105 ++ .../starter/bpm/entity/FlowTaskWrapper.java | 88 + .../starter/bpm/enums/FlowCooperateType.java | 34 + .../enums/FlowDefinitionActivityStatus.java | 31 + .../bpm/enums/FlowDefinitionExtBizType.java | 31 + .../bpm/enums/FlowDefinitionIsPublish.java | 31 + .../starter/bpm/enums/FlowInstanceStatus.java | 40 + .../starter/bpm/enums/FlowNodeType.java | 36 + .../starter/bpm/enums/FlowSkipType.java | 36 + .../bpm/handlers/BpmChartExtService.java | 62 + .../bpm/handlers/BpmDataFillHandler.java | 20 + .../bpm/handlers/BpmHandlerSelectService.java | 229 +++ .../bpm/handlers/BpmPermissionHandler.java | 69 + .../exception/FlowExceptionConverter.java | 19 + .../bpm/impl/FlowCategoryServiceImpl.java | 58 + .../bpm/impl/FlowCuApproveHisServiceImpl.java | 14 + .../bpm/impl/FlowCuInstanceServiceImpl.java | 14 + .../FlowDefinitionWrapperServiceImpl.java | 74 + .../impl/FlowInstanceWrapperServiceImpl.java | 26 + .../bpm/impl/FlowTaskWrapperServiceImpl.java | 190 ++ .../starter/bpm/listeners/BpmBizListener.java | 65 + .../bpm/listeners/BpmGlobalListener.java | 374 ++++ .../bpm/mappers/FlowCategoryMapper.java | 8 + .../bpm/mappers/FlowCuApproveHisMapper.java | 8 + .../bpm/mappers/FlowCuInstanceMapper.java | 8 + .../mappers/FlowDefinitionWrapperMapper.java | 18 + .../mappers/FlowInstanceWrapperMapper.java | 8 + .../bpm/mappers/FlowTaskWrapperMapper.java | 38 + .../bpm/service/FlowCategoryService.java | 33 + .../bpm/service/FlowCuApproveHisService.java | 8 + .../bpm/service/FlowCuInstanceService.java | 8 + .../service/FlowDefinitionWrapperService.java | 35 + .../service/FlowInstanceWrapperService.java | 15 + .../bpm/service/FlowTaskWrapperService.java | 84 + .../bpm/transfers/FlowCuInstanceTransfer.java | 18 + .../flow/category/CreateFlowCategoryVo.java | 23 + .../flow/category/GetFlowCategoryListVo.java | 9 + .../flow/category/UpdateFlowCategoryVo.java | 23 + .../definition/CreateFlowDefinitionVo.java | 36 + .../definition/FlowDefinitionSelectorVo.java | 30 + .../definition/QueryFlowDefinitionVo.java | 48 + .../SetFlowDefinitionActivityStatusVo.java | 30 + .../SetFlowDefinitionPublishVo.java | 30 + .../definition/UpdateFlowDefinitionVo.java | 35 + .../vo/flow/instance/QueryInstanceListVo.java | 30 + .../bpm/vo/flow/task/ApprovePassTaskVo.java | 35 + .../bpm/vo/flow/task/ApproveRefuseTaskVo.java | 35 + .../bpm/vo/flow/task/QueryMyTaskListVo.java | 30 + .../bpm/vo/flow/task/QueryTodoTaskListVo.java | 30 + .../bpm/vo/flow/task/RejectTaskVo.java | 35 + .../starter/bpm/vo/flow/task/UndoTaskVo.java | 35 + .../src/main/java/lombok.config | 0 .../main/resources/META-INF/spring.factories | 3 + .../mappers/FlowDefinitionWrapperMapper.xml | 27 + .../mappers/FlowTaskWrapperMapper.xml | 114 ++ cloud-starter/pom.xml | 2 +- .../cloud/components/DefaultErrorDecoder.java | 3 +- .../cloud/config/CloudSecurityConfigurer.java | 8 +- .../cloud/controller/DefaultClient.java | 2 +- .../interceptors/FeignRequestInterceptor.java | 3 +- .../starter/cloud/resp/ApiInvokeResult.java | 2 +- .../cloud/resp/ApiInvokeResultBuilder.java | 2 +- .../ApiInvokeResultErrorBuilderWrapper.java | 4 +- common/pom.xml | 2 +- .../starter/common/constants/StringPool.java | 4 + .../starter/common/utils/DateUtil.java | 4 + mq-starter/activemq-starter/pom.xml | 2 +- .../ActiveMqTenantInterceptor.java | 4 +- .../activemq/producer/ActiveMqProducer.java | 4 +- mq-starter/mq-core/pom.xml | 2 +- .../mq/core/bo/ExportingExportTaskBo.java | 54 + .../starter/mq/core/bo/FailExportTaskBo.java | 39 + .../mq/core/bo/SuccessExportTaskBo.java | 57 + .../components/export/ExportTaskWorker.java | 47 + .../core/config/MqBeanAutoConfiguration.java | 25 + .../config/MqSwaggerAutoConfiguration.java | 31 + .../core/controller/ExportTaskController.java | 106 ++ .../starter/mq/core/dto/AddExportTaskDto.java | 30 + .../mq/core/dto/ExecuteExportTaskDto.java | 15 + .../mq/core/dto/ExportTaskSummaryDto.java | 17 + .../starter/mq/core/entity/ExportTask.java | 106 ++ .../mq/core/enums/ExportTaskStatus.java | 34 + .../mq/core/events/ExportTaskNotifyEvent.java | 15 + .../mq/core/handlers/ExportTaskHandler.java | 147 ++ .../mq/core/impl/ExportTaskServiceImpl.java | 127 ++ .../mq/core/mappers/ExportTaskMapper.java | 24 + .../mq/core/service/ExportTaskService.java | 67 + .../mq/core/service/MqProducerService.java | 46 + .../starter/mq/core/utils/ExportTaskUtil.java | 27 + .../mq/core/vo/QueryFailExportTaskVo.java | 15 + .../mq/core/vo/QuerySuccessExportTaskVo.java | 15 + .../main/resources/META-INF/spring.factories | 3 +- .../resources/mappers/ExportTaskMapper.xml | 13 + mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- .../config/RabbitMqAutoConfiguration.java | 24 +- .../config/TenantMethodInterceptor.java | 4 +- .../rabbitmq/constants/RabbitMqConstants.java | 40 + .../constants/RabbitMqStringPool.java | 39 + .../impl/RabbitMqProducerServiceImpl.java | 42 + .../app/ExportTaskNotifyListener.java | 41 + .../listeners/mq/ExportTaskListener.java | 125 ++ .../listeners/mq/SysMailMessageListener.java | 130 ++ .../listeners/mq/SysNotifyListener.java | 174 ++ .../listeners/mq/SysSiteMessageListener.java | 91 + .../rabbitmq/producer/RabbitMqProducer.java | 4 +- pom.xml | 34 +- web-starter/pom.xml | 15 +- .../starter/web/bo/BasePrintBo.java | 84 - .../starter/web/bo/BasePrintDataBo.java | 17 - .../redis/locker/RedisLockConditional.java | 15 - .../web/config/GenAutoConfiguration.java | 227 +++ .../web/config/LockAutoConfiguration.java | 8 +- .../config/MagicCustomAutoConfiguration.java | 61 + .../web/config/MailAutoConfiguration.java | 8 +- .../web/config/MybatisAutoConfiguration.java | 15 +- .../config/MybatisBeanAutoConfiguration.java | 2 +- .../PasswordEncoderAutoConfiguration.java | 2 +- .../web/config/RedisAutoConfiguration.java | 2 +- .../web/config/SecurityAutoConfiguration.java | 8 +- .../web/config/SwaggerAutoConfiguration.java | 2 +- ...tion.java => TenantAutoConfiguration.java} | 16 +- ...antDynamicDataSourceAutoConfiguration.java | 66 + .../web/config/WebAutoConfiguration.java | 14 +- .../web/config/WebBeanAutoConfiguration.java | 368 +++- .../config/WebCommonAutoConfiguration.java | 2 +- .../web/config/WebMvcAutoConfiguration.java | 2 +- .../config/WebSwaggerAutoConfiguration.java | 48 + .../web}/config/WsAutoConfiguration.java | 21 +- .../web/config/properties}/WsProperties.java | 3 +- .../annotations/constants/EncryType.java | 2 +- .../annotations/convert/EncryptConvert.java | 4 +- .../annotations/convert/EnumConvert.java | 2 +- .../annotations/convert/IgnoreConvert.java | 2 +- .../web/core/annotations/ds/CurTenantDs.java | 17 + .../annotations/excel/ExcelRequired.java | 2 +- .../annotations/locker/EnableLock.java | 2 +- .../annotations/locker/LockType.java | 2 +- .../annotations/openapi}/OpenApi.java | 2 +- .../web/core/annotations/oplog/OpLog.java | 54 + .../permission/DataPermission.java | 17 + .../permission/DataPermissionGroup.java | 15 + .../permission/DataPermissions.java | 18 + .../annotations/security/HasPermission.java | 4 +- .../web/core/annotations/sort/Sort.java | 36 + .../web/core/annotations/sort/Sorts.java | 15 + .../timeline/OrderTimeLineLog.java | 61 + .../{ => core}/aop/ControllerAspector.java | 5 +- .../starter/web/core/aop/OpLogAspector.java | 194 ++ .../web/{ => core}/aop/OpenApiAspect.java | 14 +- .../web/core/aop/OrderTimeLineLogAspect.java | 222 +++ .../web/{ => core}/aop/PermissionAspect.java | 9 +- .../starter/web/{ => core}/bo/BaseBo.java | 6 +- .../web/{ => core}/bo/ExcelImportBo.java | 4 +- .../starter/web/{ => core}/bo/SuperBo.java | 2 +- .../components/cache/CacheVariables.java | 6 +- .../components/captcha}/CaptchaValidator.java | 5 +- .../components/excel/ExcelEventListener.java | 2 +- .../ExcelHorizontalCellStyleStrategy.java | 2 +- .../components/excel/ExcelImportListener.java | 12 +- .../components/excel/ExcelModel.java | 2 +- .../excel/ExcelMultipartWriterBuilder.java | 2 +- .../ExcelMultipartWriterSheetBuilder.java | 4 +- .../generator/GenerateCodeFactory.java | 10 +- .../handler/GenerateCodeRuleHandler.java | 4 +- ...urrentDateTimeRuleGenerateCodeHandler.java | 10 +- ...ustomRandomStrGenerateCodeRuleHandler.java | 12 +- .../impl/FlowGenerateCodeRuleHandler.java | 18 +- .../SnowFlakeGenerateCodeRuleHandler.java | 8 +- .../StaticStrGenerateCodeRuleHandler.java | 10 +- .../impl/UUIDGenerateCodeRuleHandler.java | 10 +- .../rule/AbstractGenerateCodeRule.java | 2 +- .../generator/rule/GenerateCodeRule.java | 2 +- .../impl/CurrentDateTimeGenerateCodeRule.java | 6 +- .../impl/CustomRandomStrGenerateCodeRule.java | 6 +- .../rule/impl/FlowGenerateCodeRule.java | 6 +- .../rule/impl/RandomIntGenerateCodeRule.java | 4 +- .../rule/impl/SnowFlakeGenerateCodeRule.java | 6 +- .../rule/impl/StaticStrGenerateCodeRule.java | 6 +- .../rule/impl/UUIDGenerateCodeRule.java | 6 +- .../components/locker/DefaultLockBuilder.java | 2 +- .../components/locker/LockFactory.java | 4 +- .../components}/locker/RedisLockBuilder.java | 4 +- .../core/components/notify/SysNotifyRule.java | 15 + .../components/notify/SysNotifyRuleEmail.java | 25 + .../components/notify/SysNotifyRuleSys.java | 25 + .../web/core/components/oplog/OpLogType.java | 11 + .../permission/DataPermissionHandlerImpl.java | 187 ++ .../SysDataPermissionDataPermissionType.java | 11 + .../core/components/qrtz/DynamicQrtzJob.java | 58 + .../web/core/components/qrtz/QrtzHandler.java | 321 ++++ .../web/core/components/qrtz/QrtzJob.java | 52 + .../components/redis/RedisHandler.java | 2 +- .../components}/resp/InvokeResult.java | 2 +- .../components}/resp/InvokeResultBuilder.java | 6 +- .../resp/InvokeResultErrorBuilderWrapper.java | 4 +- .../components}/resp/PageResult.java | 2 +- .../{ => core/components}/resp/Response.java | 2 +- .../resp/ResponseErrorBuilder.java | 2 +- .../security/AbstractUserDetails.java | 2 +- .../security/AbstractUserDetailsService.java | 80 + .../security/CheckPermissionHandler.java | 2 +- .../security/CheckPermissionHandlerImpl.java | 2 +- .../security/DefaultUserDetails.java | 2 +- .../security/PasswordEncoderWrapper.java | 2 +- .../security/PermissionCalcType.java | 2 +- .../components/security/PermitAllService.java | 2 +- .../security/SecurityConstants.java | 2 +- .../components/security/SecurityUtil.java | 2 +- .../components/security/UserDetails.java | 2 +- .../security/UserDetailsService.java | 2 +- .../security/UserTokenResolver.java} | 4 +- .../security/UserTokenResolverImpl.java} | 4 +- .../components}/sign/CheckSignFactory.java | 2 +- .../components}/sign/CheckSignHandler.java | 4 +- .../sign/DefaultCheckSignFactory.java | 4 +- .../sign/DefaultCheckSignHandler.java | 5 +- .../sign/handler/DefaultCheckSignHandler.java | 80 + .../core/components/sign/util/SignUtil.java | 97 + .../tenant/DefaultTenantInterceptor.java | 2 +- .../tenant/TenantContextHolder.java | 20 +- .../components/tenant/TenantInterceptor.java | 2 +- .../components}/threads/DefaultCallable.java | 10 +- .../components}/threads/DefaultRunnable.java | 10 +- .../timeline/OrderTimeLineBizType.java | 15 + .../components/trace/DefaultTraceBuilder.java | 2 +- .../components/trace/TraceBuilder.java | 2 +- .../upload/UploadHandlerFactory.java | 8 +- .../upload/client/UploadClient.java | 4 +- .../upload/client/config/CosUploadConfig.java | 2 +- .../client/config/LocalUploadConfig.java | 2 +- .../upload/client/config/ObsUploadConfig.java | 2 +- .../upload/client/config/OssUploadConfig.java | 2 +- .../upload/client/dto/UploadDto.java | 11 +- .../upload/client/impl/CosUploadClient.java | 8 +- .../upload/client/impl/LocalUploadClient.java | 16 +- .../upload/client/impl/ObsUploadClient.java | 8 +- .../upload/client/impl/OssUploadClient.java | 8 +- .../upload/handler/SecurityUploadHandler.java | 13 +- .../upload/handler/UploadHandler.java | 4 +- .../impl/CosSecurityUploadHandler.java | 20 +- .../upload/handler/impl/CosUploadHandler.java | 16 +- .../impl/LocalSecurityUploadHandler.java | 20 +- .../handler/impl/LocalUploadHandler.java | 12 +- .../impl/ObsSecurityUploadHandler.java | 22 +- .../upload/handler/impl/ObsUploadHandler.java | 16 +- .../impl/OssSecurityUploadHandler.java | 22 +- .../upload/handler/impl/OssUploadHandler.java | 16 +- .../components/validation/CodeValidator.java | 2 +- .../components/validation/EnumValidator.java | 6 +- .../components/validation/IsCode.java | 2 +- .../components/validation/IsEnum.java | 4 +- .../components/validation/IsJson.java | 2 +- .../components/validation/IsJsonArray.java | 2 +- .../components/validation/IsJsonObject.java | 2 +- .../validation/IsNumberPrecision.java | 2 +- .../validation/JsonArrayValidator.java | 2 +- .../validation/JsonObjectValidator.java | 2 +- .../components/validation/JsonValidator.java | 2 +- .../validation/NumberPrecisionValidator.java | 2 +- .../components/validation/Pattern.java | 2 +- .../validation/PatternValidator.java | 2 +- .../components/validation/TypeMismatch.java | 2 +- .../components/validation/UploadUrl.java | 2 +- .../validation/UploadUrlValidator.java | 2 +- .../constants/MyBatisStringPool.java | 7 +- .../constants/MybatisConstants.java | 2 +- .../constants/SqlMethodConstants.java | 2 +- .../{ => core}/controller/BaseController.java | 10 +- .../controller/DefaultBaseController.java | 8 +- .../starter/web/{ => core}/dto/BaseDto.java | 2 +- .../{ => core}/dto/GenerateCaptchaDto.java | 2 +- .../starter/web/core/dto/GenerateCodeDto.java | 22 + .../starter/web/{ => core}/dto/VoidDto.java | 2 +- .../web/{ => core}/entity/BaseEntity.java | 2 +- .../web/{ => core}/enums/BaseEnum.java | 2 +- .../{ => core}/event/ClearTenantEvent.java | 2 +- .../{ => core}/event/ReloadTenantEvent.java | 2 +- .../web/{ => core}/event/SetTenantEvent.java | 2 +- .../DefaultBaseEntityFillHandler.java | 8 +- .../exception/WebExceptionConverter.java | 52 + .../exception/WebExceptionHandler.java | 104 ++ .../{ => core}/impl/BaseMpServiceImpl.java | 8 +- .../MybatisPlusUpdateAllColumnInjector.java | 4 +- .../interceptors/CustomSortInterceptor.java | 132 ++ .../interceptors}/LoginInterceptor.java | 5 +- .../interceptors/TenantInterceptorImpl.java | 8 +- .../{ => core}/listeners/TenantListener.java | 10 +- .../web/{ => core}/mapper/BaseMapper.java | 2 +- .../web/{ => core}/service/BaseMpService.java | 8 +- .../web/{ => core}/service/BaseService.java | 2 +- .../web/{ => core}/utils/ApplicationUtil.java | 9 +- .../starter/web/{ => core}/utils/BoUtil.java | 16 +- .../web/{ => core}/utils/CacheUtil.java | 2 +- .../web/{ => core}/utils/CronUtil.java | 2 +- .../web/{ => core}/utils/DataSourceUtil.java | 2 +- .../web/{ => core}/utils/EncryptUtil.java | 2 +- .../web/{ => core}/utils/EnumUtil.java | 4 +- .../web/{ => core}/utils/ExcelImportUtil.java | 4 +- .../web/{ => core}/utils/ExcelUtil.java | 12 +- .../{ => core}/utils/FieldEncryptUtil.java | 4 +- .../web/{ => core}/utils/GroovyUtil.java | 4 +- .../web/{ => core}/utils/HttpUtil.java | 2 +- .../starter/web/{ => core}/utils/IdUtil.java | 7 +- .../web/{ => core}/utils/JsonUtil.java | 2 +- .../starter/web/core/utils/OpLogUtil.java | 144 ++ .../web/{ => core}/utils/PageHelperUtil.java | 6 +- .../web/{ => core}/utils/PageResultUtil.java | 4 +- .../web/{ => core}/utils/RequestUtil.java | 2 +- .../web/{ => core}/utils/ResponseUtil.java | 4 +- .../web/{ => core}/utils/SimpleMap.java | 2 +- .../web/{ => core}/utils/SpelUtil.java | 2 +- .../web/{ => core}/utils/TenantUtil.java | 2 +- .../web/{ => core}/utils/TransactionUtil.java | 2 +- .../web/{ => core}/utils/UploadUtil.java | 12 +- .../web/{ => core}/utils/ValidateUtil.java | 2 +- .../starter/web/{ => core}/vo/BaseVo.java | 2 +- .../starter/web/{ => core}/vo/PageVo.java | 2 +- .../starter/web/{ => core}/vo/SortPageVo.java | 2 +- .../custom/list/GenCustomListSelectorBo.java | 55 + .../bo/custom/list/GetGenCustomListBo.java | 500 +++++ .../bo/custom/list/QueryGenCustomListBo.java | 97 + .../GenCustomListCategorySelectorBo.java | 35 + .../category/GetGenCustomListCategoryBo.java | 38 + .../QueryGenCustomListCategoryBo.java | 38 + .../custom/page/GenCustomPageSelectorBo.java | 50 + .../bo/custom/page/GetGenCustomPageBo.java | 74 + .../bo/custom/page/QueryGenCustomPageBo.java | 92 + .../GenCustomPageCategorySelectorBo.java | 41 + .../category/GetGenCustomPageCategoryBo.java | 44 + .../QueryGenCustomPageCategoryBo.java | 44 + .../selector/GenCustomSelectorSelectorBo.java | 50 + .../selector/GetGenCustomSelectorBo.java | 125 ++ .../selector/QueryGenCustomSelectorBo.java | 98 + .../GenCustomSelectorCategorySelectorBo.java | 35 + .../GetGenCustomSelectorCategoryBo.java | 38 + .../QueryGenCustomSelectorCategoryBo.java | 38 + .../bo/data/entity/DataEntityGenerateBo.java | 114 ++ .../bo/data/entity/GenDataEntityDetailBo.java | 169 ++ .../entity/GenDataEntityDetailGenerateBo.java | 119 ++ .../entity/GenDataEntityDetailSelectorBo.java | 33 + .../data/entity/GenDataEntitySelectorBo.java | 49 + .../gen/bo/data/entity/GetDataEntityBo.java | 95 + .../gen/bo/data/entity/QueryDataEntityBo.java | 104 ++ .../GenDataEntityCategorySelectorBo.java | 35 + .../category/GetGenDataEntityCategoryBo.java | 38 + .../QueryGenDataEntityCategoryBo.java | 38 + .../gen/bo/data/obj/GenDataObjColumnBo.java | 68 + .../gen/bo/data/obj/GenDataObjDetailBo.java | 92 + .../bo/data/obj/GenDataObjQueryDetailBo.java | 60 + .../gen/bo/data/obj/GenDataObjSelectorBo.java | 49 + .../web/gen/bo/data/obj/GetGenDataObjBo.java | 131 ++ .../gen/bo/data/obj/QueryGenDataObjBo.java | 97 + .../GenDataObjCategorySelectorBo.java | 35 + .../obj/category/GetGenDataObjCategoryBo.java | 38 + .../category/QueryGenDataObjCategoryBo.java | 38 + .../gen/bo/gen/GenCreateColumnConfigBo.java | 49 + .../gen/bo/gen/GenDetailColumnConfigBo.java | 49 + .../web/gen/bo/gen/GenGenerateInfoBo.java | 121 ++ .../gen/bo/gen/GenQueryColumnConfigBo.java | 61 + .../bo/gen/GenQueryParamsColumnConfigBo.java | 49 + .../gen/bo/gen/GenUpdateColumnConfigBo.java | 49 + .../gen/bo/simpledb/SimpleDBSelectorBo.java | 33 + .../web/gen/builders/CustomListBuilder.java | 370 ++++ .../web/gen/builders/CustomPageBuilder.java | 40 + .../gen/builders/CustomSelectorBuilder.java | 65 + .../web/gen/builders/DataEntityBuilder.java | 117 ++ .../web/gen/builders/DataObjectBuilder.java | 151 ++ .../gen/components/CreateColumnConfig.java | 19 + .../web/gen/components/DataEntity.java | 42 + .../web/gen/components/DataEntityColumn.java | 130 ++ .../gen/components/DetailColumnConfig.java | 18 + .../web/gen/components/QueryColumnConfig.java | 34 + .../components/QueryParamsColumnConfig.java | 20 + .../starter/web/gen/components/Table.java | 34 + .../web/gen/components/TableColumn.java | 11 + .../gen/components/UpdateColumnConfig.java | 18 + .../custom/list/CustomListConfig.java | 377 ++++ .../custom/page/CustomPageConfig.java | 27 + .../custom/selector/CustomSelectorConfig.java | 51 + .../data/obj/DataObjectQueryObj.java | 122 ++ .../data/obj/DataObjectQueryParamObj.java | 58 + .../gen/components/generate/Generator.java | 1658 +++++++++++++++++ .../templates/ControllerTemplate.java | 116 ++ .../generate/templates/CreateTemplate.java | 210 +++ .../generate/templates/DetailTemplate.java | 160 ++ .../generate/templates/EntityTemplate.java | 112 ++ .../generate/templates/MapperTemplate.java | 100 + .../templates/QueryParamsTemplate.java | 131 ++ .../generate/templates/QueryTemplate.java | 170 ++ .../generate/templates/ServiceTemplate.java | 106 ++ .../generate/templates/SqlTemplate.java | 60 + .../generate/templates/UpdateTemplate.java | 205 ++ .../MagicCustomAuthorizationInterceptor.java | 62 + .../magic/MagicCustomJsonValueProvider.java | 38 + .../magic/MagicCustomMagicFunction.java | 27 + .../components/magic/MagicCustomSqlCache.java | 33 + .../web/gen/controller/GenController.java | 174 ++ .../GenCustomListCategoryController.java | 116 ++ .../controller/GenCustomListController.java | 128 ++ .../GenCustomPageCategoryController.java | 118 ++ .../controller/GenCustomPageController.java | 100 + .../GenCustomSelectorCategoryController.java | 118 ++ .../GenCustomSelectorController.java | 129 ++ .../GenDataEntityCategoryController.java | 116 ++ .../controller/GenDataEntityController.java | 289 +++ .../GenDataObjCategoryController.java | 116 ++ .../gen/controller/GenDataObjController.java | 247 +++ .../gen/controller/GenSelectorController.java | 523 ++++++ .../converters/GenMysqlDataTypeConverter.java | 21 + .../gen/converters/GenStringConverter.java | 61 + .../gen/converters/GenViewTypeConverter.java | 62 + .../web/gen/directives/FormatDirective.java | 117 ++ .../data/entity/DataEntityGenerateDto.java | 52 + .../data/entity/GenDataEntityDetailDto.java | 84 + .../gen/dto/gen/GenCreateColumnConfigDto.java | 27 + .../gen/dto/gen/GenDetailColumnConfigDto.java | 27 + .../web/gen/dto/gen/GenGenerateInfoDto.java | 88 + .../gen/dto/gen/GenQueryColumnConfigDto.java | 38 + .../gen/GenQueryParamsColumnConfigDto.java | 29 + .../gen/dto/gen/GenUpdateColumnConfigDto.java | 27 + .../web/gen/dto/generate/GenerateDto.java | 26 + .../dto/simpledb/OriSimpleTableColumnDto.java | 72 + .../gen/dto/simpledb/OriSimpleTableDto.java | 64 + .../web/gen/dto/simpledb/SimpleDBDto.java | 21 + .../web/gen/dto/simpledb/SimpleTableDto.java | 64 + .../web/gen/entity/GenCreateColumnConfig.java | 38 + .../starter/web/gen/entity/GenCustomList.java | 168 ++ .../web/gen/entity/GenCustomListCategory.java | 76 + .../web/gen/entity/GenCustomListDetail.java | 73 + .../gen/entity/GenCustomListHandleColumn.java | 75 + .../gen/entity/GenCustomListQueryParams.java | 72 + .../web/gen/entity/GenCustomListToolbar.java | 70 + .../starter/web/gen/entity/GenCustomPage.java | 95 + .../web/gen/entity/GenCustomPageCategory.java | 81 + .../web/gen/entity/GenCustomSelector.java | 126 ++ .../gen/entity/GenCustomSelectorCategory.java | 76 + .../starter/web/gen/entity/GenDataEntity.java | 135 ++ .../web/gen/entity/GenDataEntityCategory.java | 76 + .../web/gen/entity/GenDataEntityDetail.java | 160 ++ .../starter/web/gen/entity/GenDataObj.java | 97 + .../web/gen/entity/GenDataObjCategory.java | 76 + .../web/gen/entity/GenDataObjDetail.java | 70 + .../web/gen/entity/GenDataObjQueryDetail.java | 59 + .../web/gen/entity/GenDetailColumnConfig.java | 38 + .../web/gen/entity/GenGenerateInfo.java | 98 + .../web/gen/entity/GenQueryColumnConfig.java | 49 + .../entity/GenQueryParamsColumnConfig.java | 39 + .../web/gen/entity/GenSimpleTable.java | 63 + .../web/gen/entity/GenSimpleTableColumn.java | 83 + .../web/gen/entity/GenUpdateColumnConfig.java | 38 + .../web/gen/entity/GenerateColumnConfig.java | 5 + .../web/gen/entity/GenerateConfig.java | 13 + .../starter/web/gen/enums/GenConvertType.java | 31 + .../web/gen/enums/GenCustomListBtnType.java | 34 + .../gen/enums/GenCustomListBtnViewType.java | 37 + .../gen/enums/GenCustomListDetailType.java | 33 + .../web/gen/enums/GenCustomListType.java | 33 + .../starter/web/gen/enums/GenDataType.java | 86 + .../starter/web/gen/enums/GenKeyType.java | 31 + .../web/gen/enums/GenMySqlDataType.java | 72 + .../starter/web/gen/enums/GenOrderType.java | 31 + .../starter/web/gen/enums/GenQueryType.java | 39 + .../web/gen/enums/GenQueryWidthType.java | 31 + .../starter/web/gen/enums/GenRelaMode.java | 37 + .../starter/web/gen/enums/GenRelaType.java | 29 + .../starter/web/gen/enums/GenStatus.java | 31 + .../web/gen/enums/GenTemplateType.java | 31 + .../starter/web/gen/enums/GenType.java | 31 + .../starter/web/gen/enums/GenViewType.java | 34 + .../web/gen/event/CustomListDeleteEvent.java | 36 + .../web/gen/event/DataEntityDeleteEvent.java | 58 + .../event/DataEntityDetailDeleteEvent.java | 45 + .../web/gen/event/DataObjDeleteEvent.java | 63 + .../event/DataObjQueryDetailDeleteEvent.java | 45 + .../GenCreateColumnConfigServiceImpl.java | 74 + .../GenCustomListCategoryServiceImpl.java | 132 ++ .../impl/GenCustomListDetailServiceImpl.java | 33 + .../GenCustomListHandleColumnServiceImpl.java | 32 + .../GenCustomListQueryParamsServiceImpl.java | 34 + .../gen/impl/GenCustomListServiceImpl.java | 508 +++++ .../impl/GenCustomListToolbarServiceImpl.java | 31 + .../GenCustomPageCategoryServiceImpl.java | 135 ++ .../gen/impl/GenCustomPageServiceImpl.java | 116 ++ .../GenCustomSelectorCategoryServiceImpl.java | 134 ++ .../impl/GenCustomSelectorServiceImpl.java | 166 ++ .../GenDataEntityCategoryServiceImpl.java | 132 ++ .../impl/GenDataEntityDetailServiceImpl.java | 44 + .../gen/impl/GenDataEntityServiceImpl.java | 527 ++++++ .../impl/GenDataObjCategoryServiceImpl.java | 132 ++ .../gen/impl/GenDataObjDetailServiceImpl.java | 37 + .../GenDataObjQueryDetailServiceImpl.java | 33 + .../web/gen/impl/GenDataObjServiceImpl.java | 308 +++ .../GenDetailColumnConfigServiceImpl.java | 73 + .../impl/GenQueryColumnConfigServiceImpl.java | 78 + ...GenQueryParamsColumnConfigServiceImpl.java | 76 + .../GenUpdateColumnConfigServiceImpl.java | 73 + .../web/gen/impl/GenerateInfoServiceImpl.java | 67 + .../web/gen/impl/SimpleDBServiceImpl.java | 72 + .../impl/SimpleTableColumnServiceImpl.java | 53 + .../listeners/CreateColumnConfigListener.java | 40 + .../listeners/DetailColumnConfigListener.java | 40 + .../gen/listeners/GenCustomListListener.java | 90 + .../listeners/GenCustomSelectorListener.java | 32 + .../web/gen/listeners/GenDataObjListener.java | 59 + .../web/gen/listeners/GenTenantListener.java | 39 + .../gen/listeners/GenerateInfoListener.java | 23 + .../listeners/QueryColumnConfigListener.java | 40 + .../QueryParamsColumnConfigListener.java | 40 + .../listeners/UpdateColumnConfigListener.java | 40 + .../starter/web/gen/mappers/DBMapper.java | 13 + .../mappers/GenCreateColumnConfigMapper.java | 34 + .../mappers/GenCustomListCategoryMapper.java | 32 + .../mappers/GenCustomListDetailMapper.java | 8 + .../GenCustomListHandleColumnMapper.java | 17 + .../web/gen/mappers/GenCustomListMapper.java | 52 + .../GenCustomListQueryParamsMapper.java | 8 + .../mappers/GenCustomListToolbarMapper.java | 17 + .../mappers/GenCustomPageCategoryMapper.java | 22 + .../web/gen/mappers/GenCustomPageMapper.java | 35 + .../GenCustomSelectorCategoryMapper.java | 32 + .../gen/mappers/GenCustomSelectorMapper.java | 43 + .../mappers/GenDataEntityCategoryMapper.java | 32 + .../mappers/GenDataEntityDetailMapper.java | 16 + .../web/gen/mappers/GenDataEntityMapper.java | 35 + .../gen/mappers/GenDataObjCategoryMapper.java | 32 + .../gen/mappers/GenDataObjDetailMapper.java | 24 + .../web/gen/mappers/GenDataObjMapper.java | 43 + .../mappers/GenDataObjQueryDetailMapper.java | 16 + .../mappers/GenDetailColumnConfigMapper.java | 34 + .../gen/mappers/GenGenerateInfoMapper.java | 24 + .../starter/web/gen/mappers/GenMapper.java | 11 + .../mappers/GenQueryColumnConfigMapper.java | 34 + .../GenQueryParamsColumnConfigMapper.java | 34 + .../mappers/GenSimpleTableColumnMapper.java | 26 + .../web/gen/mappers/GenSimpleTableMapper.java | 25 + .../mappers/GenUpdateColumnConfigMapper.java | 34 + .../web/gen/mappers/SimpleDBMapper.java | 35 + .../service/GenCreateColumnConfigService.java | 40 + .../service/GenCustomListCategoryService.java | 63 + .../service/GenCustomListDetailService.java | 22 + .../GenCustomListHandleColumnService.java | 24 + .../GenCustomListQueryParamsService.java | 22 + .../web/gen/service/GenCustomListService.java | 97 + .../service/GenCustomListToolbarService.java | 23 + .../service/GenCustomPageCategoryService.java | 52 + .../web/gen/service/GenCustomPageService.java | 73 + .../GenCustomSelectorCategoryService.java | 64 + .../gen/service/GenCustomSelectorService.java | 94 + .../service/GenDataEntityCategoryService.java | 63 + .../service/GenDataEntityDetailService.java | 32 + .../web/gen/service/GenDataEntityService.java | 111 ++ .../service/GenDataObjCategoryService.java | 63 + .../gen/service/GenDataObjDetailService.java | 31 + .../service/GenDataObjQueryDetailService.java | 23 + .../web/gen/service/GenDataObjService.java | 91 + .../service/GenDetailColumnConfigService.java | 40 + .../service/GenQueryColumnConfigService.java | 40 + .../GenQueryParamsColumnConfigService.java | 41 + .../service/GenUpdateColumnConfigService.java | 40 + .../web/gen/service/GenerateInfoService.java | 31 + .../web/gen/service/SimpleDBService.java | 41 + .../gen/service/SimpleTableColumnService.java | 17 + .../gen/vo/UpdateCreateColumnConfigVo.java | 27 + .../gen/vo/UpdateDetailColumnConfigVo.java | 27 + .../web/gen/vo/UpdateGenerateInfoVo.java | 117 ++ .../web/gen/vo/UpdateQueryColumnConfigVo.java | 46 + .../vo/UpdateQueryParamsColumnConfigVo.java | 30 + .../gen/vo/UpdateUpdateColumnConfigVo.java | 27 + .../vo/custom/list/CreateGenCustomListVo.java | 174 ++ .../vo/custom/list/GenCustomListDetailVo.java | 67 + .../list/GenCustomListHandleColumnVo.java | 66 + .../list/GenCustomListQueryParamsVo.java | 71 + .../custom/list/GenCustomListSelectorVo.java | 29 + .../custom/list/GenCustomListToolbarVo.java | 57 + .../vo/custom/list/QueryGenCustomListVo.java | 32 + .../vo/custom/list/UpdateGenCustomListVo.java | 187 ++ .../CreateGenCustomListCategoryVo.java | 29 + .../GenCustomListCategorySelectorVo.java | 23 + .../UpdateGenCustomListCategoryVo.java | 37 + .../vo/custom/page/CreateGenCustomPageVo.java | 46 + .../custom/page/GenCustomPageSelectorVo.java | 29 + .../vo/custom/page/QueryGenCustomPageVo.java | 32 + .../vo/custom/page/UpdateGenCustomPageVo.java | 47 + .../CreateGenCustomPageCategoryVo.java | 35 + .../UpdateGenCustomPageCategoryVo.java | 37 + .../selector/CreateGenCustomSelectorVo.java | 86 + .../selector/GenCustomSelectorSelectorVo.java | 29 + .../selector/QueryGenCustomSelectorVo.java | 32 + .../selector/UpdateGenCustomSelectorVo.java | 90 + .../CreateGenCustomSelectorCategoryVo.java | 29 + .../GenCustomSelectorCategorySelectorVo.java | 23 + .../UpdateGenCustomSelectorCategoryVo.java | 37 + .../vo/data/entity/CreateDataEntityVo.java | 50 + .../entity/GenDataEntityDetailSelectorVo.java | 20 + .../vo/data/entity/GenDataEntityDetailVo.java | 119 ++ .../data/entity/GenDataEntitySelectorVo.java | 29 + .../gen/vo/data/entity/QueryDataEntityVo.java | 32 + .../entity/UpdateDataEntityGenerateVo.java | 72 + .../vo/data/entity/UpdateDataEntityVo.java | 58 + .../CreateGenDataEntityCategoryVo.java | 29 + .../GenDataEntityCategorySelectorVo.java | 23 + .../UpdateGenDataEntityCategoryVo.java | 37 + .../gen/vo/data/obj/CreateGenDataObjVo.java | 62 + .../gen/vo/data/obj/GenDataObjDetailVo.java | 70 + .../vo/data/obj/GenDataObjQueryDetailVo.java | 53 + .../gen/vo/data/obj/GenDataObjSelectorVo.java | 29 + .../gen/vo/data/obj/QueryGenDataObjVo.java | 32 + .../gen/vo/data/obj/UpdateGenDataObjVo.java | 70 + .../category/CreateGenDataObjCategoryVo.java | 29 + .../GenDataObjCategorySelectorVo.java | 23 + .../category/UpdateGenDataObjCategoryVo.java | 37 + .../vo/simpledb/QuerySimpleTableColumnVo.java | 26 + .../vo/simpledb/SimpleTableSelectorVo.java | 17 + .../web/inner/bo/auth/CollectMenuBo.java | 34 + .../inner/bo/auth/ForgetPswUserInfoBo.java | 27 + .../starter/web/inner/bo/auth/LoginBo.java | 62 + .../starter/web/inner/bo/auth/MenuBo.java | 114 ++ .../web/inner/bo/auth/TelephoneLoginBo.java | 43 + .../inner/bo/oplog/OpLogInUserCenterBo.java | 53 + .../starter/web/inner/bo/qrtz/GetQrtzBo.java | 100 + .../web/inner/bo/qrtz/QueryQrtzBo.java | 63 + .../inner/bo/system/dept/GetSysDeptBo.java | 61 + .../bo/system/dept/SysDeptSelectorBo.java | 43 + .../inner/bo/system/dept/SysDeptTreeBo.java | 43 + .../inner/bo/system/dic/GetSysDataDicBo.java | 64 + .../bo/system/dic/QuerySysDataDicBo.java | 64 + .../bo/system/dic/SysDataDicSelectorBo.java | 35 + .../dic/category/GetSysDataDicCategoryBo.java | 38 + .../category/QuerySysDataDicCategoryBo.java | 38 + .../SysDataDicCategorySelectorBo.java | 35 + .../system/dic/item/GetSysDataDicItemBo.java | 50 + .../dic/item/QuerySysDataDicItemBo.java | 50 + .../bo/system/dic/item/SysDataDicItemBo.java | 48 + .../system/generate/GetSysGenerateCodeBo.java | 64 + .../generate/QuerySysGenerateCodeBo.java | 45 + .../inner/bo/system/menu/GetSysMenuBo.java | 192 ++ .../inner/bo/system/menu/QuerySysMenuBo.java | 93 + .../bo/system/menu/SysMenuSelectorBo.java | 39 + .../message/mail/GetSysMailMessageBo.java | 45 + .../message/mail/QuerySysMailMessageBo.java | 69 + .../message/site/GetSysSiteMessageBo.java | 45 + .../message/site/QueryMySysSiteMessageBo.java | 54 + .../message/site/QuerySysSiteMessageBo.java | 83 + .../bo/system/module/QuerySysModuleBo.java | 45 + .../bo/system/notice/GetSysNoticeBo.java | 57 + .../bo/system/notice/QueryMySysNoticeBo.java | 54 + .../bo/system/notice/QuerySysNoticeBo.java | 89 + .../bo/system/notify/GetSysNotifyGroupBo.java | 94 + .../system/notify/QuerySysNotifyGroupBo.java | 98 + .../notify/SysNotifyGroupSelectorBo.java | 37 + .../bo/system/open/GetSysOpenDomainBo.java | 57 + .../bo/system/open/QuerySysOpenDomainBo.java | 57 + .../system/open/SysOpenDomainSelectorBo.java | 35 + .../web/inner/bo/system/oplog/GetOpLogBo.java | 65 + .../inner/bo/system/oplog/QueryOpLogBo.java | 59 + .../system/parameter/GetSysParameterBo.java | 54 + .../system/parameter/QuerySysParameterBo.java | 73 + .../QuerySysDataPermissionModelDetailBo.java | 94 + .../SysDataPermissionModelDetailBo.java | 61 + .../inner/bo/system/role/GetSysRoleBo.java | 61 + .../inner/bo/system/role/QueryRoleMenuBo.java | 85 + .../inner/bo/system/role/QuerySysRoleBo.java | 88 + .../bo/system/role/SysRoleSelectorBo.java | 43 + .../role/category/GetSysRoleCategoryBo.java | 38 + .../role/category/QuerySysRoleCategoryBo.java | 38 + .../category/SysRoleCategorySelectorBo.java | 35 + .../inner/bo/system/tenant/GetTenantBo.java | 55 + .../inner/bo/system/tenant/QueryTenantBo.java | 55 + .../bo/system/tenant/TenantSelectorBo.java | 37 + .../inner/bo/system/user/GetSysUserBo.java | 148 ++ .../inner/bo/system/user/QuerySysUserBo.java | 162 ++ .../inner/bo/system/user/QueryUserRoleBo.java | 49 + .../bo/system/user/SysUserSelectorBo.java | 43 + .../system/user/group/GetSysUserGroupBo.java | 73 + .../user/group/QuerySysUserGroupBo.java | 72 + .../user/group/SysUserGroupSelectorBo.java | 43 + .../web/inner/bo/usercenter/UserInfoBo.java | 61 + .../inner/components/oplog/AuthOpLogType.java | 12 + .../components/oplog/OtherOpLogType.java | 12 + .../components/oplog/SystemOpLogType.java | 12 + ...OrderDataPermissionDataPermissionType.java | 14 + ...oductDataPermissionDataPermissionType.java | 15 + .../ApprovePassOrderTimeLineBizType.java | 11 + .../ApproveReturnOrderTimeLineBizType.java | 11 + .../CancelApproveOrderTimeLineBizType.java | 11 + .../timeline/CreateOrderTimeLineBizType.java | 11 + .../timeline/NormalOrderTimeLineBizType.java | 11 + .../timeline/SendOrderTimeLineBizType.java | 11 + .../timeline/UpdateOrderTimeLineBizType.java | 11 + .../web/inner/controller/AuthController.java | 626 +++++++ .../web/inner/controller/QrtzController.java | 170 ++ .../controller/UserCenterController.java | 186 ++ .../system/DefaultSysSelectorController.java | 482 +++++ .../controller/system/OpLogController.java | 83 + .../system/SysDataDicCategoryController.java | 122 ++ .../system/SysDataDicController.java | 127 ++ .../system/SysDataDicItemController.java | 162 ++ .../SysDataPermissionDataController.java | 94 + ...ysDataPermissionModelDetailController.java | 153 ++ .../controller/system/SysDeptController.java | 175 ++ .../system/SysGenerateCodeController.java | 165 ++ .../system/SysMailMessageController.java | 83 + .../controller/system/SysMenuController.java | 240 +++ .../system/SysModuleController.java | 101 + .../system/SysNoticeController.java | 174 ++ .../system/SysNotifyGroupController.java | 118 ++ .../system/SysOpenDomainController.java | 129 ++ .../system/SysParameterController.java | 138 ++ .../system/SysRoleCategoryController.java | 116 ++ .../controller/system/SysRoleController.java | 149 ++ .../system/SysRoleMenuController.java | 98 + .../system/SysSiteMessageController.java | 135 ++ .../controller/system/SysUserController.java | 172 ++ .../system/SysUserGroupController.java | 118 ++ .../system/SysUserRoleController.java | 99 + .../controller/system/TenantController.java | 143 ++ .../web/inner/dto/dic/city/DicCityDto.java | 40 + .../inner/dto/message/SysMailMessageDto.java | 35 + .../inner/dto/message/SysNoticeTaskDto.java | 49 + .../inner/dto/message/SysSiteMessageDto.java | 35 + .../dto/message/site/SiteMessageDto.java | 34 + .../web/inner/dto/notify/SysNotifyDto.java | 31 + .../inner/dto/notify/SysNotifyParamsDto.java | 16 + .../inner/dto/order/ApprovePassOrderDto.java | 37 + .../starter/web/inner/dto/qrtz/QrtzDto.java | 78 + .../dto/stock/ProductStockChangeDto.java | 48 + .../web/inner/dto/system/LoginDto.java | 53 + .../starter/web/inner/dto/system/MenuDto.java | 82 + .../web/inner/dto/system/MenuMetaDto.java | 33 + .../web/inner/dto/system/UserInfoDto.java | 51 + .../notice/QuerySysNoticeByUserDto.java | 37 + .../inner/dto/system/notice/SysNoticeDto.java | 34 + .../starter/web/inner/entity/DicCity.java | 51 + .../starter/web/inner/entity/OpLogs.java | 66 + .../web/inner/entity/OrderTimeLine.java | 64 + .../web/inner/entity/RecursionMapping.java | 43 + .../inner/entity/SecurityUploadRecord.java | 54 + .../starter/web/inner/entity/SysDataDic.java | 81 + .../web/inner/entity/SysDataDicCategory.java | 76 + .../web/inner/entity/SysDataDicItem.java | 86 + .../inner/entity/SysDataPermissionData.java | 44 + .../entity/SysDataPermissionModelDetail.java | 67 + .../starter/web/inner/entity/SysDept.java | 100 + .../web/inner/entity/SysGenerateCode.java | 39 + .../web/inner/entity/SysMailMessage.java | 92 + .../starter/web/inner/entity/SysMenu.java | 149 ++ .../starter/web/inner/entity/SysModule.java | 78 + .../web/inner/entity/SysModuleTenant.java | 42 + .../starter/web/inner/entity/SysNotice.java | 100 + .../web/inner/entity/SysNoticeLog.java | 47 + .../web/inner/entity/SysNotifyGroup.java | 92 + .../inner/entity/SysNotifyGroupReceiver.java | 35 + .../web/inner/entity/SysOpenDomain.java | 95 + .../web/inner/entity/SysParameter.java | 83 + .../starter/web/inner/entity/SysRole.java | 97 + .../web/inner/entity/SysRoleCategory.java | 76 + .../starter/web/inner/entity/SysRoleMenu.java | 38 + .../web/inner/entity/SysSiteMessage.java | 96 + .../starter/web/inner/entity/SysUser.java | 118 ++ .../starter/web/inner/entity/SysUserDept.java | 38 + .../web/inner/entity/SysUserGroup.java | 86 + .../web/inner/entity/SysUserGroupDetail.java | 35 + .../starter/web/inner/entity/SysUserRole.java | 36 + .../web/inner/entity/SysUserTelephone.java | 28 + .../starter/web/inner/entity/Tenant.java | 71 + .../web/inner/enums/system/Available.java | 32 + .../web/inner/enums/system/Gender.java | 31 + .../web/inner/enums/system/NodeType.java | 7 + .../web/inner/enums/system/QrtzJobType.java | 33 + .../system/SysDataPermissionDataBizType.java | 31 + .../SysDataPermissionModelDetailCalcType.java | 39 + ...ataPermissionModelDetailConditionType.java | 43 + ...SysDataPermissionModelDetailInputType.java | 33 + .../SysDataPermissionModelDetailNodeType.java | 32 + .../inner/enums/system/SysDeptNodeType.java | 22 + .../system/SysMailMessageSendStatus.java | 32 + .../enums/system/SysMenuComponentType.java | 32 + .../inner/enums/system/SysMenuDisplay.java | 32 + .../enums/system/SysNotifyMessageType.java | 32 + .../enums/system/SysNotifyReceiverType.java | 32 + .../web/inner/enums/system/TriggerState.java | 34 + .../web/inner/enums/system/UploadType.java | 31 + .../AccessDeniedExceptionConverter.java | 22 + .../exception/BindExceptionConverter.java | 57 + .../exception/ClientExceptionConverter.java | 27 + ...ConstraintViolationExceptionConverter.java | 31 + .../exception/ExceptionConverter.java | 24 + .../FileUploadExceptionConverter.java | 25 + ...pMessageNotReadableExceptionConverter.java | 28 + ...tMethodNotSupportedExceptionConverter.java | 28 + ...hodArgumentNotValidExceptionConverter.java | 31 + .../NotPermissionExceptionConverter.java | 28 + .../exception/SysExceptionConverter.java | 28 + .../TypeMismatchExceptionConverter.java | 47 + .../UnexpectedTypeExceptionConverter.java | 29 + .../inner/impl/DefaultUserDetailsService.java | 27 + .../web/inner/impl/DicCityServiceImpl.java | 62 + .../inner/impl/GenerateCodeServiceImpl.java | 35 + .../web/{ => inner}/impl/MailServiceImpl.java | 4 +- .../web/inner/impl/OpLogsServiceImpl.java | 120 ++ .../inner/impl/OrderTimeLineServiceImpl.java | 45 + .../web/inner/impl/QrtzServiceImpl.java | 201 ++ .../impl/RecursionMappingServiceImpl.java | 110 ++ .../impl/SecurityUploadRecordServiceImpl.java | 30 + .../web/inner/impl/SysModuleServiceImpl.java | 15 + .../impl/SysModuleTenantServiceImpl.java | 70 + .../web/inner/impl/TenantServiceImpl.java | 120 ++ .../system/SysDataDicCategoryServiceImpl.java | 130 ++ .../system/SysDataDicItemServiceImpl.java | 156 ++ .../impl/system/SysDataDicServiceImpl.java | 145 ++ .../SysDataPermissionDataServiceImpl.java | 33 + ...sDataPermissionModelDetailServiceImpl.java | 145 ++ .../inner/impl/system/SysDeptServiceImpl.java | 267 +++ .../system/SysGenerateCodeServiceImpl.java | 141 ++ .../system/SysMailMessageServiceImpl.java | 42 + .../inner/impl/system/SysMenuServiceImpl.java | 492 +++++ .../impl/system/SysNoticeLogServiceImpl.java | 28 + .../impl/system/SysNoticeServiceImpl.java | 259 +++ .../SysNotifyGroupReceiverServiceImpl.java | 26 + .../system/SysNotifyGroupServiceImpl.java | 271 +++ .../impl/system/SysOpenDomainServiceImpl.java | 111 ++ .../impl/system/SysParameterServiceImpl.java | 220 +++ .../system/SysRoleCategoryServiceImpl.java | 132 ++ .../impl/system/SysRoleMenuServiceImpl.java | 122 ++ .../inner/impl/system/SysRoleServiceImpl.java | 289 +++ .../system/SysSiteMessageServiceImpl.java | 120 ++ .../impl/system/SysUserDeptServiceImpl.java | 94 + .../system/SysUserGroupDetailServiceImpl.java | 26 + .../impl/system/SysUserGroupServiceImpl.java | 170 ++ .../impl/system/SysUserRoleServiceImpl.java | 113 ++ .../inner/impl/system/SysUserServiceImpl.java | 411 ++++ .../system/SysUserTelephoneServiceImpl.java | 14 + .../inner/listeners/OpLogTimerListener.java | 86 + .../web/inner/mappers/DicCityMapper.java | 32 + .../web/inner/mappers/GenerateCodeMapper.java | 8 + .../web/inner/mappers/OpLogsMapper.java | 41 + .../inner/mappers/OrderTimeLineMapper.java | 12 + .../starter/web/inner/mappers/QrtzMapper.java | 30 + .../inner/mappers/RecursionMappingMapper.java | 19 + .../mappers/SecurityUploadRecordMapper.java | 13 + .../web/inner/mappers/SysModuleMapper.java | 8 + .../inner/mappers/SysModuleTenantMapper.java | 8 + .../web/inner/mappers/TenantMapper.java | 33 + .../web/inner/mappers/UserDetailsMapper.java | 20 + .../system/SysDataDicCategoryMapper.java | 32 + .../mappers/system/SysDataDicItemMapper.java | 30 + .../mappers/system/SysDataDicMapper.java | 38 + .../system/SysDataPermissionDataMapper.java | 9 + .../SysDataPermissionModelDetailMapper.java | 9 + .../inner/mappers/system/SysDeptMapper.java | 31 + .../mappers/system/SysGenerateCodeMapper.java | 25 + .../mappers/system/SysMailMessageMapper.java | 25 + .../inner/mappers/system/SysMenuMapper.java | 113 ++ .../mappers/system/SysNoticeLogMapper.java | 15 + .../inner/mappers/system/SysNoticeMapper.java | 44 + .../mappers/system/SysNotifyGroupMapper.java | 40 + .../system/SysNotifyGroupReceiverMapper.java | 15 + .../mappers/system/SysOpenDomainMapper.java | 40 + .../mappers/system/SysParameterMapper.java | 31 + .../mappers/system/SysRoleCategoryMapper.java | 32 + .../inner/mappers/system/SysRoleMapper.java | 59 + .../mappers/system/SysRoleMenuMapper.java | 16 + .../mappers/system/SysSiteMessageMapper.java | 34 + .../mappers/system/SysUserDeptMapper.java | 40 + .../system/SysUserGroupDetailMapper.java | 15 + .../mappers/system/SysUserGroupMapper.java | 41 + .../inner/mappers/system/SysUserMapper.java | 99 + .../mappers/system/SysUserRoleMapper.java | 32 + .../system/SysUserTelephoneMapper.java | 8 + .../web/inner/service/DicCityService.java | 32 + .../inner/service/GenerateCodeService.java | 30 + .../service/GroovySupportService.java | 2 +- .../web/{ => inner}/service/MailService.java | 3 +- .../web/inner/service/OpLogsService.java | 58 + .../inner/service/OrderTimeLineService.java | 25 + .../web/inner/service/QrtzService.java | 80 + .../service/RecursionMappingService.java | 62 + .../service/SecurityUploadRecordService.java | 19 + .../{ => inner}/service/SysConfService.java | 3 +- .../web/inner/service/SysModuleService.java | 7 + .../inner/service/SysModuleTenantService.java | 30 + .../web/inner/service/TenantService.java | 60 + .../system/SysDataDicCategoryService.java | 63 + .../service/system/SysDataDicItemService.java | 81 + .../service/system/SysDataDicService.java | 75 + .../system/SysDataPermissionDataService.java | 26 + .../SysDataPermissionModelDetailService.java | 29 + .../inner/service/system/SysDeptService.java | 62 + .../system/SysGenerateCodeService.java | 71 + .../service/system/SysMailMessageService.java | 36 + .../inner/service/system/SysMenuService.java | 141 ++ .../service/system/SysNoticeLogService.java | 20 + .../service/system/SysNoticeService.java | 108 ++ .../system/SysNotifyGroupReceiverService.java | 16 + .../service/system/SysNotifyGroupService.java | 72 + .../service/system/SysOpenDomainService.java | 58 + .../service/system/SysParameterService.java | 63 + .../system/SysRoleCategoryService.java | 63 + .../service/system/SysRoleMenuService.java | 15 + .../inner/service/system/SysRoleService.java | 80 + .../service/system/SysSiteMessageService.java | 76 + .../service/system/SysUserDeptService.java | 40 + .../system/SysUserGroupDetailService.java | 16 + .../service/system/SysUserGroupService.java | 63 + .../service/system/SysUserRoleService.java | 31 + .../inner/service/system/SysUserService.java | 141 ++ .../system/SysUserTelephoneService.java | 8 + .../vo/openapi}/OpenApiReqVo.java | 3 +- .../web/inner/vo/oplogs/CreateOpLogsVo.java | 51 + .../web/inner/vo/oplogs/QueryOpLogsVo.java | 47 + .../web/inner/vo/qrtz/CreateQrtzVo.java | 91 + .../web/inner/vo/qrtz/QueryQrtzVo.java | 41 + .../web/inner/vo/qrtz/UpdateQrtzVo.java | 31 + .../vo/system/config/UpdateSysConfigVo.java | 96 + .../inner/vo/system/dept/CreateSysDeptVo.java | 48 + .../vo/system/dept/SysUserDeptSettingVo.java | 24 + .../inner/vo/system/dept/UpdateSysDeptVo.java | 63 + .../vo/system/dic/CreateSysDataDicVo.java | 35 + .../vo/system/dic/QuerySysDataDicVo.java | 29 + .../vo/system/dic/SysDataDicSelectorVo.java | 29 + .../vo/system/dic/UpdateSysDataDicVo.java | 43 + .../category/CreateSysDataDicCategoryVo.java | 29 + .../SysDataDicCategorySelectorVo.java | 23 + .../category/UpdateSysDataDicCategoryVo.java | 37 + .../dic/item/CreateSysDataDicItemVo.java | 44 + .../dic/item/QuerySysDataDicItemVo.java | 31 + .../dic/item/UpdateSysDataDicItemVo.java | 44 + .../generate/CreateSysGenerateCodeVo.java | 28 + .../generate/PreviewSysGenerateCodeVo.java | 22 + .../generate/QuerySysGenerateCodeVo.java | 22 + .../generate/SettingSysGenerateCodeVo.java | 30 + .../generate/UpdateSysGenerateCodeVo.java | 28 + .../inner/vo/system/menu/CreateSysMenuVo.java | 113 ++ .../vo/system/menu/SysMenuSelectorVo.java | 21 + .../inner/vo/system/menu/UpdateSysMenuVo.java | 30 + .../message/mail/QuerySysMailMessageVo.java | 47 + .../site/QuerySysSiteMessageByUserVo.java | 48 + .../message/site/QuerySysSiteMessageVo.java | 42 + .../vo/system/module/SysModuleTenantVo.java | 50 + .../vo/system/notice/CreateSysNoticeVo.java | 38 + .../system/notice/QuerySysNoticeByUserVo.java | 48 + .../vo/system/notice/QuerySysNoticeVo.java | 42 + .../vo/system/notice/UpdateSysNoticeVo.java | 52 + .../system/notify/CreateSysNotifyGroupVo.java | 53 + .../system/notify/QuerySysNotifyGroupVo.java | 43 + .../notify/SysNotifyGroupSelectorVo.java | 25 + .../system/notify/UpdateSysNotifyGroupVo.java | 26 + .../vo/system/open/CreateSysOpenDomainVo.java | 41 + .../vo/system/open/QuerySysOpenDomainVo.java | 31 + .../system/open/SysOpenDomainSelectorVo.java | 31 + .../open/UpdateSysOpenDomainSecretVo.java | 28 + .../vo/system/open/UpdateSysOpenDomainVo.java | 49 + .../parameter/CreateSysParameterVo.java | 35 + .../system/parameter/QuerySysParameterVo.java | 36 + .../parameter/UpdateSysParameterVo.java | 33 + .../CreateSysDataPermissionDataVo.java | 45 + .../SysDataPermissionModelDetailVo.java | 65 + .../inner/vo/system/role/CreateSysRoleVo.java | 48 + .../inner/vo/system/role/QuerySysRoleVo.java | 37 + .../vo/system/role/SysRoleMenuSettingVo.java | 24 + .../vo/system/role/SysRoleSelectorVo.java | 31 + .../inner/vo/system/role/UpdateSysRoleVo.java | 63 + .../category/CreateSysRoleCategoryVo.java | 29 + .../category/SysRoleCategorySelectorVo.java | 23 + .../category/UpdateSysRoleCategoryVo.java | 37 + .../vo/system/tenant/CreateTenantVo.java | 41 + .../inner/vo/system/tenant/QueryTenantVo.java | 31 + .../vo/system/tenant/TenantSelectorVo.java | 31 + .../vo/system/tenant/UpdateTenantVo.java | 53 + .../inner/vo/system/user/CreateSysUserVo.java | 90 + .../system/user/GetLoginCaptchaRequieVo.java | 30 + .../user/GetTelephoneLoginCaptchaVo.java | 23 + .../web/inner/vo/system/user/LoginVo.java | 48 + .../inner/vo/system/user/QuerySysUserVo.java | 49 + .../inner/vo/system/user/RegistUserVo.java | 51 + .../vo/system/user/SysUserRoleSettingVo.java | 27 + .../vo/system/user/SysUserSelectorVo.java | 37 + .../vo/system/user/TelephoneBindUserVo.java | 43 + .../vo/system/user/TelephoneLoginVo.java | 33 + .../inner/vo/system/user/UpdateSysUserVo.java | 98 + .../user/group/CreateSysUserGroupVo.java | 40 + .../user/group/QuerySysUserGroupVo.java | 49 + .../user/group/SysUserGroupSelectorVo.java | 31 + .../user/group/UpdateSysUserGroupVo.java | 26 + .../starter/web/utils/PrintUtil.java | 64 - .../components/WsDataPushWorker.java | 8 +- .../websocket/components/WsDataPusher.java | 4 +- .../components/WsDataPusherImpl.java | 12 +- .../components/WsSessionManager.java | 6 +- .../web}/websocket/constants/WsPool.java | 2 +- .../web/{ => websocket}/dto/WsPushData.java | 5 +- .../web}/websocket/entity/WsSession.java | 8 +- .../websocket/events/UserConnectEvent.java | 4 +- .../websocket/events/UserDisConnectEvent.java | 4 +- .../web}/websocket/handler/WsHandler.java | 28 +- .../interceptor/WsHandshakeInterceptor.java | 8 +- .../listener/WsUserConnectListener.java | 10 +- .../listener/WsUserDisConnectListener.java | 12 +- .../service/WsDataProcessService.java | 4 +- .../starter/web}/websocket/vo/WsVo.java | 4 +- .../main/resources/META-INF/spring.factories | 9 +- .../main/resources/mappers/DicCityMapper.xml | 31 + .../resources/mappers/GenerateCodeMapper.xml | 8 + .../main/resources/mappers/OpLogsMapper.xml | 49 + .../src/main/resources/mappers/QrtzMapper.xml | 43 + .../mappers/RecursionMappingMappre.xml | 12 + .../resources/mappers/SysParameterMapper.xml | 46 + .../main/resources/mappers/TenantMapper.xml | 43 + .../resources/mappers/UserDetailsMapper.xml | 20 + .../main/resources/mappers/gen/DBMapper.xml | 8 + .../gen/GenCreateColumnConfigMapper.xml | 27 + .../gen/GenCustomListCategoryMapper.xml | 46 + .../gen/GenCustomListHandleColumnMapper.xml | 36 + .../mappers/gen/GenCustomListMapper.xml | 88 + .../gen/GenCustomListToolbarMapper.xml | 34 + .../gen/GenCustomPageCategoryMapper.xml | 15 + .../mappers/gen/GenCustomPageMapper.xml | 46 + .../gen/GenCustomSelectorCategoryMapper.xml | 46 + .../mappers/gen/GenCustomSelectorMapper.xml | 69 + .../gen/GenDataEntityCategoryMapper.xml | 46 + .../mappers/gen/GenDataEntityMapper.xml | 67 + .../mappers/gen/GenDataObjDetailMapper.xml | 11 + .../mappers/gen/GenDataObjMapper.xml | 73 + .../gen/GenDetailColumnConfigMapper.xml | 27 + .../mappers/gen/GenGenerateInfoMapper.xml | 45 + .../main/resources/mappers/gen/GenMapper.xml | 33 + .../gen/GenQueryColumnConfigMapper.xml | 31 + .../gen/GenQueryParamsColumnConfigMapper.xml | 28 + .../gen/GenSimpleTableColumnMapper.xml | 44 + .../mappers/gen/GenSimpleTableMapper.xml | 30 + .../gen/GenUpdateColumnConfigMapper.xml | 27 + .../gen/GenUpdateColumnConfigService.xml | 46 + .../resources/mappers/gen/SimpleDBMapper.xml | 50 + .../system/SysDataDicCategoryMapper.xml | 46 + .../mappers/system/SysDataDicItemMapper.xml | 48 + .../mappers/system/SysDataDicMapper.xml | 63 + .../mappers/system/SysDeptMapper.xml | 19 + .../mappers/system/SysGenerateCodeMapper.xml | 31 + .../system/SysMailMessageMapper.xml.xml | 35 + .../mappers/system/SysMenuMapper.xml | 181 ++ .../mappers/system/SysNoticeLogMapper.xml | 22 + .../mappers/system/SysNoticeMapper.xml | 101 + .../mappers/system/SysNotifyGroupMapper.xml | 43 + .../mappers/system/SysOpenDomainMapper.xml | 43 + .../mappers/system/SysRoleCategoryMapper.xml | 29 + .../mappers/system/SysRoleMapper.xml | 62 + .../mappers/system/SysSiteMessageMapper.xml | 56 + .../mappers/system/SysUserDeptMapper.xml | 29 + .../mappers/system/SysUserGroupMapper.xml | 49 + .../mappers/system/SysUserMapper.xml | 96 + .../mappers/system/SysUserRoleMapper.xml | 22 + .../src/main/resources/templates/add.vue.ftl | 111 ++ .../src/main/resources/templates/api.ts.ftl | 113 ++ .../resources/templates/controller.java.ftl | 149 ++ .../resources/templates/createvo.java.ftl | 51 + .../main/resources/templates/createvo.ts.ftl | 10 + .../main/resources/templates/detail.vue.ftl | 91 + .../main/resources/templates/entity.java.ftl | 49 + .../main/resources/templates/getbo.java.ftl | 97 + .../src/main/resources/templates/getbo.ts.ftl | 29 + .../main/resources/templates/index.vue.ftl | 205 ++ .../resources/templates/input-components.ftl | 78 + .../main/resources/templates/mapper.java.ftl | 35 + .../resources/templates/mapper.list.xml.ftl | 49 + .../main/resources/templates/modify.vue.ftl | 128 ++ .../resources/templates/query-type-sql.ftl | 27 + .../main/resources/templates/querybo.java.ftl | 89 + .../main/resources/templates/querybo.ts.ftl | 22 + .../main/resources/templates/queryvo.java.ftl | 57 + .../main/resources/templates/queryvo.ts.ftl | 25 + .../main/resources/templates/service.java.ftl | 79 + .../resources/templates/serviceimpl.java.ftl | 167 ++ .../src/main/resources/templates/sql.ftl | 9 + .../resources/templates/updatevo.java.ftl | 62 + .../main/resources/templates/updatevo.ts.ftl | 17 + websocket-starter/pom.xml | 31 - 1100 files changed, 59525 insertions(+), 785 deletions(-) create mode 100644 bpm-starter/pom.xml create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/DetailFlowCategoryBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/QueryFlowCategoryTreeBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/DetailFlowDefinitionBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/FlowDefinitionSelectorBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/QueryFlowDefinitionBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/instance/QueryBusinessFlowInstanceBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryInstanceListBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryMyTaskListBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryTodoTaskListBo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmBeanAutoConfiguration.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmSwaggerAutoConfiguration.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/controller/BpmSelectorController.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowCategoryController.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowDefinitionController.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowInstanceController.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowTaskController.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowInstanceExtDto.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowTaskDto.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCategory.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuApproveHis.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuInstance.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowInstanceWrapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowTaskWrapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowCooperateType.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionActivityStatus.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionExtBizType.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionIsPublish.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowInstanceStatus.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowNodeType.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowSkipType.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmChartExtService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmDataFillHandler.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmHandlerSelectService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmPermissionHandler.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/exception/FlowExceptionConverter.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCategoryServiceImpl.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuApproveHisServiceImpl.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuInstanceServiceImpl.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowDefinitionWrapperServiceImpl.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowInstanceWrapperServiceImpl.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowTaskWrapperServiceImpl.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmBizListener.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmGlobalListener.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCategoryMapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuApproveHisMapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuInstanceMapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowDefinitionWrapperMapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowInstanceWrapperMapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowTaskWrapperMapper.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCategoryService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuApproveHisService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuInstanceService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowDefinitionWrapperService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowInstanceWrapperService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowTaskWrapperService.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/transfers/FlowCuInstanceTransfer.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/CreateFlowCategoryVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/GetFlowCategoryListVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/UpdateFlowCategoryVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/CreateFlowDefinitionVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/FlowDefinitionSelectorVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/QueryFlowDefinitionVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionActivityStatusVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionPublishVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/UpdateFlowDefinitionVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/instance/QueryInstanceListVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApprovePassTaskVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApproveRefuseTaskVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryMyTaskListVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryTodoTaskListVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/RejectTaskVo.java create mode 100644 bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/UndoTaskVo.java rename {websocket-starter => bpm-starter}/src/main/java/lombok.config (100%) create mode 100644 bpm-starter/src/main/resources/META-INF/spring.factories create mode 100644 bpm-starter/src/main/resources/mappers/FlowDefinitionWrapperMapper.xml create mode 100644 bpm-starter/src/main/resources/mappers/FlowTaskWrapperMapper.xml create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/ExportingExportTaskBo.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/FailExportTaskBo.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/SuccessExportTaskBo.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/components/export/ExportTaskWorker.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqBeanAutoConfiguration.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqSwaggerAutoConfiguration.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/controller/ExportTaskController.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/AddExportTaskDto.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExecuteExportTaskDto.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExportTaskSummaryDto.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/entity/ExportTask.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/enums/ExportTaskStatus.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/events/ExportTaskNotifyEvent.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/handlers/ExportTaskHandler.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/impl/ExportTaskServiceImpl.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/mappers/ExportTaskMapper.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/ExportTaskService.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/MqProducerService.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/utils/ExportTaskUtil.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QueryFailExportTaskVo.java create mode 100644 mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QuerySuccessExportTaskVo.java rename {websocket-starter => mq-starter/mq-core}/src/main/resources/META-INF/spring.factories (33%) create mode 100644 mq-starter/mq-core/src/main/resources/mappers/ExportTaskMapper.xml create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqConstants.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqStringPool.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/impl/RabbitMqProducerServiceImpl.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/app/ExportTaskNotifyListener.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/ExportTaskListener.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysMailMessageListener.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysNotifyListener.java create mode 100644 mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysSiteMessageListener.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintBo.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintDataBo.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockConditional.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/config/GenAutoConfiguration.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java rename web-starter/src/main/java/com/lframework/starter/web/config/{TenantConfiguration.java => TenantAutoConfiguration.java} (83%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/config/TenantDynamicDataSourceAutoConfiguration.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/config/WebSwaggerAutoConfiguration.java rename {websocket-starter/src/main/java/com/lframework/starter/websocket => web-starter/src/main/java/com/lframework/starter/web}/config/WsAutoConfiguration.java (78%) rename {websocket-starter/src/main/java/com/lframework/starter/websocket/config => web-starter/src/main/java/com/lframework/starter/web/config/properties}/WsProperties.java (81%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/constants/EncryType.java (83%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/convert/EncryptConvert.java (78%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/convert/EnumConvert.java (86%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/convert/IgnoreConvert.java (85%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/ds/CurTenantDs.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/excel/ExcelRequired.java (84%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/locker/EnableLock.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/locker/LockType.java (42%) rename web-starter/src/main/java/com/lframework/starter/web/{annotations => core/annotations/openapi}/OpenApi.java (87%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/oplog/OpLog.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermission.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissionGroup.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissions.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/annotations/security/HasPermission.java (77%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sort.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sorts.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/annotations/timeline/OrderTimeLineLog.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/aop/ControllerAspector.java (95%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/aop/OpLogAspector.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/aop/OpenApiAspect.java (80%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/aop/OrderTimeLineLogAspect.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/aop/PermissionAspect.java (75%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/bo/BaseBo.java (85%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/bo/ExcelImportBo.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/bo/SuperBo.java (77%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/cache/CacheVariables.java (70%) rename web-starter/src/main/java/com/lframework/starter/web/{components => core/components/captcha}/CaptchaValidator.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/excel/ExcelEventListener.java (82%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/excel/ExcelHorizontalCellStyleStrategy.java (98%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/excel/ExcelImportListener.java (95%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/excel/ExcelModel.java (56%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/excel/ExcelMultipartWriterBuilder.java (98%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/excel/ExcelMultipartWriterSheetBuilder.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/GenerateCodeFactory.java (89%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/handler/GenerateCodeRuleHandler.java (79%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java (72%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java (76%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java (82%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java (70%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java (67%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java (61%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/AbstractGenerateCodeRule.java (78%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/GenerateCodeRule.java (37%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java (56%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java (60%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/impl/FlowGenerateCodeRule.java (70%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/impl/RandomIntGenerateCodeRule.java (71%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java (51%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/impl/StaticStrGenerateCodeRule.java (56%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/generator/rule/impl/UUIDGenerateCodeRule.java (50%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/locker/DefaultLockBuilder.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/locker/LockFactory.java (88%) rename web-starter/src/main/java/com/lframework/starter/web/{components/redis => core/components}/locker/RedisLockBuilder.java (97%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleEmail.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleSys.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/oplog/OpLogType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/permission/DataPermissionHandlerImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/permission/SysDataPermissionDataPermissionType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/DynamicQrtzJob.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzJob.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/redis/RedisHandler.java (99%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/resp/InvokeResult.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/resp/InvokeResultBuilder.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/resp/InvokeResultErrorBuilderWrapper.java (85%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/resp/PageResult.java (95%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/resp/Response.java (65%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/resp/ResponseErrorBuilder.java (92%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/AbstractUserDetails.java (96%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/security/AbstractUserDetailsService.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/CheckPermissionHandler.java (78%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/CheckPermissionHandlerImpl.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/DefaultUserDetails.java (79%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/PasswordEncoderWrapper.java (87%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/PermissionCalcType.java (59%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/PermitAllService.java (97%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/SecurityConstants.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/SecurityUtil.java (97%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/UserDetails.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/security/UserDetailsService.java (84%) rename web-starter/src/main/java/com/lframework/starter/web/{components/security/IUserTokenResolver.java => core/components/security/UserTokenResolver.java} (78%) rename web-starter/src/main/java/com/lframework/starter/web/{components/security/UserTokenResolver.java => core/components/security/UserTokenResolverImpl.java} (71%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/sign/CheckSignFactory.java (56%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/sign/CheckSignHandler.java (48%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/sign/DefaultCheckSignFactory.java (61%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/sign/DefaultCheckSignHandler.java (60%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/sign/util/SignUtil.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/tenant/DefaultTenantInterceptor.java (62%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/tenant/TenantContextHolder.java (54%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/tenant/TenantInterceptor.java (77%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/threads/DefaultCallable.java (80%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core/components}/threads/DefaultRunnable.java (79%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/timeline/OrderTimeLineBizType.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/trace/DefaultTraceBuilder.java (84%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/trace/TraceBuilder.java (82%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/UploadHandlerFactory.java (79%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/UploadClient.java (81%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/config/CosUploadConfig.java (82%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/config/LocalUploadConfig.java (77%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/config/ObsUploadConfig.java (80%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/config/OssUploadConfig.java (82%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/dto/UploadDto.java (46%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/impl/CosUploadClient.java (94%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/impl/LocalUploadClient.java (81%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/impl/ObsUploadClient.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/client/impl/OssUploadClient.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/SecurityUploadHandler.java (48%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/UploadHandler.java (71%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/CosSecurityUploadHandler.java (65%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/CosUploadHandler.java (62%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/LocalSecurityUploadHandler.java (68%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/LocalUploadHandler.java (63%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/ObsSecurityUploadHandler.java (60%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/ObsUploadHandler.java (54%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/OssSecurityUploadHandler.java (59%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/upload/handler/impl/OssUploadHandler.java (52%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/CodeValidator.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/EnumValidator.java (83%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/IsCode.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/IsEnum.java (85%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/IsJson.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/IsJsonArray.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/IsJsonObject.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/IsNumberPrecision.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/JsonArrayValidator.java (87%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/JsonObjectValidator.java (87%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/JsonValidator.java (87%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/NumberPrecisionValidator.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/Pattern.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/PatternValidator.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/TypeMismatch.java (86%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/UploadUrl.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/components/validation/UploadUrlValidator.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/constants/MyBatisStringPool.java (78%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/constants/MybatisConstants.java (78%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/constants/SqlMethodConstants.java (81%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/controller/BaseController.java (77%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/controller/DefaultBaseController.java (64%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/dto/BaseDto.java (60%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/dto/GenerateCaptchaDto.java (91%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/dto/GenerateCodeDto.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/dto/VoidDto.java (63%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/entity/BaseEntity.java (86%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/enums/BaseEnum.java (86%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/event/ClearTenantEvent.java (89%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/event/ReloadTenantEvent.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/event/SetTenantEvent.java (87%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/handlers/DefaultBaseEntityFillHandler.java (93%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionHandler.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/impl/BaseMpServiceImpl.java (95%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/injectors/MybatisPlusUpdateAllColumnInjector.java (97%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/interceptors/CustomSortInterceptor.java rename web-starter/src/main/java/com/lframework/starter/web/{components/security => core/interceptors}/LoginInterceptor.java (89%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/interceptors/TenantInterceptorImpl.java (70%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/listeners/TenantListener.java (86%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/mapper/BaseMapper.java (97%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/service/BaseMpService.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/service/BaseService.java (78%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/ApplicationUtil.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/BoUtil.java (90%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/CacheUtil.java (94%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/CronUtil.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/DataSourceUtil.java (98%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/EncryptUtil.java (97%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/EnumUtil.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/ExcelImportUtil.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/ExcelUtil.java (97%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/FieldEncryptUtil.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/GroovyUtil.java (93%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/HttpUtil.java (99%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/IdUtil.java (71%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/JsonUtil.java (98%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/utils/OpLogUtil.java rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/PageHelperUtil.java (86%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/PageResultUtil.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/RequestUtil.java (99%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/ResponseUtil.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/SimpleMap.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/SpelUtil.java (94%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/TenantUtil.java (87%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/TransactionUtil.java (96%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/UploadUtil.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/utils/ValidateUtil.java (94%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/vo/BaseVo.java (60%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/vo/PageVo.java (91%) rename web-starter/src/main/java/com/lframework/starter/web/{ => core}/vo/SortPageVo.java (89%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GenCustomListSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GetGenCustomListBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/QueryGenCustomListBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GenCustomListCategorySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GetGenCustomListCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/QueryGenCustomListCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GenCustomPageSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GetGenCustomPageBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/QueryGenCustomPageBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GenCustomPageCategorySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GetGenCustomPageCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/QueryGenCustomPageCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GenCustomSelectorSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GetGenCustomSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/QueryGenCustomSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GenCustomSelectorCategorySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GetGenCustomSelectorCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/QueryGenCustomSelectorCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/DataEntityGenerateBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailGenerateBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntitySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GetDataEntityBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/QueryDataEntityBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GenDataEntityCategorySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GetGenDataEntityCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/QueryGenDataEntityCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjColumnBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjDetailBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjQueryDetailBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GetGenDataObjBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/QueryGenDataObjBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GenDataObjCategorySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GetGenDataObjCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/QueryGenDataObjCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenCreateColumnConfigBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenDetailColumnConfigBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenGenerateInfoBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryColumnConfigBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryParamsColumnConfigBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenUpdateColumnConfigBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/bo/simpledb/SimpleDBSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/CreateColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntity.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntityColumn.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/DetailColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryParamsColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/Table.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/TableColumn.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/UpdateColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/list/CustomListConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/page/CustomPageConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/selector/CustomSelectorConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryObj.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryParamObj.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/Generator.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ControllerTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/CreateTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/DetailTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/EntityTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/MapperTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryParamsTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ServiceTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/SqlTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/UpdateTemplate.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomAuthorizationInterceptor.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomJsonValueProvider.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomMagicFunction.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomSqlCache.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListCategoryController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageCategoryController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorCategoryController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityCategoryController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjCategoryController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenSelectorController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenStringConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/directives/FormatDirective.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/DataEntityGenerateDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/GenDataEntityDetailDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenCreateColumnConfigDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenDetailColumnConfigDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenGenerateInfoDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryColumnConfigDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryParamsColumnConfigDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenUpdateColumnConfigDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/generate/GenerateDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableColumnDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleDBDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleTableDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCreateColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomList.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListCategory.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListDetail.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListHandleColumn.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListQueryParams.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListToolbar.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPage.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPageCategory.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelector.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelectorCategory.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntity.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityCategory.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityDetail.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObj.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjCategory.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjDetail.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjQueryDetail.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDetailColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenGenerateInfo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryParamsColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTable.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTableColumn.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenUpdateColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateColumnConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateConfig.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenConvertType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnViewType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListDetailType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenDataType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenKeyType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenMySqlDataType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenOrderType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryWidthType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaMode.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenStatus.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenTemplateType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenViewType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/event/CustomListDeleteEvent.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDeleteEvent.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDetailDeleteEvent.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjDeleteEvent.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjQueryDetailDeleteEvent.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCreateColumnConfigServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListCategoryServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListDetailServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListHandleColumnServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListQueryParamsServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListToolbarServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageCategoryServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorCategoryServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityCategoryServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityDetailServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjCategoryServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjDetailServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjQueryDetailServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDetailColumnConfigServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryColumnConfigServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryParamsColumnConfigServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenUpdateColumnConfigServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenerateInfoServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleDBServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleTableColumnServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/CreateColumnConfigListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/DetailColumnConfigListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomListListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomSelectorListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenDataObjListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenTenantListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenerateInfoListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryColumnConfigListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryParamsColumnConfigListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/listeners/UpdateColumnConfigListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/DBMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCreateColumnConfigMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListCategoryMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListDetailMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListHandleColumnMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListQueryParamsMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListToolbarMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageCategoryMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorCategoryMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityCategoryMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityDetailMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjCategoryMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjDetailMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjQueryDetailMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDetailColumnConfigMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenGenerateInfoMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryColumnConfigMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryParamsColumnConfigMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableColumnMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenUpdateColumnConfigMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/mappers/SimpleDBMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCreateColumnConfigService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListCategoryService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListDetailService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListHandleColumnService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListQueryParamsService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListToolbarService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageCategoryService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorCategoryService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityCategoryService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityDetailService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjCategoryService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjDetailService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjQueryDetailService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDetailColumnConfigService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryColumnConfigService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryParamsColumnConfigService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenUpdateColumnConfigService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/GenerateInfoService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleDBService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleTableColumnService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateCreateColumnConfigVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateDetailColumnConfigVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateGenerateInfoVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryColumnConfigVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryParamsColumnConfigVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateUpdateColumnConfigVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/CreateGenCustomListVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListDetailVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListHandleColumnVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListQueryParamsVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListToolbarVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/QueryGenCustomListVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/UpdateGenCustomListVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/CreateGenCustomListCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/GenCustomListCategorySelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/UpdateGenCustomListCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/CreateGenCustomPageVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/GenCustomPageSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/QueryGenCustomPageVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/UpdateGenCustomPageVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/CreateGenCustomPageCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/UpdateGenCustomPageCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/CreateGenCustomSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/GenCustomSelectorSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/QueryGenCustomSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/UpdateGenCustomSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/CreateGenCustomSelectorCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/GenCustomSelectorCategorySelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/UpdateGenCustomSelectorCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/CreateDataEntityVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntitySelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/QueryDataEntityVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityGenerateVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/CreateGenDataEntityCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/GenDataEntityCategorySelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/UpdateGenDataEntityCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/CreateGenDataObjVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjDetailVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjQueryDetailVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/QueryGenDataObjVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/UpdateGenDataObjVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/CreateGenDataObjCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/GenDataObjCategorySelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/UpdateGenDataObjCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/QuerySimpleTableColumnVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/SimpleTableSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/CollectMenuBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/ForgetPswUserInfoBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/LoginBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/MenuBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/TelephoneLoginBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/oplog/OpLogInUserCenterBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/GetQrtzBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/QueryQrtzBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/GetSysDeptBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptTreeBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/GetSysDataDicBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/QuerySysDataDicBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/SysDataDicSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/GetSysDataDicCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/QuerySysDataDicCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/SysDataDicCategorySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/GetSysDataDicItemBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/QuerySysDataDicItemBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/SysDataDicItemBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/GetSysGenerateCodeBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/QuerySysGenerateCodeBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/GetSysMenuBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/QuerySysMenuBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/SysMenuSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/GetSysMailMessageBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/QuerySysMailMessageBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/GetSysSiteMessageBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QueryMySysSiteMessageBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QuerySysSiteMessageBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/module/QuerySysModuleBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/GetSysNoticeBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QueryMySysNoticeBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QuerySysNoticeBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/GetSysNotifyGroupBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/QuerySysNotifyGroupBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/SysNotifyGroupSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/GetSysOpenDomainBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/QuerySysOpenDomainBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/SysOpenDomainSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/GetOpLogBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/QueryOpLogBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/GetSysParameterBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/QuerySysParameterBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/QuerySysDataPermissionModelDetailBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/SysDataPermissionModelDetailBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/GetSysRoleBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QueryRoleMenuBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QuerySysRoleBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/SysRoleSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/GetSysRoleCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/QuerySysRoleCategoryBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/SysRoleCategorySelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/GetTenantBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/QueryTenantBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/TenantSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/GetSysUserBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QuerySysUserBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QueryUserRoleBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/SysUserSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/GetSysUserGroupBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/QuerySysUserGroupBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/SysUserGroupSelectorBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/bo/usercenter/UserInfoBo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/AuthOpLogType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/OtherOpLogType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/SystemOpLogType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/OrderDataPermissionDataPermissionType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/ProductDataPermissionDataPermissionType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApprovePassOrderTimeLineBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApproveReturnOrderTimeLineBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CancelApproveOrderTimeLineBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CreateOrderTimeLineBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/NormalOrderTimeLineBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/SendOrderTimeLineBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/UpdateOrderTimeLineBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/AuthController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/QrtzController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/UserCenterController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/OpLogController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicCategoryController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicItemController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionDataController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionModelDetailController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysGenerateCodeController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMailMessageController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMenuController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysModuleController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNoticeController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNotifyGroupController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysOpenDomainController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysParameterController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleCategoryController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleMenuController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysSiteMessageController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserGroupController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserRoleController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/TenantController.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/dic/city/DicCityDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysMailMessageDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysNoticeTaskDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysSiteMessageDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/site/SiteMessageDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyParamsDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/order/ApprovePassOrderDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/qrtz/QrtzDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/stock/ProductStockChangeDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/LoginDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuMetaDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/UserInfoDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/QuerySysNoticeByUserDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/SysNoticeDto.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/DicCity.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/OpLogs.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/OrderTimeLine.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/RecursionMapping.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SecurityUploadRecord.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDic.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicCategory.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicItem.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionData.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionModelDetail.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDept.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysGenerateCode.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMailMessage.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMenu.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModule.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModuleTenant.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotice.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNoticeLog.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroup.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroupReceiver.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysOpenDomain.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysParameter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRole.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleCategory.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleMenu.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysSiteMessage.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUser.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserDept.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroup.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroupDetail.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserRole.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserTelephone.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/entity/Tenant.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Available.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Gender.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/NodeType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/QrtzJobType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionDataBizType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailCalcType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailConditionType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailInputType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailNodeType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMailMessageSendStatus.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuComponentType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuDisplay.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyMessageType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyReceiverType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/TriggerState.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/UploadType.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/AccessDeniedExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/BindExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ClientExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ConstraintViolationExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/FileUploadExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpMessageNotReadableExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpRequestMethodNotSupportedExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/MethodArgumentNotValidExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/NotPermissionExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/SysExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/TypeMismatchExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/UnexpectedTypeExceptionConverter.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/DefaultUserDetailsService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/DicCityServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/GenerateCodeServiceImpl.java rename web-starter/src/main/java/com/lframework/starter/web/{ => inner}/impl/MailServiceImpl.java (93%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/OpLogsServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/OrderTimeLineServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/QrtzServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/RecursionMappingServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/SecurityUploadRecordServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleTenantServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/TenantServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicCategoryServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicItemServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionDataServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionModelDetailServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysGenerateCodeServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMailMessageServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMenuServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeLogServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupReceiverServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysOpenDomainServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysParameterServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleCategoryServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleMenuServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysSiteMessageServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserDeptServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupDetailServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserRoleServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserTelephoneServiceImpl.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/listeners/OpLogTimerListener.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/DicCityMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/GenerateCodeMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OpLogsMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OrderTimeLineMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/QrtzMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/RecursionMappingMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SecurityUploadRecordMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleTenantMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/TenantMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/UserDetailsMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicCategoryMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicItemMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionDataMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionModelDetailMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysGenerateCodeMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMailMessageMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMenuMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeLogMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupReceiverMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysOpenDomainMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysParameterMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleCategoryMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMenuMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysSiteMessageMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserDeptMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupDetailMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserRoleMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserTelephoneMapper.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/DicCityService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/GenerateCodeService.java rename web-starter/src/main/java/com/lframework/starter/web/{ => inner}/service/GroovySupportService.java (72%) rename web-starter/src/main/java/com/lframework/starter/web/{ => inner}/service/MailService.java (93%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/OpLogsService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/OrderTimeLineService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/QrtzService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/RecursionMappingService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/SecurityUploadRecordService.java rename web-starter/src/main/java/com/lframework/starter/web/{ => inner}/service/SysConfService.java (92%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleTenantService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/TenantService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicCategoryService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicItemService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionDataService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionModelDetailService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysGenerateCodeService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMailMessageService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMenuService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeLogService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupReceiverService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysOpenDomainService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysParameterService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleCategoryService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleMenuService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysSiteMessageService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserDeptService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupDetailService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserRoleService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserService.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserTelephoneService.java rename web-starter/src/main/java/com/lframework/starter/web/{vo => inner/vo/openapi}/OpenApiReqVo.java (86%) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/CreateOpLogsVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/QueryOpLogsVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/CreateQrtzVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/QueryQrtzVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/UpdateQrtzVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/config/UpdateSysConfigVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/CreateSysDeptVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysUserDeptSettingVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/UpdateSysDeptVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/CreateSysDataDicVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/QuerySysDataDicVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/SysDataDicSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/UpdateSysDataDicVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/CreateSysDataDicCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/SysDataDicCategorySelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/UpdateSysDataDicCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/CreateSysDataDicItemVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/QuerySysDataDicItemVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/UpdateSysDataDicItemVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/CreateSysGenerateCodeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/PreviewSysGenerateCodeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/QuerySysGenerateCodeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/SettingSysGenerateCodeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/UpdateSysGenerateCodeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/CreateSysMenuVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/SysMenuSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/UpdateSysMenuVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/mail/QuerySysMailMessageVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageByUserVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/module/SysModuleTenantVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/CreateSysNoticeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeByUserVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/UpdateSysNoticeVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/CreateSysNotifyGroupVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/QuerySysNotifyGroupVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/SysNotifyGroupSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/UpdateSysNotifyGroupVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/CreateSysOpenDomainVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/QuerySysOpenDomainVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/SysOpenDomainSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainSecretVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/CreateSysParameterVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/QuerySysParameterVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/UpdateSysParameterVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/CreateSysDataPermissionDataVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/SysDataPermissionModelDetailVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/CreateSysRoleVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/QuerySysRoleVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleMenuSettingVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/UpdateSysRoleVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/CreateSysRoleCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/SysRoleCategorySelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/UpdateSysRoleCategoryVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/CreateTenantVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/QueryTenantVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/TenantSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/UpdateTenantVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/CreateSysUserVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetLoginCaptchaRequieVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetTelephoneLoginCaptchaVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/LoginVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/QuerySysUserVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/RegistUserVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserRoleSettingVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneBindUserVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneLoginVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/UpdateSysUserVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/CreateSysUserGroupVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/QuerySysUserGroupVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/SysUserGroupSelectorVo.java create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/UpdateSysUserGroupVo.java delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/utils/PrintUtil.java rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/components/WsDataPushWorker.java (92%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/components/WsDataPusher.java (50%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/components/WsDataPusherImpl.java (86%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/components/WsSessionManager.java (94%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/constants/WsPool.java (86%) rename web-starter/src/main/java/com/lframework/starter/web/{ => websocket}/dto/WsPushData.java (87%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/entity/WsSession.java (75%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/events/UserConnectEvent.java (83%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/events/UserDisConnectEvent.java (83%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/handler/WsHandler.java (75%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/interceptor/WsHandshakeInterceptor.java (80%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/listener/WsUserConnectListener.java (78%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/listener/WsUserDisConnectListener.java (73%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/service/WsDataProcessService.java (57%) rename {websocket-starter/src/main/java/com/lframework/starter => web-starter/src/main/java/com/lframework/starter/web}/websocket/vo/WsVo.java (73%) create mode 100644 web-starter/src/main/resources/mappers/DicCityMapper.xml create mode 100644 web-starter/src/main/resources/mappers/GenerateCodeMapper.xml create mode 100644 web-starter/src/main/resources/mappers/OpLogsMapper.xml create mode 100644 web-starter/src/main/resources/mappers/QrtzMapper.xml create mode 100644 web-starter/src/main/resources/mappers/RecursionMappingMappre.xml create mode 100644 web-starter/src/main/resources/mappers/SysParameterMapper.xml create mode 100644 web-starter/src/main/resources/mappers/TenantMapper.xml create mode 100644 web-starter/src/main/resources/mappers/UserDetailsMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/DBMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCreateColumnConfigMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomListCategoryMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomListHandleColumnMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomListMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomListToolbarMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomPageCategoryMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomPageMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomSelectorCategoryMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenCustomSelectorMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenDataEntityCategoryMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenDataEntityMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenDataObjDetailMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenDataObjMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenDetailColumnConfigMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenGenerateInfoMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenQueryColumnConfigMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenQueryParamsColumnConfigMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenSimpleTableColumnMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenSimpleTableMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigMapper.xml create mode 100644 web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigService.xml create mode 100644 web-starter/src/main/resources/mappers/gen/SimpleDBMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysDataDicCategoryMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysDataDicItemMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysDataDicMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysDeptMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysGenerateCodeMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysMailMessageMapper.xml.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysMenuMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysNoticeLogMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysNoticeMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysNotifyGroupMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysOpenDomainMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysRoleCategoryMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysRoleMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysSiteMessageMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysUserDeptMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysUserGroupMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysUserMapper.xml create mode 100644 web-starter/src/main/resources/mappers/system/SysUserRoleMapper.xml create mode 100644 web-starter/src/main/resources/templates/add.vue.ftl create mode 100644 web-starter/src/main/resources/templates/api.ts.ftl create mode 100644 web-starter/src/main/resources/templates/controller.java.ftl create mode 100644 web-starter/src/main/resources/templates/createvo.java.ftl create mode 100644 web-starter/src/main/resources/templates/createvo.ts.ftl create mode 100644 web-starter/src/main/resources/templates/detail.vue.ftl create mode 100644 web-starter/src/main/resources/templates/entity.java.ftl create mode 100644 web-starter/src/main/resources/templates/getbo.java.ftl create mode 100644 web-starter/src/main/resources/templates/getbo.ts.ftl create mode 100644 web-starter/src/main/resources/templates/index.vue.ftl create mode 100644 web-starter/src/main/resources/templates/input-components.ftl create mode 100644 web-starter/src/main/resources/templates/mapper.java.ftl create mode 100644 web-starter/src/main/resources/templates/mapper.list.xml.ftl create mode 100644 web-starter/src/main/resources/templates/modify.vue.ftl create mode 100644 web-starter/src/main/resources/templates/query-type-sql.ftl create mode 100644 web-starter/src/main/resources/templates/querybo.java.ftl create mode 100644 web-starter/src/main/resources/templates/querybo.ts.ftl create mode 100644 web-starter/src/main/resources/templates/queryvo.java.ftl create mode 100644 web-starter/src/main/resources/templates/queryvo.ts.ftl create mode 100644 web-starter/src/main/resources/templates/service.java.ftl create mode 100644 web-starter/src/main/resources/templates/serviceimpl.java.ftl create mode 100644 web-starter/src/main/resources/templates/sql.ftl create mode 100644 web-starter/src/main/resources/templates/updatevo.java.ftl create mode 100644 web-starter/src/main/resources/templates/updatevo.ts.ftl delete mode 100644 websocket-starter/pom.xml diff --git a/bpm-starter/pom.xml b/bpm-starter/pom.xml new file mode 100644 index 0000000..eddaf95 --- /dev/null +++ b/bpm-starter/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + com.lframework + parent + 4.0.0 + + + bpm-starter + 【${project.artifactId}】集成Bpm能力 + + + + + com.lframework + mq-starter + ${jugg.version} + pom + import + + + + + + + com.lframework + web-starter + + + + org.dromara.warm + warm-flow-mybatis-plus-sb-starter + + + + org.dromara.warm + warm-flow-plugin-ui-sb-web + + + + org.dromara.warm + warm-flow-plugin-ui-core + + + + com.lframework + mq-core + + + \ No newline at end of file diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/DetailFlowCategoryBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/DetailFlowCategoryBo.java new file mode 100644 index 0000000..05694da --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/DetailFlowCategoryBo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.bpm.bo.flow.category; + +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class DetailFlowCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + /** + * 流程类型名称 + */ + @ApiModelProperty("流程类型名称") + private String name; + /** + * 父节点ID + */ + @ApiModelProperty("父节点ID") + private String parentId; + + /** + * 父节点名称 + */ + @ApiModelProperty("父节点名称") + private String parentName; + + public DetailFlowCategoryBo(FlowCategory dto) { + super(dto); + } + + @Override + protected void afterInit(FlowCategory dto) { + if (StringUtil.isNotEmpty(dto.getParentId())) { + FlowCategoryService flowCategoryService = ApplicationUtil.getBean(FlowCategoryService.class); + FlowCategory parent = flowCategoryService.findById(dto.getParentId()); + this.parentName = parent.getName(); + } + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/QueryFlowCategoryTreeBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/QueryFlowCategoryTreeBo.java new file mode 100644 index 0000000..6a096bb --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/category/QueryFlowCategoryTreeBo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.bpm.bo.flow.category; + +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryFlowCategoryTreeBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + /** + * 流程类型名称 + */ + @ApiModelProperty("流程类型名称") + private String name; + /** + * 父节点ID + */ + @ApiModelProperty("父节点ID") + private String parentId; + + public QueryFlowCategoryTreeBo(FlowCategory dto) { + super(dto); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/DetailFlowDefinitionBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/DetailFlowDefinitionBo.java new file mode 100644 index 0000000..74de662 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/DetailFlowDefinitionBo.java @@ -0,0 +1,66 @@ +package com.lframework.starter.bpm.bo.flow.definition; + +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.web.core.annotations.convert.EnumConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class DetailFlowDefinitionBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String code; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String name; + + /** + * 流程分类ID + */ + @ApiModelProperty("流程分类ID") + private String categoryId; + + /** + * 流程分类 + */ + @ApiModelProperty("流程分类") + private String categoryName; + + /** + * 是否发布 + */ + @ApiModelProperty("是否发布") + @EnumConvert + private Integer isPublish; + + public DetailFlowDefinitionBo(FlowDefinitionWrapper dto) { + super(dto); + } + + @Override + protected void afterInit(FlowDefinitionWrapper dto) { + FlowCategoryService flowCategoryService = ApplicationUtil.getBean(FlowCategoryService.class); + FlowCategory flowCategory = flowCategoryService.findById(dto.getCategory()); + this.categoryId = flowCategory.getId(); + this.categoryName = flowCategory.getName(); + + this.code = dto.getFlowCode(); + this.name = dto.getFlowName(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/FlowDefinitionSelectorBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/FlowDefinitionSelectorBo.java new file mode 100644 index 0000000..ca87408 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/FlowDefinitionSelectorBo.java @@ -0,0 +1,62 @@ +package com.lframework.starter.bpm.bo.flow.definition; + +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class FlowDefinitionSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String flowCode; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String flowName; + + /** + * 流程分类 + */ + @ApiModelProperty("流程分类") + private String categoryName; + + /** + * 版本号 + */ + @ApiModelProperty("版本号") + private String version; + + /** + * 创建时间 + * @param dto + */ + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + public FlowDefinitionSelectorBo(FlowDefinitionWrapper dto) { + super(dto); + } + + @Override + protected void afterInit(FlowDefinitionWrapper dto) { + FlowCategoryService flowCategoryService = ApplicationUtil.getBean(FlowCategoryService.class); + FlowCategory flowCategory = flowCategoryService.findById(dto.getCategory()); + this.categoryName = flowCategory.getName(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/QueryFlowDefinitionBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/QueryFlowDefinitionBo.java new file mode 100644 index 0000000..0275211 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/definition/QueryFlowDefinitionBo.java @@ -0,0 +1,77 @@ +package com.lframework.starter.bpm.bo.flow.definition; + +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.web.core.annotations.convert.EnumConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryFlowDefinitionBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String flowCode; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String flowName; + + /** + * 流程分类 + */ + @ApiModelProperty("流程分类") + private String categoryName; + + /** + * 版本号 + */ + @ApiModelProperty("版本号") + private String version; + + /** + * 是否发布 + */ + @ApiModelProperty("是否发布") + @EnumConvert + private Integer isPublish; + + /** + * 激活状态 + */ + @ApiModelProperty("激活状态") + @EnumConvert + private Integer activityStatus; + + /** + * 创建时间 + * @param dto + */ + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + public QueryFlowDefinitionBo(FlowDefinitionWrapper dto) { + super(dto); + } + + @Override + protected void afterInit(FlowDefinitionWrapper dto) { + FlowCategoryService flowCategoryService = ApplicationUtil.getBean(FlowCategoryService.class); + FlowCategory flowCategory = flowCategoryService.findById(dto.getCategory()); + this.categoryName = flowCategory.getName(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/instance/QueryBusinessFlowInstanceBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/instance/QueryBusinessFlowInstanceBo.java new file mode 100644 index 0000000..c756c11 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/instance/QueryBusinessFlowInstanceBo.java @@ -0,0 +1,36 @@ +package com.lframework.starter.bpm.bo.flow.instance; + +import com.lframework.starter.bpm.entity.FlowInstanceWrapper; +import com.lframework.starter.bpm.service.FlowCuInstanceService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryBusinessFlowInstanceBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + public QueryBusinessFlowInstanceBo(FlowInstanceWrapper dto) { + super(dto); + } + + @Override + protected void afterInit(FlowInstanceWrapper dto) { + FlowCuInstanceService flowCuInstanceService = ApplicationUtil.getBean( + FlowCuInstanceService.class); + + this.title = flowCuInstanceService.getById(dto.getId()).getTitle(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryInstanceListBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryInstanceListBo.java new file mode 100644 index 0000000..a197f2b --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryInstanceListBo.java @@ -0,0 +1,146 @@ +package com.lframework.starter.bpm.bo.flow.task; + +import cn.hutool.core.date.BetweenFormatter.Level; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.lframework.starter.bpm.dto.FlowTaskDto; +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.service.system.SysUserService; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryInstanceListBo extends BaseBo { + + /** + * 任务标题 + */ + @ApiModelProperty("任务标题") + private String title; + + /** + * 业务ID + */ + @ApiModelProperty("业务ID") + private String businessId; + + /** + * 节点编号 + */ + @ApiModelProperty("节点编号") + private String nodeCode; + + /** + * 节点名称 + */ + @ApiModelProperty("节点名称") + private String nodeName; + + /** + * 节点类型 + */ + @ApiModelProperty("节点类型") + private Integer nodeType; + + /** + * 流程状态 + */ + @ApiModelProperty("流程状态") + private String flowStatus; + + /** + * 流程定义ID + */ + @ApiModelProperty("流程定义ID") + private String flowId; + + /** + * 流程定义编号 + */ + @ApiModelProperty("流程定义编号") + private String flowCode; + + /** + * 流程定义名称 + */ + @ApiModelProperty("流程定义名称") + private String flowName; + + /** + * 流程定义分类ID + */ + @ApiModelProperty("流程定义分类ID") + private String categoryId; + + /** + * 流程定义分类名称 + */ + @ApiModelProperty("流程定义分类名称") + private String categoryName; + + /** + * 流程实例ID + */ + @ApiModelProperty("流程实例ID") + private String instanceId; + + /** + * 流程实例扩展字段 + */ + @ApiModelProperty("流程实例扩展字段") + private String ext; + + /** + * 流程发起人ID + */ + @ApiModelProperty("流程发起人ID") + private String startById; + + /** + * 流程发起人 + */ + @ApiModelProperty("流程发起人") + private String startBy; + + /** + * 流程发起时间 + */ + @ApiModelProperty("流程发起时间") + private LocalDateTime startTime; + + /** + * 流程结束时间 + */ + @ApiModelProperty("流程结束时间") + private LocalDateTime endTime; + + /** + * 流程执行时间 + */ + @ApiModelProperty("流程执行时间") + private String executeTime; + + public QueryInstanceListBo(FlowTaskDto dto) { + super(dto); + } + + @Override + protected void afterInit(FlowTaskDto dto) { + FlowCategoryService flowCategoryService = ApplicationUtil.getBean(FlowCategoryService.class); + FlowCategory flowCategory = flowCategoryService.findById(dto.getCategoryId()); + this.categoryName = flowCategory.getName(); + + SysUserService sysUserService = ApplicationUtil.getBean(SysUserService.class); + this.startBy = sysUserService.findById(dto.getStartById()).getName(); + + if (dto.getEndTime() != null) { + this.executeTime = DateUtil.formatBetween( + LocalDateTimeUtil.between(dto.getStartTime(), dto.getEndTime()).getSeconds() * 1000L, + Level.SECOND); + } + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryMyTaskListBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryMyTaskListBo.java new file mode 100644 index 0000000..0942ce1 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryMyTaskListBo.java @@ -0,0 +1,146 @@ +package com.lframework.starter.bpm.bo.flow.task; + +import cn.hutool.core.date.BetweenFormatter.Level; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.lframework.starter.bpm.dto.FlowTaskDto; +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.service.system.SysUserService; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryMyTaskListBo extends BaseBo { + + /** + * 任务标题 + */ + @ApiModelProperty("任务标题") + private String title; + + /** + * 业务ID + */ + @ApiModelProperty("业务ID") + private String businessId; + + /** + * 节点编号 + */ + @ApiModelProperty("节点编号") + private String nodeCode; + + /** + * 节点名称 + */ + @ApiModelProperty("节点名称") + private String nodeName; + + /** + * 节点类型 + */ + @ApiModelProperty("节点类型") + private Integer nodeType; + + /** + * 流程状态 + */ + @ApiModelProperty("流程状态") + private String flowStatus; + + /** + * 流程定义ID + */ + @ApiModelProperty("流程定义ID") + private String flowId; + + /** + * 流程定义编号 + */ + @ApiModelProperty("流程定义编号") + private String flowCode; + + /** + * 流程定义名称 + */ + @ApiModelProperty("流程定义名称") + private String flowName; + + /** + * 流程定义分类ID + */ + @ApiModelProperty("流程定义分类ID") + private String categoryId; + + /** + * 流程定义分类名称 + */ + @ApiModelProperty("流程定义分类名称") + private String categoryName; + + /** + * 流程实例ID + */ + @ApiModelProperty("流程实例ID") + private String instanceId; + + /** + * 流程实例扩展字段 + */ + @ApiModelProperty("流程实例扩展字段") + private String ext; + + /** + * 流程发起人ID + */ + @ApiModelProperty("流程发起人ID") + private String startById; + + /** + * 流程发起人 + */ + @ApiModelProperty("流程发起人") + private String startBy; + + /** + * 流程发起时间 + */ + @ApiModelProperty("流程发起时间") + private LocalDateTime startTime; + + /** + * 流程结束时间 + */ + @ApiModelProperty("流程结束时间") + private LocalDateTime endTime; + + /** + * 流程执行时间 + */ + @ApiModelProperty("流程执行时间") + private String executeTime; + + public QueryMyTaskListBo(FlowTaskDto dto) { + super(dto); + } + + @Override + protected void afterInit(FlowTaskDto dto) { + FlowCategoryService flowCategoryService = ApplicationUtil.getBean(FlowCategoryService.class); + FlowCategory flowCategory = flowCategoryService.findById(dto.getCategoryId()); + this.categoryName = flowCategory.getName(); + + SysUserService sysUserService = ApplicationUtil.getBean(SysUserService.class); + this.startBy = sysUserService.findById(dto.getStartById()).getName(); + + if (dto.getEndTime() != null) { + this.executeTime = DateUtil.formatBetween( + LocalDateTimeUtil.between(dto.getStartTime(), dto.getEndTime()).getSeconds() * 1000L, + Level.SECOND); + } + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryTodoTaskListBo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryTodoTaskListBo.java new file mode 100644 index 0000000..45bdc3e --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/bo/flow/task/QueryTodoTaskListBo.java @@ -0,0 +1,131 @@ +package com.lframework.starter.bpm.bo.flow.task; + +import com.lframework.starter.bpm.dto.FlowTaskDto; +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.service.system.SysUserService; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryTodoTaskListBo extends BaseBo { + + /** + * 任务ID + */ + @ApiModelProperty("任务ID") + private String taskId; + + /** + * 任务标题 + */ + @ApiModelProperty("任务标题") + private String title; + + /** + * 业务ID + */ + @ApiModelProperty("业务ID") + private String businessId; + + /** + * 节点编号 + */ + @ApiModelProperty("节点编号") + private String nodeCode; + + /** + * 节点名称 + */ + @ApiModelProperty("节点名称") + private String nodeName; + + /** + * 节点类型 + */ + @ApiModelProperty("节点类型") + private Integer nodeType; + + /** + * 流程状态 + */ + @ApiModelProperty("流程状态") + private String flowStatus; + + /** + * 流程定义ID + */ + @ApiModelProperty("流程定义ID") + private String flowId; + + /** + * 流程定义编号 + */ + @ApiModelProperty("流程定义编号") + private String flowCode; + + /** + * 流程定义名称 + */ + @ApiModelProperty("流程定义名称") + private String flowName; + + /** + * 流程定义分类ID + */ + @ApiModelProperty("流程定义分类ID") + private String categoryId; + + /** + * 流程定义分类名称 + */ + @ApiModelProperty("流程定义分类名称") + private String categoryName; + + /** + * 流程实例ID + */ + @ApiModelProperty("流程实例ID") + private String instanceId; + + /** + * 流程实例扩展字段 + */ + @ApiModelProperty("流程实例扩展字段") + private String ext; + + /** + * 流程发起人ID + */ + @ApiModelProperty("流程发起人ID") + private String startById; + + /** + * 流程发起人 + */ + @ApiModelProperty("流程发起人") + private String startBy; + + /** + * 流程发起时间 + */ + @ApiModelProperty("流程发起时间") + private LocalDateTime startTime; + + public QueryTodoTaskListBo(FlowTaskDto dto) { + super(dto); + } + + @Override + protected void afterInit(FlowTaskDto dto) { + FlowCategoryService flowCategoryService = ApplicationUtil.getBean(FlowCategoryService.class); + FlowCategory flowCategory = flowCategoryService.findById(dto.getCategoryId()); + this.categoryName = flowCategory.getName(); + + SysUserService sysUserService = ApplicationUtil.getBean(SysUserService.class); + this.startBy = sysUserService.findById(dto.getStartById()).getName(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmBeanAutoConfiguration.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmBeanAutoConfiguration.java new file mode 100644 index 0000000..e639f65 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmBeanAutoConfiguration.java @@ -0,0 +1,66 @@ +package com.lframework.starter.bpm.config; + +import com.lframework.starter.bpm.controller.BpmSelectorController; +import com.lframework.starter.bpm.controller.FlowCategoryController; +import com.lframework.starter.bpm.controller.FlowDefinitionController; +import com.lframework.starter.bpm.controller.FlowInstanceController; +import com.lframework.starter.bpm.controller.FlowTaskController; +import com.lframework.starter.bpm.handlers.BpmChartExtService; +import com.lframework.starter.bpm.handlers.BpmHandlerSelectService; +import com.lframework.starter.bpm.handlers.BpmPermissionHandler; +import com.lframework.starter.bpm.handlers.exception.FlowExceptionConverter; +import com.lframework.starter.bpm.impl.FlowCategoryServiceImpl; +import com.lframework.starter.bpm.impl.FlowCuApproveHisServiceImpl; +import com.lframework.starter.bpm.impl.FlowCuInstanceServiceImpl; +import com.lframework.starter.bpm.impl.FlowDefinitionWrapperServiceImpl; +import com.lframework.starter.bpm.impl.FlowInstanceWrapperServiceImpl; +import com.lframework.starter.bpm.impl.FlowTaskWrapperServiceImpl; +import com.lframework.starter.bpm.listeners.BpmGlobalListener; +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.EnvironmentAware; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.env.Environment; + +@Slf4j +@Configuration +@Import({ + BpmSelectorController.class, + FlowCategoryController.class, + FlowDefinitionController.class, + FlowTaskController.class, + FlowInstanceController.class, + FlowCategoryServiceImpl.class, + FlowDefinitionWrapperServiceImpl.class, + FlowTaskWrapperServiceImpl.class, + FlowCuInstanceServiceImpl.class, + FlowInstanceWrapperServiceImpl.class, + FlowCuApproveHisServiceImpl.class, + BpmChartExtService.class, + BpmGlobalListener.class, +}) +@MapperScan("com.lframework.starter.bpm.**.mappers") +public class BpmBeanAutoConfiguration implements EnvironmentAware { + + @Bean + public BpmHandlerSelectService bpmHandlerSelectService() { + return new BpmHandlerSelectService(); + } + + @Bean + public BpmPermissionHandler bpmPermissionHandler() { + return new BpmPermissionHandler(); + } + + @Bean + public FlowExceptionConverter flowExceptionConverter() { + return new FlowExceptionConverter(); + } + + @Override + public void setEnvironment(Environment environment) { + log.info("bpm-starter加载完成"); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmSwaggerAutoConfiguration.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmSwaggerAutoConfiguration.java new file mode 100644 index 0000000..3985c68 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/config/BpmSwaggerAutoConfiguration.java @@ -0,0 +1,31 @@ +package com.lframework.starter.bpm.config; + +import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@Configuration +public class BpmSwaggerAutoConfiguration { + + @Bean("bpmApiDocket") + public Docket bpmApiDocket(ApiInfo info, OpenApiExtensionResolver openApiExtensionResolver) { + + // 除了描述 其他全与info保持一致 + ApiInfo apiInfo = new ApiInfo(info.getTitle(), "审批流程模块", info.getVersion(), + info.getTermsOfServiceUrl(), + info.getContact(), info.getLicense(), info.getLicenseUrl(), info.getVendorExtensions()); + + Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).groupName("审批流程模块") + .select() + .apis(RequestHandlerSelectors.basePackage("com.lframework.starter.bpm")) + .paths(PathSelectors.any()) + .build() + .extensions(openApiExtensionResolver.buildSettingExtensions()); + return docket; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/BpmSelectorController.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/BpmSelectorController.java new file mode 100644 index 0000000..ccf621f --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/BpmSelectorController.java @@ -0,0 +1,78 @@ +package com.lframework.starter.bpm.controller; + +import com.lframework.starter.bpm.bo.flow.definition.FlowDefinitionSelectorBo; +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.service.FlowDefinitionWrapperService; +import com.lframework.starter.bpm.vo.flow.definition.FlowDefinitionSelectorVo; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * BPM选择器 + * + * @author zmj + */ +@Api(tags = "BPM选择器") +@Validated +@RestController +@RequestMapping("/selector/bpm") +public class BpmSelectorController extends DefaultBaseController { + + @Autowired + private FlowDefinitionWrapperService flowDefinitionWrapperService; + + /** + * 流程定义 + */ + @ApiOperation("流程定义") + @GetMapping("/flow/definition") + public InvokeResult> selector( + @Valid FlowDefinitionSelectorVo vo) { + + PageResult pageResult = flowDefinitionWrapperService.selector( + getPageIndex(vo), getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(FlowDefinitionSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载流程定义 + */ + @ApiOperation("加载流程定义") + @PostMapping("/flow/definition/load") + public InvokeResult> loadFlowDefinition( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = flowDefinitionWrapperService.listByIds(ids); + List results = datas.stream().map(FlowDefinitionSelectorBo::new) + .collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowCategoryController.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowCategoryController.java new file mode 100644 index 0000000..abb16ff --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowCategoryController.java @@ -0,0 +1,122 @@ +package com.lframework.starter.bpm.controller; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.bpm.bo.flow.category.DetailFlowCategoryBo; +import com.lframework.starter.bpm.bo.flow.category.QueryFlowCategoryTreeBo; +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.bpm.vo.flow.category.CreateFlowCategoryVo; +import com.lframework.starter.bpm.vo.flow.category.UpdateFlowCategoryVo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "流程分类") +@Validated +@RestController +@RequestMapping("/flow/category") +public class FlowCategoryController extends DefaultBaseController { + + @Autowired + private FlowCategoryService flowCategoryService; + + /** + * 根据ID查询 + * + * @param id + * @return + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/detail") + public InvokeResult detail( + @NotBlank(message = "ID不能为空!") String id) { + FlowCategory data = flowCategoryService.getById(id); + if (data == null) { + throw new DefaultClientException("分类不存在!"); + } + + return InvokeResultBuilder.success(new DetailFlowCategoryBo(data)); + } + + /** + * 查询列表 + * + * @return + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query() { + List list = flowCategoryService.list(); + List results = list.stream().map(QueryFlowCategoryTreeBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + /** + * 新增 + * + * @param vo + * @return + */ + @ApiOperation("新增") + @PostMapping + public InvokeResult create(@RequestBody CreateFlowCategoryVo vo) { + return InvokeResultBuilder.success(flowCategoryService.create(vo)); + } + + /** + * 修改 + * + * @param vo + * @return + */ + @ApiOperation("修改") + @PutMapping + public InvokeResult update(@RequestBody UpdateFlowCategoryVo vo) { + flowCategoryService.update(vo); + + flowCategoryService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 根据ID删除 + * + * @param id + * @return + */ + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @DeleteMapping + public InvokeResult deleteById(@NotBlank(message = "ID不能为空!") String id) { + // 先查询有没有子节点,如果有子节点那么不允许删除 + Wrapper checkWrapper = Wrappers.lambdaQuery(FlowCategory.class) + .eq(FlowCategory::getParentId, id); + if (flowCategoryService.count(checkWrapper) > 0) { + throw new DefaultClientException("当前分类存在子分类,不允许删除!"); + } + flowCategoryService.removeById(id); + + flowCategoryService.cleanCacheByKey(id); + return InvokeResultBuilder.success(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowDefinitionController.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowDefinitionController.java new file mode 100644 index 0000000..b2544c2 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowDefinitionController.java @@ -0,0 +1,202 @@ +package com.lframework.starter.bpm.controller; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.bpm.bo.flow.definition.DetailFlowDefinitionBo; +import com.lframework.starter.bpm.bo.flow.definition.QueryFlowDefinitionBo; +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.enums.FlowDefinitionActivityStatus; +import com.lframework.starter.bpm.enums.FlowDefinitionIsPublish; +import com.lframework.starter.bpm.service.FlowDefinitionWrapperService; +import com.lframework.starter.bpm.vo.flow.definition.CreateFlowDefinitionVo; +import com.lframework.starter.bpm.vo.flow.definition.QueryFlowDefinitionVo; +import com.lframework.starter.bpm.vo.flow.definition.SetFlowDefinitionActivityStatusVo; +import com.lframework.starter.bpm.vo.flow.definition.SetFlowDefinitionPublishVo; +import com.lframework.starter.bpm.vo.flow.definition.UpdateFlowDefinitionVo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import org.dromara.warm.flow.core.service.DefService; +import org.dromara.warm.flow.orm.entity.FlowDefinition; +import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "流程定义") +@Validated +@RestController +@RequestMapping("/flow/definition") +public class FlowDefinitionController extends DefaultBaseController { + + @Autowired + private DefService defService; + + @Autowired + private FlowDefinitionWrapperService flowDefinitionWrapperService; + + /** + * 查询列表 + * + * @return + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query(@Valid QueryFlowDefinitionVo vo) { + PageHelperUtil.startPage(vo); + Wrapper queryWrapper = Wrappers.lambdaQuery(FlowDefinitionWrapper.class) + .eq(!StringUtil.isBlank(vo.getCode()), FlowDefinitionWrapper::getFlowCode, vo.getCode()) + .like(!StringUtil.isBlank(vo.getName()), FlowDefinitionWrapper::getFlowName, vo.getName()) + .eq(!StringUtil.isBlank(vo.getVersion()), FlowDefinitionWrapper::getVersion, + vo.getVersion()) + .eq(!StringUtil.isBlank(vo.getCategoryId()), FlowDefinitionWrapper::getCategory, + vo.getCategoryId()) + .eq(vo.getIsPublish() != null, FlowDefinitionWrapper::getIsPublish, vo.getIsPublish()) + .eq(vo.getActivityStatus() != null, FlowDefinitionWrapper::getActivityStatus, + vo.getActivityStatus()) + .orderByDesc(FlowDefinitionWrapper::getCreateTime); + List datas = flowDefinitionWrapperService.list(queryWrapper); + PageResult pageResult = PageResultUtil.convert(new PageInfo<>(datas)); + + List results = datas.stream().map(QueryFlowDefinitionBo::new) + .collect(Collectors.toList()); + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("查询详情") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/detail") + public InvokeResult detail(@NotNull(message = "ID不能为空!") Long id) { + FlowDefinitionWrapper data = flowDefinitionWrapperService.getById(id); + if (data == null) { + throw new DefaultClientException("流程不存在!"); + } + + return InvokeResultBuilder.success(new DetailFlowDefinitionBo(data)); + } + + /** + * 新增 + * + * @param vo + * @return + */ + @ApiOperation("新增") + @PostMapping + public InvokeResult create(@Valid CreateFlowDefinitionVo vo) { + + if (!CollectionUtil.isEmpty(defService.getByFlowCode(vo.getCode()))) { + throw new DefaultClientException("流程编号重复,请重新输入!"); + } + FlowDefinition definition = new FlowDefinition(); + definition.setFlowCode(vo.getCode()); + definition.setFlowName(vo.getName()); + definition.setCategory(vo.getCategoryId()); + definition.setVersion("1"); + definition.setIsPublish(FlowDefinitionIsPublish.N.getCode()); + definition.setFormCustom(StringPool.N); + definition.setActivityStatus(FlowDefinitionActivityStatus.ACTIVATE.getCode()); + + defService.saveAndInitNode(definition); + return InvokeResultBuilder.success(); + } + + /** + * 修改 + * + * @param vo + * @return + */ + @ApiOperation("修改") + @PutMapping + public InvokeResult update(@Valid UpdateFlowDefinitionVo vo) { + flowDefinitionWrapperService.update(vo); + return InvokeResultBuilder.success(); + } + + /** + * 设置发布状态 + * + * @param vo + * @return + */ + @ApiOperation("设置发布状态") + @PostMapping("/publish") + public InvokeResult setPublishStatus(@Valid SetFlowDefinitionPublishVo vo) { + if (vo.getIsPublish() == FlowDefinitionIsPublish.Y.getCode().intValue()) { + defService.publish(vo.getId()); + } else { + defService.unPublish(vo.getId()); + } + + return InvokeResultBuilder.success(); + } + + /** + * 设置激活状态 + * + * @param vo + * @return + */ + @ApiOperation("设置激活状态") + @PostMapping("/activity") + public InvokeResult setActivityStatus(@Valid SetFlowDefinitionActivityStatusVo vo) { + if (vo.getActivityStatus() == FlowDefinitionActivityStatus.ACTIVATE.getCode().intValue()) { + defService.active(vo.getId()); + } else { + defService.unActive(vo.getId()); + } + + return InvokeResultBuilder.success(); + } + + /** + * 复制流程 + * + * @param vo + * @return + */ + @ApiOperation("复制流程") + @PostMapping("/copy") + public InvokeResult copy(@Valid UpdateFlowDefinitionVo vo) { + flowDefinitionWrapperService.copy(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 根据ID删除 + * + * @param id + * @return + */ + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @DeleteMapping + public InvokeResult deleteById(@NotNull(message = "ID不能为空!") Long id) { + defService.removeDef(Collections.singletonList(id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowInstanceController.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowInstanceController.java new file mode 100644 index 0000000..7e4dcd5 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowInstanceController.java @@ -0,0 +1,67 @@ +package com.lframework.starter.bpm.controller; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.bpm.bo.flow.instance.QueryBusinessFlowInstanceBo; +import com.lframework.starter.bpm.entity.FlowInstanceWrapper; +import com.lframework.starter.bpm.service.FlowInstanceWrapperService; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.constraints.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "流程实例") +@Validated +@RestController +@RequestMapping("/flow/instance") +public class FlowInstanceController extends DefaultBaseController { + + @Autowired + private FlowInstanceWrapperService flowInstanceWrapperService; + + /** + * 根据业务ID查询 + * + * @return + */ + @ApiOperation("根据业务ID查询") + @ApiImplicitParam(value = "业务ID", name = "businessId", paramType = "query", required = true) + @GetMapping("/list/business") + public InvokeResult> listBusiness( + @NotNull(message = "业务ID不能为空!") String businessId) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(FlowInstanceWrapper.class) + .eq(FlowInstanceWrapper::getBusinessId, businessId) + .orderByDesc(FlowInstanceWrapper::getCreateTime); + + List datas = flowInstanceWrapperService.list(queryWrapper); + + List results = datas.stream().map(QueryBusinessFlowInstanceBo::new) + .collect( + Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("根据ID查询状态") + @ApiImplicitParam(value = "流程实例ID", name = "id", paramType = "query", required = true) + @GetMapping("/status") + public InvokeResult getStatus(@NotNull(message = "流程实例ID不能为空!") Long id) { + FlowInstanceWrapper instance = flowInstanceWrapperService.getById(id); + if(instance == null) { + throw new DefaultClientException("流程实例不存在!"); + } + return InvokeResultBuilder.success(instance.getFlowStatus().getCode()); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowTaskController.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowTaskController.java new file mode 100644 index 0000000..f244b40 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/controller/FlowTaskController.java @@ -0,0 +1,159 @@ +package com.lframework.starter.bpm.controller; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.bpm.bo.flow.task.QueryInstanceListBo; +import com.lframework.starter.bpm.bo.flow.task.QueryMyTaskListBo; +import com.lframework.starter.bpm.bo.flow.task.QueryTodoTaskListBo; +import com.lframework.starter.bpm.dto.FlowTaskDto; +import com.lframework.starter.bpm.enums.FlowCooperateType; +import com.lframework.starter.bpm.service.FlowTaskWrapperService; +import com.lframework.starter.bpm.vo.flow.instance.QueryInstanceListVo; +import com.lframework.starter.bpm.vo.flow.task.ApprovePassTaskVo; +import com.lframework.starter.bpm.vo.flow.task.ApproveRefuseTaskVo; +import com.lframework.starter.bpm.vo.flow.task.QueryMyTaskListVo; +import com.lframework.starter.bpm.vo.flow.task.QueryTodoTaskListVo; +import com.lframework.starter.bpm.vo.flow.task.RejectTaskVo; +import com.lframework.starter.bpm.vo.flow.task.UndoTaskVo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.utils.PageResultUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import org.dromara.warm.flow.core.entity.Task; +import org.dromara.warm.flow.core.enums.CooperateType; +import org.dromara.warm.flow.core.service.TaskService; +import org.dromara.warm.flow.orm.entity.FlowNode; +import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "流程任务") +@Validated +@RestController +@RequestMapping("/flow/task") +public class FlowTaskController extends DefaultBaseController { + + @Autowired + private FlowTaskWrapperService flowTaskWrapperService; + + @Autowired + private TaskService taskService; + + @Autowired + private FlowNodeMapper flowNodeMapper; + + @ApiOperation("查询待办任务列表") + @GetMapping("/list/todo") + public InvokeResult> queryTodoList( + @Valid QueryTodoTaskListVo vo) { + PageResult pageResult = flowTaskWrapperService.queryTodoList(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = datas.stream().map(QueryTodoTaskListBo::new).collect( + Collectors.toList()); + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("查询我的发起列表") + @GetMapping("/list/my") + public InvokeResult> queryMyList( + @Valid QueryMyTaskListVo vo) { + PageResult pageResult = flowTaskWrapperService.queryMyList(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = datas.stream().map(QueryMyTaskListBo::new).collect( + Collectors.toList()); + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("查询流程实例列表") + @GetMapping("/list/instance") + public InvokeResult> queryInstanceList( + @Valid QueryInstanceListVo vo) { + PageResult pageResult = flowTaskWrapperService.queryInstanceList(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = datas.stream().map(QueryInstanceListBo::new).collect( + Collectors.toList()); + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("根据ID查询审核类型") + @ApiImplicitParam(value = "流程任务ID", name = "id", paramType = "query", required = true) + @GetMapping("/cooperate") + public InvokeResult getCooperateType(@NotNull(message = "流程任务ID不能为空!") Long id) { + Task task = taskService.getById(id); + if (task == null) { + throw new DefaultClientException("流程任务不存在!"); + } + Long definitionId = task.getDefinitionId(); + String nodeCode = task.getNodeCode(); + Wrapper queryWrapper = Wrappers.lambdaQuery(FlowNode.class) + .eq(FlowNode::getDefinitionId, definitionId) + .eq(FlowNode::getNodeCode, nodeCode); + FlowNode flowNode = flowNodeMapper.selectOne(queryWrapper); + if (flowNode == null) { + throw new DefaultClientException("流程节点不存在!"); + } + + if (CooperateType.isCountersign(flowNode.getNodeRatio())) { + return InvokeResultBuilder.success(FlowCooperateType.ALL.getCode()); + } else if (CooperateType.isVoteSign(flowNode.getNodeRatio())) { + return InvokeResultBuilder.success(FlowCooperateType.VOTE.getCode()); + } else { + return InvokeResultBuilder.success(FlowCooperateType.NORMAL.getCode()); + } + } + + @ApiOperation("审核通过") + @PostMapping("/approve/pass") + public InvokeResult approvePass(@Valid @RequestBody ApprovePassTaskVo vo) { + flowTaskWrapperService.approvePass(vo); + return InvokeResultBuilder.success(); + } + + @ApiOperation("审核拒绝") + @PostMapping("/approve/refuse") + public InvokeResult approveRefuse(@Valid @RequestBody ApproveRefuseTaskVo vo) { + flowTaskWrapperService.approveRefuse(vo); + return InvokeResultBuilder.success(); + } + + @ApiOperation("撤回") + @PostMapping("/undo") + public InvokeResult undo(@Valid @RequestBody UndoTaskVo vo) { + flowTaskWrapperService.undo(vo); + return InvokeResultBuilder.success(); + } + + @ApiOperation("反对") + @PostMapping("/reject") + public InvokeResult reject(@Valid @RequestBody RejectTaskVo vo) { + flowTaskWrapperService.reject(vo); + return InvokeResultBuilder.success(); + } + + @ApiOperation("终止") + @PostMapping("/termination") + public InvokeResult termination(@NotNull(message = "流程实例ID不能为空!") Long instanceId) { + flowTaskWrapperService.termination(instanceId); + return InvokeResultBuilder.success(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowInstanceExtDto.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowInstanceExtDto.java new file mode 100644 index 0000000..db180e4 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowInstanceExtDto.java @@ -0,0 +1,21 @@ +package com.lframework.starter.bpm.dto; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class FlowInstanceExtDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 业务类型 + */ + private String bizType; + + /** + * 业务标识 + */ + private String bizFlag; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowTaskDto.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowTaskDto.java new file mode 100644 index 0000000..927034d --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/dto/FlowTaskDto.java @@ -0,0 +1,92 @@ +package com.lframework.starter.bpm.dto; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class FlowTaskDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务ID + */ + private Long taskId; + + /** + * 任务标题 + */ + private String title; + + /** + * 业务ID + */ + private String businessId; + + /** + * 节点编号 + */ + private String nodeCode; + + /** + * 节点名称 + */ + private String nodeName; + + /** + * 节点类型 + */ + private Integer nodeType; + + /** + * 流程状态 + */ + private String flowStatus; + + /** + * 流程定义ID + */ + private Long flowId; + + /** + * 流程定义编号 + */ + private String flowCode; + + /** + * 流程定义名称 + */ + private String flowName; + + /** + * 流程定义分类ID + */ + private String categoryId; + + /** + * 流程实例ID + */ + private Long instanceId; + + /** + * 流程实例扩展字段 + */ + private String ext; + + /** + * 流程发起人ID + */ + private String startById; + + /** + * 流程发起时间 + */ + private LocalDateTime startTime; + + /** + * 流程结束时间 + */ + private LocalDateTime endTime; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCategory.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCategory.java new file mode 100644 index 0000000..fa730ee --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCategory.java @@ -0,0 +1,29 @@ +package com.lframework.starter.bpm.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.io.Serializable; +import lombok.Data; + +@Data +@TableName("flow_cu_category") +public class FlowCategory extends BaseEntity implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "FlowCategory"; + + /** + * 主键 + */ + private String id; + /** + * 流程类型名称 + */ + private String name; + /** + * 父节点ID + */ + private String parentId; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuApproveHis.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuApproveHis.java new file mode 100644 index 0000000..6e5f1ee --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuApproveHis.java @@ -0,0 +1,76 @@ +package com.lframework.starter.bpm.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.bpm.enums.FlowSkipType; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +@TableName("flow_cu_approve_his") +public class FlowCuApproveHis extends BaseEntity implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 流程定义ID + */ + private Long definitionId; + + /** + * 流程实例ID + */ + private Long instanceId; + + /** + * 节点编码 + */ + private String nodeCode; + + /** + * 节点名称 + */ + private String nodeName; + + /** + * 任务ID + */ + private Long taskId; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 说明 + */ + private String message; + + /** + * 审批类型 + */ + private FlowSkipType skipType; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuInstance.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuInstance.java new file mode 100644 index 0000000..38a1bc8 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowCuInstance.java @@ -0,0 +1,41 @@ +package com.lframework.starter.bpm.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +@TableName("flow_cu_instance") +public class FlowCuInstance extends BaseEntity implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + /** + * 标题 + */ + private String title; + /** + * 业务类型 + */ + private String bizType; + + /** + * 业务标识 + */ + private String bizFlag; + /** + * 发起时间 + */ + private LocalDateTime startTime; + /** + * 结束时间 + */ + private LocalDateTime endTime; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java new file mode 100644 index 0000000..4ca7d3c --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java @@ -0,0 +1,98 @@ +package com.lframework.starter.bpm.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.bpm.enums.FlowDefinitionActivityStatus; +import com.lframework.starter.bpm.enums.FlowDefinitionIsPublish; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +@TableName("flow_definition") +public class FlowDefinitionWrapper extends BaseEntity implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 流程编码 + */ + private String flowCode; + + /** + * 流程名称 + */ + private String flowName; + + /** + * 流程类别 + */ + private String category; + + /** + * 流程版本 + */ + private String version; + + /** + * 是否发布(0未开启 1开启) + */ + private FlowDefinitionIsPublish isPublish; + + /** + * 审批表单是否自定义(Y是 2否) + */ + private String formCustom; + + /** + * 审批表单是否自定义(Y是 2否) + */ + private String formPath; + + /** + * 流程激活状态(0挂起 1激活) + */ + private FlowDefinitionActivityStatus activityStatus; + + /** + * 监听器类型 + */ + private String listenerType; + + /** + * 监听器路径 + */ + private String listenerPath; + + /** + * 扩展字段,预留给业务系统使用 + */ + private String ext; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowInstanceWrapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowInstanceWrapper.java new file mode 100644 index 0000000..c2f7289 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowInstanceWrapper.java @@ -0,0 +1,105 @@ +package com.lframework.starter.bpm.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.bpm.enums.FlowDefinitionActivityStatus; +import com.lframework.starter.bpm.enums.FlowInstanceStatus; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +@TableName("flow_instance") +public class FlowInstanceWrapper extends BaseEntity implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 删除标记 + */ + @TableLogic(value = "0", delval = "1") + private String delFlag; + + /** + * 对应flow_definition表的id + */ + private Long definitionId; + + /** + * 业务id + */ + private String businessId; + + /** + * 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) + */ + private Integer nodeType; + + /** + * 流程节点编码 每个流程的nodeCode是唯一的,即definitionId+nodeCode唯一,在数据库层面做了控制 + */ + private String nodeCode; + + /** + * 流程节点名称 + */ + private String nodeName; + + /** + * 流程变量 + */ + private String variable; + + /** + * 流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回) + */ + private FlowInstanceStatus flowStatus; + + /** + * 流程激活状态(0挂起 1激活) + */ + private FlowDefinitionActivityStatus activityStatus; + + /** + * 创建者 + */ + private String createBy; + + /** + * 流程定义json + */ + private String defJson; + + /** + * 扩展字段,预留给业务系统使用 + */ + private String ext; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowTaskWrapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowTaskWrapper.java new file mode 100644 index 0000000..951faff --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowTaskWrapper.java @@ -0,0 +1,88 @@ +package com.lframework.starter.bpm.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +@TableName("flow_task") +public class FlowTaskWrapper extends BaseEntity implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 删除标记 + */ + @TableLogic(value = "0", delval = "1") + private String delFlag; + + /** + * 对应flow_definition表的id + */ + private Long definitionId; + + /** + * 流程实例表id + */ + private Long instanceId; + + /** + * 节点编码 + */ + private String nodeCode; + + /** + * 节点名称 + */ + private String nodeName; + + /** + * 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) + */ + private Integer nodeType; + + /** + * 流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回) + */ + private String flowStatus; + + /** + * 审批表单是否自定义(Y是 2否) + */ + private String formCustom; + + /** + * 审批表单 + */ + private String formPath; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowCooperateType.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowCooperateType.java new file mode 100644 index 0000000..ba7b5de --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowCooperateType.java @@ -0,0 +1,34 @@ +package com.lframework.starter.bpm.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum FlowCooperateType implements BaseEnum { + NORMAL(0, "或签"), + ALL(1, "会签"), + VOTE(2, "票签") + ; + + @EnumValue + private final Integer code; + + private final String desc; + + FlowCooperateType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionActivityStatus.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionActivityStatus.java new file mode 100644 index 0000000..06e3b41 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionActivityStatus.java @@ -0,0 +1,31 @@ +package com.lframework.starter.bpm.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum FlowDefinitionActivityStatus implements BaseEnum { + ACTIVATE(1, "已激活"), DEACTIVATE(0, "已挂起"); + + @EnumValue + private final Integer code; + + private final String desc; + + FlowDefinitionActivityStatus(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionExtBizType.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionExtBizType.java new file mode 100644 index 0000000..7f3710e --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionExtBizType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.bpm.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum FlowDefinitionExtBizType implements BaseEnum { + SYSTEM("system", "系统内部功能"); + + @EnumValue + private final String code; + + private final String desc; + + FlowDefinitionExtBizType(String code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public String getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionIsPublish.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionIsPublish.java new file mode 100644 index 0000000..2b1bc65 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowDefinitionIsPublish.java @@ -0,0 +1,31 @@ +package com.lframework.starter.bpm.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum FlowDefinitionIsPublish implements BaseEnum { + Y(1, "已发布"), N(0, "未发布"), UNABLE(9, "失效"); + + @EnumValue + private final Integer code; + + private final String desc; + + FlowDefinitionIsPublish(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowInstanceStatus.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowInstanceStatus.java new file mode 100644 index 0000000..c9c3724 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowInstanceStatus.java @@ -0,0 +1,40 @@ +package com.lframework.starter.bpm.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum FlowInstanceStatus implements BaseEnum { + CREATE("0", "待提交"), + APPROVING("1", "审核中"), + APPROVE_PASS("2", "审核通过"), + TERMINATION("4", "已终止"), + CANCEL("5", "已作废"), + UNDO("6", "已撤回"), + FINISH("8", "已完成"), + REFUSE("9", "已退回"), + INVALID("10", "已失效"), + REVOKE("11", "已驳回"); + + @EnumValue + private final String code; + + private final String desc; + + FlowInstanceStatus(String code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public String getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowNodeType.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowNodeType.java new file mode 100644 index 0000000..e19daa6 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowNodeType.java @@ -0,0 +1,36 @@ +package com.lframework.starter.bpm.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum FlowNodeType implements BaseEnum { + START(0, "开始节点"), + TASK(1, "中间节点"), + END(2, "结束节点"), + EXCLUSIVE_GATEWAY(3, "互斥网关"), + PARALLEL_GATEWAY(4, "并行网关"); + + + @EnumValue + private final Integer code; + + private final String desc; + + FlowNodeType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowSkipType.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowSkipType.java new file mode 100644 index 0000000..c74aca3 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/enums/FlowSkipType.java @@ -0,0 +1,36 @@ +package com.lframework.starter.bpm.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum FlowSkipType implements BaseEnum { + START(0, "发起"), + APPROVE_PASS(1, "通过"), + APPROVE_REFUSE(2, "退回"), + UNDO(3, "撤回"), + REJECT(4, "反对"), + TERMINATION(5, "终止"); + + @EnumValue + private final Integer code; + + private final String desc; + + FlowSkipType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmChartExtService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmChartExtService.java new file mode 100644 index 0000000..168ee49 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmChartExtService.java @@ -0,0 +1,62 @@ +package com.lframework.starter.bpm.handlers; + +import com.lframework.starter.bpm.entity.FlowCuInstance; +import com.lframework.starter.bpm.service.FlowCuInstanceService; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.utils.RequestUtil; +import java.util.List; +import java.util.Map; +import org.dromara.warm.flow.core.dto.DefJson; +import org.dromara.warm.flow.core.dto.PromptContent; +import org.dromara.warm.flow.ui.service.ChartExtService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class BpmChartExtService implements ChartExtService { + + @Autowired + private FlowCuInstanceService flowCuInstanceService; + + @Override + public void execute(DefJson defJson) { + String uri = RequestUtil.getRequest().getRequestURI(); + String instanceId = uri.substring(uri.lastIndexOf("/") + 1); + FlowCuInstance cuInstance = flowCuInstanceService.getById(instanceId); + defJson.setTopText(cuInstance.getTitle()); + + defJson.getNodeList().forEach(nodeJson -> { + Map extMap = nodeJson.getExtMap(); + if (CollectionUtil.isNotEmpty(extMap) && extMap.containsKey("handleInfos")) { + List> handleInfos = (List>) extMap.get( + "handleInfos"); + + for (int i = 0; i < handleInfos.size(); i++) { + Map handleInfo = handleInfos.get(i); + + PromptContent.InfoItem item = new PromptContent.InfoItem(); + item.setPrefix("处理人" + (handleInfos.size() > 1 ? (i + 1) : "") + ": "); + item.setContent((String) handleInfo.get("createBy")); + nodeJson.getPromptContent().getInfo().add(item); + + item = new PromptContent.InfoItem(); + item.setPrefix("处理方式: "); + item.setContent((String) handleInfo.get("skipType")); + nodeJson.getPromptContent().getInfo().add(item); + + item = new PromptContent.InfoItem(); + item.setPrefix("处理时间: "); + item.setContent((String) handleInfo.get("createTime")); + nodeJson.getPromptContent().getInfo().add(item); + + if (handleInfo.containsKey("message")) { + item = new PromptContent.InfoItem(); + item.setPrefix("说明: "); + item.setContent((String) handleInfo.get("message")); + nodeJson.getPromptContent().getInfo().add(item); + } + } + } + }); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmDataFillHandler.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmDataFillHandler.java new file mode 100644 index 0000000..fd6dade --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmDataFillHandler.java @@ -0,0 +1,20 @@ +package com.lframework.starter.bpm.handlers; + +import com.lframework.starter.web.core.utils.IdUtil; +import java.util.Objects; +import org.dromara.warm.flow.core.entity.RootEntity; +import org.dromara.warm.flow.core.handler.DataFillHandler; +import org.dromara.warm.flow.core.utils.ObjectUtil; + +public class BpmDataFillHandler implements DataFillHandler { + + @Override + public void idFill(Object object) { + RootEntity entity = (RootEntity) object; + if (ObjectUtil.isNotNull(entity)) { + if (Objects.isNull(entity.getId())) { + entity.setId(IdUtil.getIdLong()); + } + } + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmHandlerSelectService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmHandlerSelectService.java new file mode 100644 index 0000000..72ee1a3 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmHandlerSelectService.java @@ -0,0 +1,229 @@ +package com.lframework.starter.bpm.handlers; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.inner.service.system.SysDeptService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.dromara.warm.flow.core.utils.CollUtil; +import org.dromara.warm.flow.ui.dto.HandlerFunDto; +import org.dromara.warm.flow.ui.dto.HandlerQuery; +import org.dromara.warm.flow.ui.dto.TreeFunDto; +import org.dromara.warm.flow.ui.service.HandlerSelectService; +import org.dromara.warm.flow.ui.vo.HandlerFeedBackVo; +import org.dromara.warm.flow.ui.vo.HandlerSelectVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class BpmHandlerSelectService implements HandlerSelectService { + + @Autowired + private SysRoleService sysRoleService; + + @Autowired + private SysDeptService sysDeptService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private SysUserDeptService sysUserDeptService; + + @Override + public List getHandlerType() { + return Arrays.asList("用户", "角色", "部门"); + } + + @Override + public HandlerSelectVo getHandlerSelect(HandlerQuery handlerQuery) { + if ("角色".equals(handlerQuery.getHandlerType())) { + return getRole(handlerQuery); + } + + if ("部门".equals(handlerQuery.getHandlerType())) { + return getDept(handlerQuery); + } + + if ("用户".equals(handlerQuery.getHandlerType())) { + return getUser(handlerQuery); + } + + return new HandlerSelectVo(); + } + + @Override + public List handlerFeedback(List storageIds) { + List handlerFeedBackVos = new ArrayList<>(); + if (CollUtil.isEmpty(storageIds)) { + return handlerFeedBackVos; + } + + for (String storageId : storageIds) { + if (storageId.startsWith("role:")) { + String tmpId = storageId.substring(5); + SysRole role = sysRoleService.findById(tmpId); + + handlerFeedBackVos.add(new HandlerFeedBackVo(storageId, role.getName())); + } else if (storageId.startsWith("dept:")) { + String tmpId = storageId.substring(5); + SysDept dept = sysDeptService.findById(tmpId); + handlerFeedBackVos.add(new HandlerFeedBackVo(storageId, dept.getName())); + } else { + String tmpId = storageId; + SysUser user = sysUserService.findById(tmpId); + handlerFeedBackVos.add(new HandlerFeedBackVo(storageId, user.getName())); + } + } + return handlerFeedBackVos; + } + + /** + * 获取角色列表 + * + * @param query 查询条件 + * @return HandlerSelectVo + */ + private HandlerSelectVo getRole(HandlerQuery query) { + // 查询角色列表 + LocalDateTime begTime = StringUtil.isBlank(query.getBeginTime()) ? null + : DateUtil.toLocalDateTime(DateUtil.parseDate(query.getBeginTime())); + LocalDateTime endTime = StringUtil.isBlank(query.getEndTime()) ? null + : DateUtil.toLocalDateTimeMax(DateUtil.parseDate(query.getEndTime())); + Wrapper queryWrapper = Wrappers.lambdaQuery(SysRole.class) + .eq(StringUtil.isNotBlank(query.getHandlerCode()), SysRole::getCode, query.getHandlerCode()) + .eq(SysRole::getAvailable, Boolean.TRUE) + .like(StringUtil.isNotBlank(query.getHandlerName()), SysRole::getName, + query.getHandlerName()) + .ge(begTime != null, SysRole::getCreateTime, begTime) + .le(endTime != null, SysRole::getCreateTime, endTime) + .orderByAsc(SysRole::getCode); + PageHelperUtil.startPage(query.getPageNum(), query.getPageSize()); + List roleList = sysRoleService.list(queryWrapper); + PageResult pageResult = PageResultUtil.convert(new PageInfo<>(roleList)); + long total = pageResult.getTotalCount(); + + // 业务系统数据,转成组件内部能够显示的数据, total是业务数据总数,用于分页显示 + HandlerFunDto handlerFunDto = new HandlerFunDto<>(roleList, total) + // 以下设置获取内置变量的Function + .setStorageId(role -> "role:" + role.getId()) // 前面拼接role: 是为了防止用户、角色的主键重复 + .setHandlerCode(SysRole::getCode) // 权限编码 + .setHandlerName(SysRole::getName) // 权限名称 + .setCreateTime(role -> DateUtil.formatDateTime(role.getCreateTime())); + + return getHandlerSelectVo(handlerFunDto); + } + + /** + * 获取部门列表 + * + * @param query 查询条件 + * @return HandlerSelectVo + */ + private HandlerSelectVo getDept(HandlerQuery query) { + // 查询部门列表 + LocalDateTime begTime = StringUtil.isBlank(query.getBeginTime()) ? null + : DateUtil.toLocalDateTime(DateUtil.parseDate(query.getBeginTime())); + LocalDateTime endTime = StringUtil.isBlank(query.getEndTime()) ? null + : DateUtil.toLocalDateTimeMax(DateUtil.parseDate(query.getEndTime())); + Wrapper queryWrapper = Wrappers.lambdaQuery(SysDept.class) + .eq(StringUtil.isNotBlank(query.getHandlerCode()), SysDept::getCode, query.getHandlerCode()) + .eq(SysDept::getAvailable, Boolean.TRUE) + .like(StringUtil.isNotBlank(query.getHandlerName()), SysDept::getName, + query.getHandlerName()) + .ge(begTime != null, SysDept::getCreateTime, begTime) + .le(endTime != null, SysDept::getCreateTime, endTime) + .orderByAsc(SysDept::getCode); + PageHelperUtil.startPage(query.getPageNum(), query.getPageSize()); + List deptList = sysDeptService.list(queryWrapper); + PageResult pageResult = PageResultUtil.convert(new PageInfo<>(deptList)); + long total = pageResult.getTotalCount(); + + // 业务系统数据,转成组件内部能够显示的数据, total是业务数据总数,用于分页显示 + HandlerFunDto handlerFunDto = new HandlerFunDto<>(deptList, total) + .setStorageId(dept -> "dept:" + dept.getId()) // 前面拼接dept: 是为了防止用户、部门的主键重复 + .setHandlerCode(SysDept::getCode) + .setHandlerName(SysDept::getName) // 权限名称 + .setCreateTime(dept -> DateUtil.formatDateTime(dept.getCreateTime())); + + return getHandlerSelectVo(handlerFunDto); + } + + /** + * 获取用户列表, 同时构建左侧部门树状结构 + * + * @param query 查询条件 + * @return HandlerSelectVo + */ + private HandlerSelectVo getUser(HandlerQuery query) { + // 查询用户列表 + LocalDateTime begTime = StringUtil.isBlank(query.getBeginTime()) ? null + : DateUtil.toLocalDateTime(DateUtil.parseDate(query.getBeginTime())); + LocalDateTime endTime = StringUtil.isBlank(query.getEndTime()) ? null + : DateUtil.toLocalDateTimeMax(DateUtil.parseDate(query.getEndTime())); + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUser.class) + .eq(StringUtil.isNotBlank(query.getHandlerCode()), SysUser::getCode, query.getHandlerCode()) + .eq(SysUser::getAvailable, Boolean.TRUE) + .like(StringUtil.isNotBlank(query.getHandlerName()), SysUser::getName, + query.getHandlerName()) + .ge(begTime != null, SysUser::getCreateTime, begTime) + .le(endTime != null, SysUser::getCreateTime, endTime) + .inSql(StringUtil.isNotBlank(query.getGroupId()), SysUser::getId, + "SELECT user_id FROM sys_user_dept WHERE dept_id = " + query.getGroupId()) + .orderByAsc(SysUser::getCode); + PageHelperUtil.startPage(query.getPageNum(), query.getPageSize()); + List userList = sysUserService.list(queryWrapper); + PageResult pageResult = PageResultUtil.convert(new PageInfo<>(userList)); + long total = pageResult.getTotalCount(); + + // 查询部门列表,构建树状结构 + Wrapper queryDeptWrapper = Wrappers.lambdaQuery(SysDept.class) + .eq(SysDept::getAvailable, Boolean.TRUE) + .orderByAsc(SysDept::getCode); + List deptList = sysDeptService.list(queryDeptWrapper); + + // 业务系统数据,转成组件内部能够显示的数据, total是业务数据总数,用于分页显示 + HandlerFunDto handlerFunDto = new HandlerFunDto<>(userList, total) + .setStorageId(SysUser::getId) + .setHandlerCode(SysUser::getUsername) // 权限编码 + .setHandlerName(SysUser::getName) // 权限名称 + .setCreateTime(user -> DateUtil.formatDateTime(user.getCreateTime())) + .setGroupName(user -> { + + List userDeptList = sysUserDeptService.getByUserId(user.getId()); + Set deptNameList = userDeptList.stream().map(userDept -> { + SysDept dept = sysDeptService.findById(userDept.getDeptId()); + + return dept.getName(); + }).collect(Collectors.toSet()); + + return StringUtil.join(StringPool.STR_SPLIT_CN, deptNameList); + }); + + // 业务系统机构,转成组件内部左侧树列表能够显示的数据 + TreeFunDto treeFunDto = new TreeFunDto<>(deptList) + .setId(SysDept::getId) // 左侧树ID + .setName(SysDept::getName) // 左侧树名称 + .setParentId(SysDept::getParentId); // 左侧树父级ID + + return getHandlerSelectVo(handlerFunDto, treeFunDto); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmPermissionHandler.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmPermissionHandler.java new file mode 100644 index 0000000..4dcce9c --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/BpmPermissionHandler.java @@ -0,0 +1,69 @@ +package com.lframework.starter.bpm.handlers; + +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import org.dromara.warm.flow.core.handler.PermissionHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class BpmPermissionHandler implements PermissionHandler { + + @Autowired + private SysUserRoleService sysUserRoleService; + + @Autowired + private SysUserDeptService sysUserDeptService; + + @Override + public List permissions() { + AbstractUserDetails currentUser = SecurityUtil.getCurrentUser(); + List userRoleList = sysUserRoleService.getByUserId(currentUser.getId()); + + List userDeptList = sysUserDeptService.getByUserId(currentUser.getId()); + + List permissions = new ArrayList<>(); + permissions.add(currentUser.getId()); + permissions.addAll( + userRoleList.stream().map(t -> "role:" + t.getRoleId()).collect(Collectors.toSet())); + permissions.addAll( + userDeptList.stream().map(t -> "dept:" + t.getDeptId()).collect(Collectors.toSet())); + + return permissions; + } + + @Override + public String getHandler() { + AbstractUserDetails currentUser = SecurityUtil.getCurrentUser(); + return currentUser == null ? null : currentUser.getId(); + } + + @Override + public List convertPermissions(List permissions) { + + List results = new ArrayList<>(); + for (String permission : permissions) { + if (permission.startsWith("role:")) { + String tmpId = permission.substring(5); + List userRoleList = sysUserRoleService.getByRoleId(tmpId); + results.addAll( + userRoleList.stream().map(SysUserRole::getUserId).collect(Collectors.toSet())); + } else if (permission.startsWith("dept:")) { + String tmpId = permission.substring(5); + List userDeptList = sysUserDeptService.getByDeptId(tmpId); + results.addAll( + userDeptList.stream().map(SysUserDept::getUserId).collect(Collectors.toSet())); + } else { + results.add(permission); + } + } + return results; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/exception/FlowExceptionConverter.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/exception/FlowExceptionConverter.java new file mode 100644 index 0000000..ede424e --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/handlers/exception/FlowExceptionConverter.java @@ -0,0 +1,19 @@ +package com.lframework.starter.bpm.handlers.exception; + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import org.dromara.warm.flow.core.exception.FlowException; + +public class FlowExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof FlowException; + } + + @Override + public BaseException convert(Throwable e) { + return new DefaultClientException(e.getMessage()); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCategoryServiceImpl.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCategoryServiceImpl.java new file mode 100644 index 0000000..34a494f --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCategoryServiceImpl.java @@ -0,0 +1,58 @@ +package com.lframework.starter.bpm.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.mappers.FlowCategoryMapper; +import com.lframework.starter.bpm.service.FlowCategoryService; +import com.lframework.starter.bpm.vo.flow.category.CreateFlowCategoryVo; +import com.lframework.starter.bpm.vo.flow.category.UpdateFlowCategoryVo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.io.Serializable; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class FlowCategoryServiceImpl extends + BaseMpServiceImpl implements + FlowCategoryService { + + @Cacheable(value = FlowCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public FlowCategory findById(String id) { + return getById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateFlowCategoryVo vo) { + FlowCategory record = new FlowCategory(); + record.setName(vo.getName()); + if (!StringUtil.isEmpty(vo.getParentId())) { + record.setParentId(vo.getParentId()); + } else { + record.setParentId(StringPool.EMPTY_STR); + } + this.save(record); + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateFlowCategoryVo vo) { + Wrapper updateWrapper = Wrappers.lambdaUpdate(FlowCategory.class) + .set(FlowCategory::getName, vo.getName()) + .eq(FlowCategory::getId, vo.getId()); + this.update(updateWrapper); + } + + @CacheEvict(value = FlowCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuApproveHisServiceImpl.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuApproveHisServiceImpl.java new file mode 100644 index 0000000..58ecfc8 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuApproveHisServiceImpl.java @@ -0,0 +1,14 @@ +package com.lframework.starter.bpm.impl; + +import com.lframework.starter.bpm.entity.FlowCuApproveHis; +import com.lframework.starter.bpm.mappers.FlowCuApproveHisMapper; +import com.lframework.starter.bpm.service.FlowCuApproveHisService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class FlowCuApproveHisServiceImpl extends + BaseMpServiceImpl implements + FlowCuApproveHisService { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuInstanceServiceImpl.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuInstanceServiceImpl.java new file mode 100644 index 0000000..75ac082 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowCuInstanceServiceImpl.java @@ -0,0 +1,14 @@ +package com.lframework.starter.bpm.impl; + +import com.lframework.starter.bpm.entity.FlowCuInstance; +import com.lframework.starter.bpm.mappers.FlowCuInstanceMapper; +import com.lframework.starter.bpm.service.FlowCuInstanceService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class FlowCuInstanceServiceImpl extends + BaseMpServiceImpl implements + FlowCuInstanceService { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowDefinitionWrapperServiceImpl.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowDefinitionWrapperServiceImpl.java new file mode 100644 index 0000000..a6b98fd --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowDefinitionWrapperServiceImpl.java @@ -0,0 +1,74 @@ +package com.lframework.starter.bpm.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.mappers.FlowDefinitionWrapperMapper; +import com.lframework.starter.bpm.service.FlowDefinitionWrapperService; +import com.lframework.starter.bpm.vo.flow.definition.FlowDefinitionSelectorVo; +import com.lframework.starter.bpm.vo.flow.definition.UpdateFlowDefinitionVo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import java.util.List; +import org.dromara.warm.flow.core.entity.Definition; +import org.dromara.warm.flow.core.service.DefService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class FlowDefinitionWrapperServiceImpl extends + BaseMpServiceImpl implements + FlowDefinitionWrapperService { + + @Autowired + private DefService defService; + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + FlowDefinitionSelectorVo vo) { + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateFlowDefinitionVo vo) { + Wrapper updateWrapper = Wrappers.lambdaUpdate( + FlowDefinitionWrapper.class) + .eq(FlowDefinitionWrapper::getId, vo.getId()) + .set(FlowDefinitionWrapper::getFlowName, vo.getName()) + .set(FlowDefinitionWrapper::getCategory, vo.getCategoryId()); + + this.update(updateWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void copy(UpdateFlowDefinitionVo vo) { + Definition definition = defService.getById(vo.getId()); + if (definition == null) { + throw new DefaultClientException("流程不存在!"); + } + + defService.copyDef(vo.getId()); + + Wrapper queryWrapper = Wrappers.lambdaQuery(FlowDefinitionWrapper.class) + .eq(FlowDefinitionWrapper::getFlowCode, definition.getFlowCode()) + .orderByDesc(FlowDefinitionWrapper::getCreateTime) + .last("LIMIT 1"); + FlowDefinitionWrapper flowDefinitionWrapper = this.getOne(queryWrapper); + + vo.setId(flowDefinitionWrapper.getId()); + this.update(vo); + + defService.unActive(flowDefinitionWrapper.getId()); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowInstanceWrapperServiceImpl.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowInstanceWrapperServiceImpl.java new file mode 100644 index 0000000..b41e221 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowInstanceWrapperServiceImpl.java @@ -0,0 +1,26 @@ +package com.lframework.starter.bpm.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.bpm.entity.FlowInstanceWrapper; +import com.lframework.starter.bpm.enums.FlowInstanceStatus; +import com.lframework.starter.bpm.mappers.FlowInstanceWrapperMapper; +import com.lframework.starter.bpm.service.FlowInstanceWrapperService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class FlowInstanceWrapperServiceImpl extends + BaseMpServiceImpl implements + FlowInstanceWrapperService { + + @Override + public Boolean canRestart(String businessId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(FlowInstanceWrapper.class) + .eq(FlowInstanceWrapper::getBusinessId, businessId) + .in(FlowInstanceWrapper::getFlowStatus, FlowInstanceStatus.CREATE, + FlowInstanceStatus.APPROVING).last("LIMIT 1"); + + return this.getOne(queryWrapper) == null; + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowTaskWrapperServiceImpl.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowTaskWrapperServiceImpl.java new file mode 100644 index 0000000..739fd65 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/impl/FlowTaskWrapperServiceImpl.java @@ -0,0 +1,190 @@ +package com.lframework.starter.bpm.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.bpm.dto.FlowTaskDto; +import com.lframework.starter.bpm.entity.FlowTaskWrapper; +import com.lframework.starter.bpm.enums.FlowInstanceStatus; +import com.lframework.starter.bpm.mappers.FlowTaskWrapperMapper; +import com.lframework.starter.bpm.service.FlowTaskWrapperService; +import com.lframework.starter.bpm.vo.flow.instance.QueryInstanceListVo; +import com.lframework.starter.bpm.vo.flow.task.ApprovePassTaskVo; +import com.lframework.starter.bpm.vo.flow.task.ApproveRefuseTaskVo; +import com.lframework.starter.bpm.vo.flow.task.QueryMyTaskListVo; +import com.lframework.starter.bpm.vo.flow.task.QueryTodoTaskListVo; +import com.lframework.starter.bpm.vo.flow.task.RejectTaskVo; +import com.lframework.starter.bpm.vo.flow.task.UndoTaskVo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.Objects; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.constant.ExceptionCons; +import org.dromara.warm.flow.core.dto.FlowParams; +import org.dromara.warm.flow.core.entity.HisTask; +import org.dromara.warm.flow.core.entity.Task; +import org.dromara.warm.flow.core.entity.User; +import org.dromara.warm.flow.core.enums.CooperateType; +import org.dromara.warm.flow.core.enums.SkipType; +import org.dromara.warm.flow.core.enums.UserType; +import org.dromara.warm.flow.core.service.TaskService; +import org.dromara.warm.flow.core.utils.CollUtil; +import org.dromara.warm.flow.core.utils.StreamUtils; +import org.dromara.warm.flow.orm.entity.FlowNode; +import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class FlowTaskWrapperServiceImpl extends + BaseMpServiceImpl implements + FlowTaskWrapperService { + + @Autowired + private TaskService taskService; + + @Autowired + private FlowNodeMapper flowNodeMapper; + + @Override + public PageResult queryTodoList(Integer pageIndex, Integer pageSize, + QueryTodoTaskListVo vo) { + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().queryTodoList(vo, + SecurityUtil.getCurrentUser().getId()); + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public PageResult queryMyList(Integer pageIndex, Integer pageSize, + QueryMyTaskListVo vo) { + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().queryMyList(vo, + SecurityUtil.getCurrentUser().getId()); + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public PageResult queryInstanceList(Integer pageIndex, Integer pageSize, + QueryInstanceListVo vo) { + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().queryInstanceList(vo); + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void approvePass(ApprovePassTaskVo vo) { + taskService.pass(vo.getTaskId(), vo.getMessage(), vo.getVariables()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void approveRefuse(ApproveRefuseTaskVo vo) { + FlowParams flowParams = new FlowParams(); + flowParams.message(vo.getMessage()); + flowParams.skipType("REJECT"); + flowParams.flowStatus(FlowInstanceStatus.REFUSE.getCode()); + flowParams.variable(vo.getVariables()); + taskService.termination(vo.getTaskId(), flowParams); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void undo(UndoTaskVo vo) { + FlowParams flowParams = new FlowParams(); + flowParams.message(vo.getMessage()); + flowParams.skipType("REJECT"); + flowParams.flowStatus(FlowInstanceStatus.UNDO.getCode()); + flowParams.variable(vo.getVariables()); + flowParams.ignore(true); + taskService.terminationByInsId(vo.getInstanceId(), flowParams); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void reject(RejectTaskVo vo) { + + Task task = taskService.getById(vo.getTaskId()); + Long definitionId = task.getDefinitionId(); + String nodeCode = task.getNodeCode(); + Wrapper queryWrapper = Wrappers.lambdaQuery(FlowNode.class) + .eq(FlowNode::getDefinitionId, definitionId) + .eq(FlowNode::getNodeCode, nodeCode); + FlowNode flowNode = flowNodeMapper.selectOne(queryWrapper); + if (flowNode == null) { + throw new DefaultClientException("流程节点不存在!"); + } + + BigDecimal nodeRatio = flowNode.getNodeRatio(); + + // 办理人和转办人列表 + List todoList = FlowEngine.userService().listByAssociatedAndTypes(vo.getTaskId() + , UserType.APPROVAL.getKey(), UserType.TRANSFER.getKey(), UserType.DEPUTE.getKey()); + + String currentUserId = SecurityUtil.getCurrentUser().getId(); + // 判断办理人是否有办理权限 + User todoUser = CollUtil.getOne( + StreamUtils.filter(todoList, u -> Objects.equals(u.getProcessedBy(), currentUserId))); + if (ObjectUtil.isNull(todoUser)) { + throw new DefaultClientException(ExceptionCons.NOT_AUTHORITY); + } + + FlowParams terminationParams = new FlowParams(); + terminationParams.message(vo.getMessage()); + terminationParams.skipType("REJECT"); + terminationParams.flowStatus(FlowInstanceStatus.REVOKE.getCode()); + terminationParams.variable(vo.getVariables()); + + // 当只剩一位待办用户时,由当前用户决定走向 + if (todoList.size() == 1) { + taskService.termination(vo.getTaskId(), terminationParams); + return; + } + + // 查询会签票签已办列表 + List doneList = FlowEngine.hisTaskService().listByTaskIdAndCooperateTypes(task.getId() + , CooperateType.isCountersign(nodeRatio) ? CooperateType.COUNTERSIGN.getKey() + : CooperateType.VOTE.getKey()); + doneList = CollUtil.emptyDefault(doneList); + + // 所有人 + BigDecimal all = BigDecimal.ZERO.add(BigDecimal.valueOf(todoList.size())) + .add(BigDecimal.valueOf(doneList.size())); + + List doneRejectList = StreamUtils.filter(doneList + , hisTask -> Objects.equals(hisTask.getSkipType(), SkipType.REJECT.getKey())); + + // 计算驳回率 + BigDecimal rejectRatio = (BigDecimal.ONE) + .add(BigDecimal.valueOf(doneRejectList.size())) + .divide(all, 4, RoundingMode.HALF_UP).multiply(CooperateType.ONE_HUNDRED); + + if (rejectRatio.compareTo(CooperateType.ONE_HUNDRED.subtract(nodeRatio)) > 0) { + taskService.termination(vo.getTaskId(), terminationParams); + return; + } + + taskService.reject(vo.getTaskId(), vo.getMessage(), vo.getVariables()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void termination(Long instanceId) { + FlowParams flowParams = new FlowParams(); + flowParams.skipType("REJECT"); + flowParams.flowStatus(FlowInstanceStatus.TERMINATION.getCode()); + flowParams.ignore(true); + taskService.terminationByInsId(instanceId, flowParams); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmBizListener.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmBizListener.java new file mode 100644 index 0000000..fb59536 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmBizListener.java @@ -0,0 +1,65 @@ +package com.lframework.starter.bpm.listeners; + +import com.lframework.starter.bpm.dto.FlowInstanceExtDto; +import org.dromara.warm.flow.core.listener.ListenerVariable; + +public interface BpmBizListener { + + /** + * 是否匹配 + * + * @param ext + * @return + */ + boolean isMatch(FlowInstanceExtDto ext); + + + /** + * 开始监听器,任务开始办理时执行 + * + * @param ext 业务扩展信息 + * @param listenerVariable 监听器变量 + */ + default void start(FlowInstanceExtDto ext, ListenerVariable listenerVariable) { + } + + /** + * 分派监听器,动态修改代办任务信息 + * + * @param ext 业务扩展信息 + * @param listenerVariable 监听器变量 + */ + default void assignment(FlowInstanceExtDto ext, ListenerVariable listenerVariable) { + } + + /** + * 完成监听器,当前任务完成后执行 + * + * @param ext 业务扩展信息 + * @param listenerVariable 监听器变量 + * @param beforeListenerVariable 任务开始时的监听器变量 + */ + default void finish(FlowInstanceExtDto ext, ListenerVariable listenerVariable, + ListenerVariable beforeListenerVariable) { + } + + /** + * 业务完成监听器,流程完成时执行 + * + * @param businessId + * @param startById + */ + default void businessComplete(ListenerVariable listenerVariable, String businessId, + String startById) { + + } + + /** + * 创建监听器,任务创建时执行 + * + * @param ext 业务扩展信息 + * @param listenerVariable 监听器变量 + */ + default void create(FlowInstanceExtDto ext, ListenerVariable listenerVariable) { + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmGlobalListener.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmGlobalListener.java new file mode 100644 index 0000000..39ab1e0 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/listeners/BpmGlobalListener.java @@ -0,0 +1,374 @@ +package com.lframework.starter.bpm.listeners; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.bpm.dto.FlowInstanceExtDto; +import com.lframework.starter.bpm.entity.FlowCuApproveHis; +import com.lframework.starter.bpm.entity.FlowCuInstance; +import com.lframework.starter.bpm.enums.FlowInstanceStatus; +import com.lframework.starter.bpm.enums.FlowSkipType; +import com.lframework.starter.bpm.service.FlowCuApproveHisService; +import com.lframework.starter.bpm.service.FlowCuInstanceService; +import com.lframework.starter.bpm.transfers.FlowCuInstanceTransfer; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.mq.core.service.MqProducerService; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.inner.dto.message.SysSiteMessageDto; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.service.system.SysUserService; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.dto.DefJson; +import org.dromara.warm.flow.core.dto.FlowCombine; +import org.dromara.warm.flow.core.dto.FlowParams; +import org.dromara.warm.flow.core.dto.NodeJson; +import org.dromara.warm.flow.core.dto.PathWayData; +import org.dromara.warm.flow.core.entity.Node; +import org.dromara.warm.flow.core.enums.CooperateType; +import org.dromara.warm.flow.core.handler.PermissionHandler; +import org.dromara.warm.flow.core.listener.GlobalListener; +import org.dromara.warm.flow.core.listener.ListenerVariable; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class BpmGlobalListener implements GlobalListener { + + private static final ThreadLocal LISTENER_VARIABLE = new ThreadLocal<>(); + + @Autowired + private FlowCuInstanceService flowCuInstanceService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private FlowCuApproveHisService flowCuApproveHisService; + + @Autowired + private PermissionHandler permissionHandler; + + @Autowired + private MqProducerService mqProducerService; + + /** + * 开始监听器,任务开始办理时执行 + * + * @param listenerVariable 监听器变量 + */ + public void start(ListenerVariable listenerVariable) { + log.debug("全局开始监听器开始执行......"); + log.debug(JsonUtil.toJsonPrettyStr(listenerVariable)); + + LISTENER_VARIABLE.set(listenerVariable); + + if (FlowInstanceStatus.REFUSE.getCode() + .equals(listenerVariable.getFlowParams().getFlowStatus())) { + this.addHandleInfo(listenerVariable, FlowSkipType.APPROVE_REFUSE); + } else if (FlowInstanceStatus.UNDO.getCode() + .equals(listenerVariable.getFlowParams().getFlowStatus())) { + this.addHandleInfo(listenerVariable, FlowSkipType.UNDO); + } else if (FlowInstanceStatus.REVOKE.getCode() + .equals(listenerVariable.getFlowParams().getFlowStatus())) { + this.addHandleInfo(listenerVariable, FlowSkipType.REJECT); + } else if (FlowInstanceStatus.TERMINATION.getCode() + .equals(listenerVariable.getFlowParams().getFlowStatus())) { + this.addHandleInfo(listenerVariable, FlowSkipType.TERMINATION); + } else if ("PASS" + .equals(listenerVariable.getFlowParams().getSkipType())) { + if (!"start".equals(listenerVariable.getNode().getNodeCode())) { + this.addHandleInfo(listenerVariable, FlowSkipType.APPROVE_PASS); + } + } else if (CooperateType.isVoteSign(listenerVariable.getNode().getNodeRatio()) + && "REJECT".equals(listenerVariable.getFlowParams().getSkipType())) { + this.addHandleInfo(listenerVariable, FlowSkipType.REJECT); + } + + FlowInstanceExtDto ext = parseExt(listenerVariable); + if (ext == null) { + log.info("扩展字段为空,不监听"); + return; + } + List bizListeners = parseBizListeners(ext); + + for (BpmBizListener bizListener : bizListeners) { + bizListener.start(ext, listenerVariable); + } + + log.debug("全局开始监听器执行结束......"); + } + + /** + * 分派监听器,动态修改代办任务信息 + * + * @param listenerVariable 监听器变量 + */ + public void assignment(ListenerVariable listenerVariable) { + log.debug("全局分派监听器开始执行......"); + log.debug(JsonUtil.toJsonPrettyStr(listenerVariable)); + + if ("start".equals(listenerVariable.getNode().getNodeCode())) { + this.addHandleInfo(listenerVariable, FlowSkipType.START); + } + + FlowInstanceExtDto ext = parseExt(listenerVariable); + if (ext == null) { + log.info("扩展字段为空,不监听"); + return; + } + List bizListeners = parseBizListeners(ext); + + for (BpmBizListener bizListener : bizListeners) { + bizListener.assignment(ext, listenerVariable); + } + + log.debug("全局分派监听器执行结束......"); + } + + /** + * 完成监听器,当前任务完成后执行 + * + * @param listenerVariable 监听器变量 + */ + public void finish(ListenerVariable listenerVariable) { + log.debug("全局完成监听器开始执行......"); + log.debug(JsonUtil.toJsonPrettyStr(listenerVariable)); + + ListenerVariable beforeListenerVariable = LISTENER_VARIABLE.get(); + LISTENER_VARIABLE.remove(); + + LocalDateTime now = LocalDateTime.now(); + if (beforeListenerVariable.getInstance() == null) { + // 这里表示流程实例刚创建完成 + String title = FlowCuInstanceTransfer.getTitle(); + FlowCuInstanceTransfer.clearTitle(); + if (StringUtil.isBlank(title)) { + // 设置默认标题 + SysUser createBy = sysUserService.findById(listenerVariable.getInstance().getCreateBy()); + title = StringUtil.format("{}在{}发起的{}", createBy.getName(), + DateUtil.formatDateTime(now, "yyyy年MM月dd日HH时mm分ss秒"), + listenerVariable.getDefinition().getFlowName()); + } + FlowCuInstance flowCuInstance = new FlowCuInstance(); + flowCuInstance.setId(listenerVariable.getInstance().getId()); + flowCuInstance.setTitle(title); + flowCuInstance.setStartTime( + DateUtil.toLocalDateTime(listenerVariable.getInstance().getCreateTime())); + + FlowInstanceExtDto ext = parseExt(listenerVariable); + if (ext != null) { + flowCuInstance.setBizType(ext.getBizType()); + flowCuInstance.setBizFlag(ext.getBizFlag()); + } + flowCuInstanceService.save(flowCuInstance); + } + + FlowParams flowParams = beforeListenerVariable.getFlowParams(); + if ("PASS".equals(flowParams.getSkipType()) && FlowInstanceStatus.APPROVING.getCode() + .equals(listenerVariable.getInstance().getFlowStatus())) { + FlowCombine flowCombine = FlowEngine.defService() + .getFlowCombineNoDef(listenerVariable.getDefinition().getId()); + // 获取后续任务节点结合 + PathWayData pathWayData = new PathWayData().setInsId(listenerVariable.getInstance().getId()) + .setSkipType(flowParams.getSkipType()); + Node nextNode = FlowEngine.nodeService() + .getNextNode(listenerVariable.getNode(), flowParams.getNodeCode() + , flowParams.getSkipType(), pathWayData, flowCombine); + List nextNodes = FlowEngine.nodeService().getNextByCheckGateway(flowParams.getVariable() + , nextNode, pathWayData, flowCombine); + + if (CollectionUtil.isNotEmpty(nextNodes)) { + for (Node node : nextNodes) { + if (StringUtil.isBlank(node.getPermissionFlag())) { + continue; + } + List permissionFlagList = new ArrayList<>( + Arrays.asList(node.getPermissionFlag().split("@@"))); + + FlowCuInstance cuInstance = flowCuInstanceService.getById( + listenerVariable.getInstance().getId()); + SysUser startBy = sysUserService.findById(listenerVariable.getInstance().getCreateBy()); + List notifyUserIds = permissionHandler.convertPermissions(permissionFlagList); + SysSiteMessageDto siteMessageDto = new SysSiteMessageDto(); + siteMessageDto.setUserIdList( + notifyUserIds.stream().distinct().collect(Collectors.toList())); + siteMessageDto.setTitle("【" + node.getNodeName() + "】新的待审核流程"); + siteMessageDto.setContent( + StringUtil.format( + "您有待审核流程需要处理,请及时处理。流程标题:{},发起人:{},发起时间:{}。", + cuInstance.getTitle(), startBy.getName(), DateUtil.formatDateTime( + DateUtil.toLocalDateTime(listenerVariable.getInstance().getCreateTime()), + "yyyy年MM月dd日HH时mm分ss秒"))); + siteMessageDto.setBizKey(String.valueOf(listenerVariable.getInstance().getId())); + siteMessageDto.setCreateUserId(SecurityUtil.getCurrentUser().getId()); + + mqProducerService.createSysSiteMessage(siteMessageDto); + } + } + } + + if ("end".equals(listenerVariable.getInstance().getNodeCode())) { + this.endInstance(listenerVariable.getInstance().getId(), now); + } + + FlowInstanceExtDto ext = parseExt(listenerVariable); + if (ext == null) { + log.info("扩展字段为空,不监听"); + return; + } + List bizListeners = parseBizListeners(ext); + + for (BpmBizListener bizListener : bizListeners) { + bizListener.finish(ext, listenerVariable, beforeListenerVariable); + } + + // 这里单独把完成流程通知一下 + if ("end".equals(listenerVariable.getInstance().getNodeCode())) { + if (FlowInstanceStatus.FINISH.getCode() + .equals(listenerVariable.getInstance().getFlowStatus())) { + // 这里是完成了流程 + for (BpmBizListener bizListener : bizListeners) { + // 这里不用获取当前审核人,因为当前登录人就是审核人 + bizListener.businessComplete(listenerVariable, + listenerVariable.getInstance().getBusinessId(), + listenerVariable.getInstance().getCreateBy()); + } + } + } + + log.debug("全局完成监听器执行结束......"); + } + + /** + * 创建监听器,任务创建时执行 + * + * @param listenerVariable 监听器变量 + */ + public void create(ListenerVariable listenerVariable) { + log.debug("全局创建监听器开始执行......"); + log.debug(JsonUtil.toJsonPrettyStr(listenerVariable)); + + FlowInstanceExtDto ext = parseExt(listenerVariable); + if (ext == null) { + log.info("扩展字段为空,不监听"); + return; + } + List bizListeners = parseBizListeners(ext); + + for (BpmBizListener bizListener : bizListeners) { + bizListener.create(ext, listenerVariable); + } + + log.debug("全局创建监听器执行结束......"); + } + + private FlowInstanceExtDto parseExt(ListenerVariable listenerVariable) { + if (listenerVariable == null) { + return null; + } + if (listenerVariable.getInstance() == null) { + return null; + } + if (StringUtil.isBlank(listenerVariable.getInstance().getExt())) { + return null; + } + return JsonUtil.parseObject(listenerVariable.getInstance().getExt(), FlowInstanceExtDto.class); + } + + private List parseBizListeners(FlowInstanceExtDto ext) { + + Map bizListeners = ApplicationUtil.getBeansOfType(BpmBizListener.class); + + return bizListeners.values().stream().filter(bizListener -> bizListener.isMatch(ext)).collect( + Collectors.toList()); + } + + private void addHandleInfo(ListenerVariable listenerVariable, FlowSkipType skipType) { + + LocalDateTime now = LocalDateTime.now(); + String defJsonStr = listenerVariable.getInstance().getDefJson(); + + if (StringUtil.isNotBlank(defJsonStr)) { + DefJson defJson = FlowEngine.jsonConvert.strToBean(defJsonStr, DefJson.class); + for (NodeJson nodeJson : defJson.getNodeList()) { + if (nodeJson.getNodeCode().equals(listenerVariable.getNode().getNodeCode())) { + List> handleInfos = (List>) nodeJson.getExtMap() + .get("handleInfos"); + if (handleInfos == null) { + handleInfos = new ArrayList<>(); + nodeJson.getExtMap().put("handleInfos", new ArrayList<>()); + } + String userId = listenerVariable.getFlowParams().getHandler(); + SysUser sysUser = sysUserService.findById(userId); + + FlowCuApproveHis approveHis = new FlowCuApproveHis(); + approveHis.setId(IdUtil.getIdLong()); + approveHis.setDefinitionId(listenerVariable.getDefinition().getId()); + approveHis.setInstanceId(listenerVariable.getInstance().getId()); + approveHis.setNodeCode(nodeJson.getNodeCode()); + approveHis.setNodeName(nodeJson.getNodeName()); + approveHis.setTaskId( + listenerVariable.getTask() == null ? null : listenerVariable.getTask().getId()); + + Map handleInfo = new LinkedHashMap<>(); + if (sysUser != null && StringUtil.isNotEmpty(sysUser.getName())) { + approveHis.setCreateById(sysUser.getId()); + approveHis.setCreateBy(sysUser.getName()); + + handleInfo.put("createById", sysUser.getId()); + handleInfo.put("createBy", sysUser.getName()); + + if (listenerVariable.getFlowParams() != null && StringUtil.isNotBlank( + listenerVariable.getFlowParams().getMessage())) { + approveHis.setMessage(listenerVariable.getFlowParams().getMessage()); + + handleInfo.put("message", approveHis.getMessage()); + } + } + approveHis.setSkipType(skipType); + + handleInfo.put("skipType", skipType.getDesc()); + + approveHis.setCreateTime(now); + handleInfo.put("createTime", + DateUtil.formatDateTime(approveHis.getCreateTime(), "yyyy年MM月dd日HH时mm分ss秒")); + + flowCuApproveHisService.save(approveHis); + + handleInfos.add(handleInfo); + + nodeJson.getExtMap().put("handleInfos", handleInfos); + } + } + listenerVariable.getInstance().setDefJson(FlowEngine.jsonConvert.objToStr(defJson)); + + FlowEngine.insService().updateById(listenerVariable.getInstance()); + } + + if (skipType == FlowSkipType.APPROVE_REFUSE || skipType == FlowSkipType.UNDO + || skipType == FlowSkipType.TERMINATION) { + this.endInstance(listenerVariable.getInstance().getId(), now); + } + } + + private void endInstance(Long instanceId, LocalDateTime endTime) { + // 流程结束,记录结束时间 + Wrapper updateWrapper = Wrappers.lambdaUpdate(FlowCuInstance.class) + .set(FlowCuInstance::getEndTime, endTime) + .eq(FlowCuInstance::getId, instanceId); + flowCuInstanceService.update(updateWrapper); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCategoryMapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCategoryMapper.java new file mode 100644 index 0000000..6d33064 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCategoryMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.bpm.mappers; + +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface FlowCategoryMapper extends BaseMapper { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuApproveHisMapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuApproveHisMapper.java new file mode 100644 index 0000000..b4315af --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuApproveHisMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.bpm.mappers; + +import com.lframework.starter.bpm.entity.FlowCuApproveHis; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface FlowCuApproveHisMapper extends BaseMapper { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuInstanceMapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuInstanceMapper.java new file mode 100644 index 0000000..3d0468a --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowCuInstanceMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.bpm.mappers; + +import com.lframework.starter.bpm.entity.FlowCuInstance; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface FlowCuInstanceMapper extends BaseMapper { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowDefinitionWrapperMapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowDefinitionWrapperMapper.java new file mode 100644 index 0000000..68978c1 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowDefinitionWrapperMapper.java @@ -0,0 +1,18 @@ +package com.lframework.starter.bpm.mappers; + +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.vo.flow.definition.FlowDefinitionSelectorVo; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface FlowDefinitionWrapperMapper extends BaseMapper { + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") FlowDefinitionSelectorVo vo); +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowInstanceWrapperMapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowInstanceWrapperMapper.java new file mode 100644 index 0000000..c265ee1 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowInstanceWrapperMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.bpm.mappers; + +import com.lframework.starter.bpm.entity.FlowInstanceWrapper; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface FlowInstanceWrapperMapper extends BaseMapper { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowTaskWrapperMapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowTaskWrapperMapper.java new file mode 100644 index 0000000..01c6920 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/mappers/FlowTaskWrapperMapper.java @@ -0,0 +1,38 @@ +package com.lframework.starter.bpm.mappers; + +import com.lframework.starter.bpm.dto.FlowTaskDto; +import com.lframework.starter.bpm.entity.FlowTaskWrapper; +import com.lframework.starter.bpm.vo.flow.instance.QueryInstanceListVo; +import com.lframework.starter.bpm.vo.flow.task.QueryMyTaskListVo; +import com.lframework.starter.bpm.vo.flow.task.QueryTodoTaskListVo; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface FlowTaskWrapperMapper extends BaseMapper { + + /** + * 查询待办任务列表 + * + * @param vo + * @return + */ + List queryTodoList(@Param("vo") QueryTodoTaskListVo vo, + @Param("userId") String userId); + + /** + * 查询我的发起列表 + * + * @param vo + * @return + */ + List queryMyList(@Param("vo") QueryMyTaskListVo vo, @Param("userId") String userId); + + /** + * 查询流程实例列表 + * + * @param vo + * @return + */ + List queryInstanceList(@Param("vo") QueryInstanceListVo vo); +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCategoryService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCategoryService.java new file mode 100644 index 0000000..5779d11 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCategoryService.java @@ -0,0 +1,33 @@ +package com.lframework.starter.bpm.service; + +import com.lframework.starter.bpm.entity.FlowCategory; +import com.lframework.starter.bpm.vo.flow.category.CreateFlowCategoryVo; +import com.lframework.starter.bpm.vo.flow.category.UpdateFlowCategoryVo; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface FlowCategoryService extends BaseMpService { + + /** + * 根据ID查询 + * + * @param id + * @return + */ + FlowCategory findById(String id); + + /** + * 新增 + * + * @param vo + * @return + */ + String create(CreateFlowCategoryVo vo); + + /** + * 修改 + * + * @param vo + * @return + */ + void update(UpdateFlowCategoryVo vo); +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuApproveHisService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuApproveHisService.java new file mode 100644 index 0000000..80bf0ad --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuApproveHisService.java @@ -0,0 +1,8 @@ +package com.lframework.starter.bpm.service; + +import com.lframework.starter.bpm.entity.FlowCuApproveHis; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface FlowCuApproveHisService extends BaseMpService { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuInstanceService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuInstanceService.java new file mode 100644 index 0000000..91fcbc6 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowCuInstanceService.java @@ -0,0 +1,8 @@ +package com.lframework.starter.bpm.service; + +import com.lframework.starter.bpm.entity.FlowCuInstance; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface FlowCuInstanceService extends BaseMpService { + +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowDefinitionWrapperService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowDefinitionWrapperService.java new file mode 100644 index 0000000..ad13681 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowDefinitionWrapperService.java @@ -0,0 +1,35 @@ +package com.lframework.starter.bpm.service; + +import com.lframework.starter.bpm.entity.FlowDefinitionWrapper; +import com.lframework.starter.bpm.vo.flow.definition.FlowDefinitionSelectorVo; +import com.lframework.starter.bpm.vo.flow.definition.UpdateFlowDefinitionVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface FlowDefinitionWrapperService extends BaseMpService { + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + FlowDefinitionSelectorVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateFlowDefinitionVo vo); + + /** + * 复制 + * + * @param vo + */ + void copy(UpdateFlowDefinitionVo vo); +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowInstanceWrapperService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowInstanceWrapperService.java new file mode 100644 index 0000000..4ad9b69 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowInstanceWrapperService.java @@ -0,0 +1,15 @@ +package com.lframework.starter.bpm.service; + +import com.lframework.starter.bpm.entity.FlowInstanceWrapper; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface FlowInstanceWrapperService extends BaseMpService { + + /** + * 是否可以重新发起 + * + * @param businessId + * @return + */ + Boolean canRestart(String businessId); +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowTaskWrapperService.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowTaskWrapperService.java new file mode 100644 index 0000000..f75b68c --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/service/FlowTaskWrapperService.java @@ -0,0 +1,84 @@ +package com.lframework.starter.bpm.service; + +import com.lframework.starter.bpm.dto.FlowTaskDto; +import com.lframework.starter.bpm.entity.FlowTaskWrapper; +import com.lframework.starter.bpm.vo.flow.instance.QueryInstanceListVo; +import com.lframework.starter.bpm.vo.flow.task.ApprovePassTaskVo; +import com.lframework.starter.bpm.vo.flow.task.ApproveRefuseTaskVo; +import com.lframework.starter.bpm.vo.flow.task.QueryMyTaskListVo; +import com.lframework.starter.bpm.vo.flow.task.QueryTodoTaskListVo; +import com.lframework.starter.bpm.vo.flow.task.RejectTaskVo; +import com.lframework.starter.bpm.vo.flow.task.UndoTaskVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface FlowTaskWrapperService extends BaseMpService { + + /** + * 查询待办任务列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult queryTodoList(Integer pageIndex, Integer pageSize, + QueryTodoTaskListVo vo); + + /** + * 查询我的发起列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult queryMyList(Integer pageIndex, Integer pageSize, + QueryMyTaskListVo vo); + + /** + * 查询流程实例列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult queryInstanceList(Integer pageIndex, Integer pageSize, + QueryInstanceListVo vo); + + /** + * 审核通过 + * + * @param vo + */ + void approvePass(ApprovePassTaskVo vo); + + /** + * 审核拒绝 + * + * @param vo + */ + void approveRefuse(ApproveRefuseTaskVo vo); + + /** + * 撤回 + * + * @param vo + */ + void undo(UndoTaskVo vo); + + /** + * 反对 + * + * @param vo + */ + void reject(RejectTaskVo vo); + + /** + * 终止 + * + * @param instanceId + */ + void termination(Long instanceId); +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/transfers/FlowCuInstanceTransfer.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/transfers/FlowCuInstanceTransfer.java new file mode 100644 index 0000000..b1a198f --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/transfers/FlowCuInstanceTransfer.java @@ -0,0 +1,18 @@ +package com.lframework.starter.bpm.transfers; + +public class FlowCuInstanceTransfer { + + private static final ThreadLocal TITLE_TRANS = new ThreadLocal<>(); + + public static void setTitle(String title) { + TITLE_TRANS.set(title); + } + + public static String getTitle() { + return TITLE_TRANS.get(); + } + + public static void clearTitle() { + TITLE_TRANS.remove(); + } +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/CreateFlowCategoryVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/CreateFlowCategoryVo.java new file mode 100644 index 0000000..e99b036 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/CreateFlowCategoryVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.bpm.vo.flow.category; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CreateFlowCategoryVo implements BaseVo { + + public static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + private String name; + + /** + * 父节点ID + */ + @ApiModelProperty("父节点ID") + private String parentId; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/GetFlowCategoryListVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/GetFlowCategoryListVo.java new file mode 100644 index 0000000..26e810b --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/GetFlowCategoryListVo.java @@ -0,0 +1,9 @@ +package com.lframework.starter.bpm.vo.flow.category; + +import com.lframework.starter.web.core.vo.PageVo; +import java.io.Serializable; + +public class GetFlowCategoryListVo extends PageVo implements Serializable { + + public static final long serialVersionUID = 1L; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/UpdateFlowCategoryVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/UpdateFlowCategoryVo.java new file mode 100644 index 0000000..ee1d872 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/category/UpdateFlowCategoryVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.bpm.vo.flow.category; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class UpdateFlowCategoryVo implements BaseVo, Serializable { + + public static final long serialVersionUID = 1L; + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + private String id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + private String name; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/CreateFlowDefinitionVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/CreateFlowDefinitionVo.java new file mode 100644 index 0000000..421777a --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/CreateFlowDefinitionVo.java @@ -0,0 +1,36 @@ +package com.lframework.starter.bpm.vo.flow.definition; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateFlowDefinitionVo implements BaseVo, Serializable { + + public static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "编号不能为空!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty(value = "分类ID", required = true) + @NotBlank(message = "分类ID不能为空!") + private String categoryId; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/FlowDefinitionSelectorVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/FlowDefinitionSelectorVo.java new file mode 100644 index 0000000..a3f9ba8 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/FlowDefinitionSelectorVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.bpm.vo.flow.definition; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class FlowDefinitionSelectorVo extends PageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String code; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String name; + + /** + * 流程分类ID + */ + @ApiModelProperty("流程分类ID") + private String categoryId; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/QueryFlowDefinitionVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/QueryFlowDefinitionVo.java new file mode 100644 index 0000000..9b37856 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/QueryFlowDefinitionVo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.bpm.vo.flow.definition; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QueryFlowDefinitionVo extends PageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String code; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String name; + + /** + * 流程分类ID + */ + @ApiModelProperty("流程分类ID") + private String categoryId; + + /** + * 版本号 + */ + @ApiModelProperty("版本号") + private String version; + + /** + * 是否发布 + */ + @ApiModelProperty("是否发布") + private Integer isPublish; + + /** + * 激活状态 + */ + @ApiModelProperty("激活状态") + private Integer activityStatus; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionActivityStatusVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionActivityStatusVo.java new file mode 100644 index 0000000..91ccb52 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionActivityStatusVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.bpm.vo.flow.definition; + +import com.lframework.starter.bpm.enums.FlowDefinitionActivityStatus; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class SetFlowDefinitionActivityStatusVo implements BaseVo, Serializable { + + public static final long serialVersionUID = 1L; + + /** + * 流程定义ID + */ + @ApiModelProperty(value = "流程定义ID", required = true) + @NotNull(message = "流程定义ID不能为空!") + private Long id; + + /** + * 激活状态 + */ + @ApiModelProperty(value = "激活状态", required = true) + @NotNull(message = "激活状态不能为空!") + @IsEnum(enumClass = FlowDefinitionActivityStatus.class, message = "激活状态格式不正确!") + private Integer activityStatus; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionPublishVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionPublishVo.java new file mode 100644 index 0000000..1ad9519 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/SetFlowDefinitionPublishVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.bpm.vo.flow.definition; + +import com.lframework.starter.bpm.enums.FlowDefinitionIsPublish; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class SetFlowDefinitionPublishVo implements BaseVo, Serializable { + + public static final long serialVersionUID = 1L; + + /** + * 流程定义ID + */ + @ApiModelProperty(value = "流程定义ID", required = true) + @NotNull(message = "流程定义ID不能为空!") + private Long id; + + /** + * 发布状态 + */ + @ApiModelProperty(value = "发布状态", required = true) + @NotNull(message = "发布状态不能为空!") + @IsEnum(enumClass = FlowDefinitionIsPublish.class, message = "发布状态格式不正确!") + private Integer isPublish; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/UpdateFlowDefinitionVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/UpdateFlowDefinitionVo.java new file mode 100644 index 0000000..3884811 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/definition/UpdateFlowDefinitionVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.bpm.vo.flow.definition; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateFlowDefinitionVo implements BaseVo, Serializable { + + public static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private Long id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty(value = "分类ID", required = true) + @NotBlank(message = "分类ID不能为空!") + private String categoryId; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/instance/QueryInstanceListVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/instance/QueryInstanceListVo.java new file mode 100644 index 0000000..60c3c99 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/instance/QueryInstanceListVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.bpm.vo.flow.instance; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QueryInstanceListVo extends PageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String flowCode; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String flowName; + + /** + * 任务标题 + */ + @ApiModelProperty("任务标题") + private String title; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApprovePassTaskVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApprovePassTaskVo.java new file mode 100644 index 0000000..390bb80 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApprovePassTaskVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.bpm.vo.flow.task; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Map; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class ApprovePassTaskVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务ID + */ + @ApiModelProperty(value = "任务ID", required = true) + @NotNull(message = "任务ID不能为空!") + private Long taskId; + + /** + * 说明 + */ + @ApiModelProperty(value = "说明", required = true) + @NotBlank(message = "说明不能为空!") + private String message; + + /** + * 表单变量 + */ + @ApiModelProperty("表单变量") + private Map variables; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApproveRefuseTaskVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApproveRefuseTaskVo.java new file mode 100644 index 0000000..5c11cb9 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/ApproveRefuseTaskVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.bpm.vo.flow.task; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Map; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class ApproveRefuseTaskVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务ID + */ + @ApiModelProperty(value = "任务ID", required = true) + @NotNull(message = "任务ID不能为空!") + private Long taskId; + + /** + * 说明 + */ + @ApiModelProperty(value = "说明", required = true) + @NotBlank(message = "说明不能为空!") + private String message; + + /** + * 表单变量 + */ + @ApiModelProperty("表单变量") + private Map variables; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryMyTaskListVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryMyTaskListVo.java new file mode 100644 index 0000000..cd3d3e9 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryMyTaskListVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.bpm.vo.flow.task; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QueryMyTaskListVo extends PageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String flowCode; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String flowName; + + /** + * 任务标题 + */ + @ApiModelProperty("任务标题") + private String title; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryTodoTaskListVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryTodoTaskListVo.java new file mode 100644 index 0000000..d8f0dbd --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/QueryTodoTaskListVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.bpm.vo.flow.task; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QueryTodoTaskListVo extends PageVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 流程编号 + */ + @ApiModelProperty("流程编号") + private String flowCode; + + /** + * 流程名称 + */ + @ApiModelProperty("流程名称") + private String flowName; + + /** + * 任务标题 + */ + @ApiModelProperty("任务标题") + private String title; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/RejectTaskVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/RejectTaskVo.java new file mode 100644 index 0000000..425f48b --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/RejectTaskVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.bpm.vo.flow.task; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Map; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class RejectTaskVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务ID + */ + @ApiModelProperty(value = "任务ID", required = true) + @NotNull(message = "任务ID不能为空!") + private Long taskId; + + /** + * 说明 + */ + @ApiModelProperty(value = "说明", required = true) + @NotBlank(message = "说明不能为空!") + private String message; + + /** + * 表单变量 + */ + @ApiModelProperty("表单变量") + private Map variables; +} diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/UndoTaskVo.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/UndoTaskVo.java new file mode 100644 index 0000000..fbd6698 --- /dev/null +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/vo/flow/task/UndoTaskVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.bpm.vo.flow.task; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Map; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UndoTaskVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 流程实例ID + */ + @ApiModelProperty(value = "流程实例ID", required = true) + @NotNull(message = "流程实例ID不能为空!") + private Long instanceId; + + /** + * 说明 + */ + @ApiModelProperty(value = "说明", required = true) + @NotBlank(message = "说明不能为空!") + private String message; + + /** + * 表单变量 + */ + @ApiModelProperty("表单变量") + private Map variables; +} diff --git a/websocket-starter/src/main/java/lombok.config b/bpm-starter/src/main/java/lombok.config similarity index 100% rename from websocket-starter/src/main/java/lombok.config rename to bpm-starter/src/main/java/lombok.config diff --git a/bpm-starter/src/main/resources/META-INF/spring.factories b/bpm-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..8076069 --- /dev/null +++ b/bpm-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.lframework.starter.bpm.config.BpmBeanAutoConfiguration,\ + com.lframework.starter.bpm.config.BpmSwaggerAutoConfiguration \ No newline at end of file diff --git a/bpm-starter/src/main/resources/mappers/FlowDefinitionWrapperMapper.xml b/bpm-starter/src/main/resources/mappers/FlowDefinitionWrapperMapper.xml new file mode 100644 index 0000000..d96a099 --- /dev/null +++ b/bpm-starter/src/main/resources/mappers/FlowDefinitionWrapperMapper.xml @@ -0,0 +1,27 @@ + + + + + + \ No newline at end of file diff --git a/bpm-starter/src/main/resources/mappers/FlowTaskWrapperMapper.xml b/bpm-starter/src/main/resources/mappers/FlowTaskWrapperMapper.xml new file mode 100644 index 0000000..673950f --- /dev/null +++ b/bpm-starter/src/main/resources/mappers/FlowTaskWrapperMapper.xml @@ -0,0 +1,114 @@ + + + + + + + \ No newline at end of file diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index 4409c05..feaa09f 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.8 + 4.0.0 4.0.0 diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/components/DefaultErrorDecoder.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/components/DefaultErrorDecoder.java index 06b44a4..02761d8 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/components/DefaultErrorDecoder.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/components/DefaultErrorDecoder.java @@ -6,12 +6,11 @@ import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.ReflectUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.cloud.resp.ApiInvokeResult; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.utils.JsonUtil; import feign.Response; import feign.Util; import feign.codec.ErrorDecoder; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; @Slf4j public class DefaultErrorDecoder implements ErrorDecoder { diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/config/CloudSecurityConfigurer.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/config/CloudSecurityConfigurer.java index 1c11be4..702b920 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/config/CloudSecurityConfigurer.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/config/CloudSecurityConfigurer.java @@ -1,9 +1,9 @@ package com.lframework.starter.cloud.config; -import com.lframework.starter.web.components.security.LoginInterceptor; -import com.lframework.starter.web.components.security.PermitAllService; -import com.lframework.starter.web.components.tenant.DefaultTenantInterceptor; -import com.lframework.starter.web.components.tenant.TenantInterceptor; +import com.lframework.starter.web.core.interceptors.LoginInterceptor; +import com.lframework.starter.web.core.components.security.PermitAllService; +import com.lframework.starter.web.core.components.tenant.DefaultTenantInterceptor; +import com.lframework.starter.web.core.components.tenant.TenantInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/controller/DefaultClient.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/controller/DefaultClient.java index 6894fc9..eaaa910 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/controller/DefaultClient.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/controller/DefaultClient.java @@ -1,6 +1,6 @@ package com.lframework.starter.cloud.controller; -import com.lframework.starter.web.controller.BaseController; +import com.lframework.starter.web.core.controller.BaseController; public abstract class DefaultClient extends BaseController { diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/interceptors/FeignRequestInterceptor.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/interceptors/FeignRequestInterceptor.java index fc25129..7b99ce8 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/interceptors/FeignRequestInterceptor.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/interceptors/FeignRequestInterceptor.java @@ -1,12 +1,11 @@ package com.lframework.starter.cloud.interceptors; -import com.lframework.starter.web.utils.RequestUtil; +import com.lframework.starter.web.core.utils.RequestUtil; import feign.RequestInterceptor; import feign.RequestTemplate; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; @Slf4j public class FeignRequestInterceptor implements RequestInterceptor { diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResult.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResult.java index db55fb4..3b39394 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResult.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResult.java @@ -1,7 +1,7 @@ package com.lframework.starter.cloud.resp; import com.lframework.starter.common.constants.ResponseConstants; -import com.lframework.starter.web.resp.Response; +import com.lframework.starter.web.core.components.resp.Response; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java index c445645..55a7328 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultBuilder.java @@ -2,7 +2,7 @@ package com.lframework.starter.cloud.resp; import com.lframework.starter.common.exceptions.BaseException; import com.lframework.starter.cloud.constants.ResponseConstants; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; public class ApiInvokeResultBuilder { diff --git a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultErrorBuilderWrapper.java b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultErrorBuilderWrapper.java index d5db69f..5014fe9 100644 --- a/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultErrorBuilderWrapper.java +++ b/cloud-starter/src/main/java/com/lframework/starter/cloud/resp/ApiInvokeResultErrorBuilderWrapper.java @@ -3,8 +3,8 @@ package com.lframework.starter.cloud.resp; import com.lframework.starter.cloud.BaseFeignClient; import com.lframework.starter.common.exceptions.BaseException; import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.web.resp.Response; -import com.lframework.starter.web.resp.ResponseErrorBuilder; +import com.lframework.starter.web.core.components.resp.Response; +import com.lframework.starter.web.core.components.resp.ResponseErrorBuilder; public class ApiInvokeResultErrorBuilderWrapper implements ResponseErrorBuilder { diff --git a/common/pom.xml b/common/pom.xml index 8a8a57f..96136df 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.8 + 4.0.0 4.0.0 diff --git a/common/src/main/java/com/lframework/starter/common/constants/StringPool.java b/common/src/main/java/com/lframework/starter/common/constants/StringPool.java index 49bd636..d696000 100644 --- a/common/src/main/java/com/lframework/starter/common/constants/StringPool.java +++ b/common/src/main/java/com/lframework/starter/common/constants/StringPool.java @@ -101,4 +101,8 @@ public interface StringPool { * 租户ID在Qrtz中的Key */ String TENANT_ID_QRTZ = "__tenantId"; + + String Y = "Y"; + + String N = "N"; } diff --git a/common/src/main/java/com/lframework/starter/common/utils/DateUtil.java b/common/src/main/java/com/lframework/starter/common/utils/DateUtil.java index 66e3313..ef7c940 100644 --- a/common/src/main/java/com/lframework/starter/common/utils/DateUtil.java +++ b/common/src/main/java/com/lframework/starter/common/utils/DateUtil.java @@ -43,6 +43,10 @@ public class DateUtil extends cn.hutool.core.date.LocalDateTimeUtil { return LocalDateTimeUtil.of(date).toLocalDate(); } + public static LocalDateTime toLocalDateTime(Date date) { + return LocalDateTimeUtil.of(date); + } + public static Date toDate(LocalDateTime dateTime) { if (dateTime == null) { diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index a9db9d8..9c0c1f4 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 3.1.8 + 4.0.0 activemq-starter diff --git a/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java index cb4317e..5071168 100644 --- a/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java +++ b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/interceptors/ActiveMqTenantInterceptor.java @@ -1,8 +1,8 @@ package com.lframework.starter.mq.activemq.interceptors; import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.TenantUtil; import lombok.extern.slf4j.Slf4j; import org.apache.activemq.broker.ProducerBrokerExchange; import org.apache.activemq.broker.inteceptor.MessageInterceptor; diff --git a/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java index d8e8184..095cbbf 100644 --- a/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java +++ b/mq-starter/activemq-starter/src/main/java/com/lframework/starter/mq/activemq/producer/ActiveMqProducer.java @@ -5,8 +5,8 @@ import com.lframework.starter.common.utils.Assert; import com.lframework.starter.mq.activemq.queue.ActiveMqQueueDefinition; import com.lframework.starter.mq.core.producer.MqProducer; import com.lframework.starter.mq.core.queue.QueueDefinition; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.TenantUtil; import java.io.Serializable; import javax.jms.Message; import org.apache.activemq.ScheduledMessage; diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index 8c4ebe8..3219cc5 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.8 + 4.0.0 mq-core diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/ExportingExportTaskBo.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/ExportingExportTaskBo.java new file mode 100644 index 0000000..ca062dc --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/ExportingExportTaskBo.java @@ -0,0 +1,54 @@ +package com.lframework.starter.mq.core.bo; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.mq.core.entity.ExportTask; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ExportingExportTaskBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 总数据条数 + */ + @ApiModelProperty("总数据条数") + private Long totalCount; + + /** + * 当前完成数据条数 + */ + @ApiModelProperty("当前完成数据条数") + private Long curCount; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Integer status; + + public ExportingExportTaskBo(ExportTask dto) { + super(dto); + } + + @Override + public BaseBo convert(ExportTask dto) { + return super.convert(dto, ExportingExportTaskBo::getStatus); + } + + @Override + protected void afterInit(ExportTask dto) { + this.status = dto.getStatus().getCode(); + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/FailExportTaskBo.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/FailExportTaskBo.java new file mode 100644 index 0000000..39233d9 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/FailExportTaskBo.java @@ -0,0 +1,39 @@ +package com.lframework.starter.mq.core.bo; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.mq.core.entity.ExportTask; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class FailExportTaskBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + /** + * 错误信息 + */ + @ApiModelProperty("错误信息") + private String errorMsg; + + public FailExportTaskBo(ExportTask dto) { + super(dto); + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/SuccessExportTaskBo.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/SuccessExportTaskBo.java new file mode 100644 index 0000000..de36e59 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/bo/SuccessExportTaskBo.java @@ -0,0 +1,57 @@ +package com.lframework.starter.mq.core.bo; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.mq.core.entity.ExportTask; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class SuccessExportTaskBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 文件大小 + */ + @ApiModelProperty("文件大小") + private String fileSize; + + /** + * 上传记录ID + */ + @ApiModelProperty("上传记录ID") + private String recordId; + + /** + * 总数据条数 + */ + @ApiModelProperty("总数据条数") + private Long totalCount; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + /** + * 完成时间 + */ + @ApiModelProperty("完成时间") + private LocalDateTime finishTime; + + public SuccessExportTaskBo(ExportTask dto) { + super(dto); + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/components/export/ExportTaskWorker.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/components/export/ExportTaskWorker.java new file mode 100644 index 0000000..4abf075 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/components/export/ExportTaskWorker.java @@ -0,0 +1,47 @@ +package com.lframework.starter.mq.core.components.export; + +import com.lframework.starter.web.core.components.excel.ExcelModel; +import com.lframework.starter.web.core.components.resp.PageResult; + +public interface ExportTaskWorker { + + /** + * 解析传入参数 + * + * @param json + * @return + */ + P parseParams(String json); + + /** + * 查询数据 + * + * @param pageIndex + * @param pageSize + * @param params + * @return + */ + PageResult getDataList(int pageIndex, int pageSize, P params); + + /** + * 导出数据 + * + * @param data + */ + M exportData(D data); + + /** + * 处理异常 + * + * @param e + */ + default void handleError(Exception e) { + } + + /** + * 获取导出模型类 + * + * @return + */ + Class getModelClass(); +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqBeanAutoConfiguration.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqBeanAutoConfiguration.java new file mode 100644 index 0000000..a039b13 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqBeanAutoConfiguration.java @@ -0,0 +1,25 @@ +package com.lframework.starter.mq.core.config; + +import com.lframework.starter.mq.core.controller.ExportTaskController; +import com.lframework.starter.mq.core.impl.ExportTaskServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.EnvironmentAware; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.env.Environment; + +@Slf4j +@Configuration +@Import({ + ExportTaskServiceImpl.class, + ExportTaskController.class, +}) +@MapperScan("com.lframework.starter.mq.core.**.mappers") +public class MqBeanAutoConfiguration implements EnvironmentAware { + + @Override + public void setEnvironment(Environment environment) { + log.info("mq-core加载完成"); + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqSwaggerAutoConfiguration.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqSwaggerAutoConfiguration.java new file mode 100644 index 0000000..b603354 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqSwaggerAutoConfiguration.java @@ -0,0 +1,31 @@ +package com.lframework.starter.mq.core.config; + +import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@Configuration +public class MqSwaggerAutoConfiguration { + + @Bean("mqApiDocket") + public Docket mqApiDocket(ApiInfo info, OpenApiExtensionResolver openApiExtensionResolver) { + + // 除了描述 其他全与info保持一致 + ApiInfo apiInfo = new ApiInfo(info.getTitle(), "消息队列模块", info.getVersion(), + info.getTermsOfServiceUrl(), + info.getContact(), info.getLicense(), info.getLicenseUrl(), info.getVendorExtensions()); + + Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).groupName("消息队列模块") + .select() + .apis(RequestHandlerSelectors.basePackage("com.lframework.starter.mq.core")) + .paths(PathSelectors.any()) + .build() + .extensions(openApiExtensionResolver.buildSettingExtensions()); + return docket; + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/controller/ExportTaskController.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/controller/ExportTaskController.java new file mode 100644 index 0000000..560e378 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/controller/ExportTaskController.java @@ -0,0 +1,106 @@ +package com.lframework.starter.mq.core.controller; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.mq.core.bo.ExportingExportTaskBo; +import com.lframework.starter.mq.core.bo.FailExportTaskBo; +import com.lframework.starter.mq.core.bo.SuccessExportTaskBo; +import com.lframework.starter.mq.core.entity.ExportTask; +import com.lframework.starter.mq.core.enums.ExportTaskStatus; +import com.lframework.starter.mq.core.service.ExportTaskService; +import com.lframework.starter.mq.core.vo.QueryFailExportTaskVo; +import com.lframework.starter.mq.core.vo.QuerySuccessExportTaskVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 导出任务 + * + * @author zmj + */ +@Api(tags = "导出任务") +@Validated +@RestController +@RequestMapping("/export/task") +public class ExportTaskController extends DefaultBaseController { + + @Autowired + private ExportTaskService exportTaskService; + + /** + * 正在导出列表 + */ + @ApiOperation("正在导出列表") + @GetMapping("/exporting") + public InvokeResult> queryExporting() { + + Wrapper queryWrapper = Wrappers.lambdaQuery(ExportTask.class) + .eq(ExportTask::getCreateById, SecurityUtil.getCurrentUser().getId()) + .in(ExportTask::getStatus, ExportTaskStatus.CREATED, ExportTaskStatus.EXPORTING) + .orderByDesc(ExportTask::getCreateTime); + List datas = exportTaskService.list(queryWrapper); + + List results = datas.stream().map(ExportingExportTaskBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("导出成功列表") + @GetMapping("/success") + public InvokeResult> querySuccess( + @Valid QuerySuccessExportTaskVo vo) { + Wrapper queryWrapper = Wrappers.lambdaQuery(ExportTask.class) + .eq(ExportTask::getCreateById, SecurityUtil.getCurrentUser().getId()) + .eq(ExportTask::getStatus, ExportTaskStatus.SUCCESS) + .like(StringUtil.isNotBlank(vo.getName()), ExportTask::getName, vo.getName()) + .orderByDesc(ExportTask::getCreateTime); + + Page page = new Page<>(getPageIndex(vo), getPageSize(vo)); + + Page pageList = exportTaskService.page(page, queryWrapper); + PageResult pageResult = PageResultUtil.convert(pageList); + List datas = pageResult.getDatas(); + List results = datas.stream().map(SuccessExportTaskBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("导出失败列表") + @GetMapping("/fail") + public InvokeResult> queryFail( + @Valid QueryFailExportTaskVo vo) { + Wrapper queryWrapper = Wrappers.lambdaQuery(ExportTask.class) + .eq(ExportTask::getCreateById, SecurityUtil.getCurrentUser().getId()) + .eq(ExportTask::getStatus, ExportTaskStatus.FAIL) + .like(StringUtil.isNotBlank(vo.getName()), ExportTask::getName, vo.getName()) + .orderByDesc(ExportTask::getCreateTime); + + Page page = new Page<>(getPageIndex(vo), getPageSize(vo)); + + Page pageList = exportTaskService.page(page, queryWrapper); + PageResult pageResult = PageResultUtil.convert(pageList); + List datas = pageResult.getDatas(); + List results = datas.stream().map(FailExportTaskBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/AddExportTaskDto.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/AddExportTaskDto.java new file mode 100644 index 0000000..ffb2431 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/AddExportTaskDto.java @@ -0,0 +1,30 @@ +package com.lframework.starter.mq.core.dto; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class AddExportTaskDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + private String name; + + /** + * 请求类名 + */ + private String reqClassName; + + /** + * 请求类方法参数 + */ + private String reqParams; + + /** + * 用户Token + */ + private String token; +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExecuteExportTaskDto.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExecuteExportTaskDto.java new file mode 100644 index 0000000..a4ed0b7 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExecuteExportTaskDto.java @@ -0,0 +1,15 @@ +package com.lframework.starter.mq.core.dto; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class ExecuteExportTaskDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + private String taskId; + + private String token; +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExportTaskSummaryDto.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExportTaskSummaryDto.java new file mode 100644 index 0000000..1bb2276 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/dto/ExportTaskSummaryDto.java @@ -0,0 +1,17 @@ +package com.lframework.starter.mq.core.dto; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class ExportTaskSummaryDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + private Integer unFinishedCount; + + private Integer successCount; + + private Integer failCount; +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/entity/ExportTask.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/entity/ExportTask.java new file mode 100644 index 0000000..3b951fd --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/entity/ExportTask.java @@ -0,0 +1,106 @@ +package com.lframework.starter.mq.core.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.mq.core.enums.ExportTaskStatus; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 导出任务 + *

+ * + * @author zmj + * @since 2025-04-10 + */ +@Data +@TableName("tbl_export_task") +public class ExportTask extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "ExportTask"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 上传记录ID + */ + private String recordId; + + /** + * 状态 + */ + private ExportTaskStatus status; + + /** + * 错误信息 + */ + private String errorMsg; + + /** + * 请求类名 + */ + private String reqClassName; + + + /** + * 请求类方法参数 + */ + private String reqParams; + + /** + * 请求类方法参数签名 + */ + private String reqParamsSign; + + /** + * 总数据条数 + */ + private Long totalCount; + + /** + * 当前完成数据条数 + */ + private Long curCount; + + /** + * 文件大小 + */ + private String fileSize; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 结束时间 + */ + private LocalDateTime finishTime; +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/enums/ExportTaskStatus.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/enums/ExportTaskStatus.java new file mode 100644 index 0000000..0eac865 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/enums/ExportTaskStatus.java @@ -0,0 +1,34 @@ +package com.lframework.starter.mq.core.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum ExportTaskStatus implements BaseEnum { + CREATED(0, "等待导出"), + EXPORTING(1, "正在导出"), + SUCCESS(2, "导出成功"), + FAIL(3, "导出失败"); + + @EnumValue + private final Integer code; + + private final String desc; + + ExportTaskStatus(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/events/ExportTaskNotifyEvent.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/events/ExportTaskNotifyEvent.java new file mode 100644 index 0000000..5f4bb5d --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/events/ExportTaskNotifyEvent.java @@ -0,0 +1,15 @@ +package com.lframework.starter.mq.core.events; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +public class ExportTaskNotifyEvent extends ApplicationEvent { + + @Getter + private String createById; + + public ExportTaskNotifyEvent(Object source, String createById) { + super(source); + this.createById = createById; + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/handlers/ExportTaskHandler.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/handlers/ExportTaskHandler.java new file mode 100644 index 0000000..edbbecf --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/handlers/ExportTaskHandler.java @@ -0,0 +1,147 @@ +package com.lframework.starter.mq.core.handlers; + +import com.lframework.starter.common.exceptions.ClientException; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.FileUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.mq.core.components.export.ExportTaskWorker; +import com.lframework.starter.mq.core.entity.ExportTask; +import com.lframework.starter.mq.core.service.ExportTaskService; +import com.lframework.starter.web.core.components.excel.ExcelModel; +import com.lframework.starter.web.core.components.excel.ExcelMultipartWriterSheetBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ExcelUtil; +import com.lframework.starter.web.core.utils.UploadUtil; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class ExportTaskHandler { + + // 每页条数 + private static final int PER_PAGE_SIZE = 10000; + + // 上报处理条数的攒批数量 + private static final int COUNT_BATCH_SIZE = 100; + + private ExportTaskWorker exportTaskWorker; + + private long timeout; + + private int curCount; + + private String taskId; + + public ExportTaskHandler(String taskId, ExportTaskWorker exportTaskWorker, + long timeout) { + this.taskId = taskId; + this.exportTaskWorker = exportTaskWorker; + this.timeout = timeout; + } + + public void execute(String json) { + + ExportTaskService exportTaskService = ApplicationUtil.getBean(ExportTaskService.class); + + ExportTask exportTask = exportTaskService.getById(taskId); + + String tmpLocation = ApplicationUtil.getEnv().getProperty("spring.servlet.multipart.location"); + tmpLocation = tmpLocation.endsWith(File.separator) ? tmpLocation : tmpLocation + File.separator; + try { + // 将导出任务状态置为正在导出 + exportTaskService.setExporting(taskId); + + P params = exportTaskWorker.parseParams(json); + + long beginTs = System.currentTimeMillis(); + int pageIndex = 1; + File xlsxFile = FileUtil.newFile(tmpLocation + taskId + ".xlsx"); + ExcelMultipartWriterSheetBuilder builder = ExcelUtil.multipartExportXlsx(xlsxFile, "Sheet1", + exportTaskWorker.getModelClass()); + boolean setTotalCount = false; + try { + while (true) { + PageResult pageResult = exportTaskWorker.getDataList(pageIndex, PER_PAGE_SIZE, params); + this.checkCurrentUser(); + if (!setTotalCount) { + long totalCount = pageResult.getTotalCount(); + // 上报总数据条数 + exportTaskService.setTotalCount(taskId, totalCount); + setTotalCount = true; + } + long calcTs = System.currentTimeMillis() - beginTs; + if (calcTs > timeout * 1000L) { + throw new DefaultClientException( + "导出任务已执行" + (calcTs / 1000) + "秒,已超出最大执行时间" + timeout + + "秒,无法导出。"); + } + List dataList = pageResult.getDatas(); + List modelList = new ArrayList<>(dataList.size()); + for (D data : dataList) { + M model = exportTaskWorker.exportData(data); + modelList.add(model); + // 上报处理条数 + this.reportCurCount(); + } + + builder.doWrite(modelList); + if (!pageResult.isHasNext()) { + break; + } + } + } finally { + builder.finish(); + } + + UploadDto uploadDto = UploadUtil.upload(xlsxFile, + CollectionUtil.toList("export-task", exportTask.getCreateById()), true); + + // 将导出任务状态置为导出完成 + exportTaskService.setSuccess(taskId, uploadDto.getSecurityUploadRecordId(), + FileUtil.readableFileSize(xlsxFile.length())); + } catch (ClientException e) { + this.handleError(e); + } catch (Exception e) { + log.error(e.getMessage(), e); + this.handleError(e); + } + } + + protected void reportCurCount() { + this.curCount++; + if (this.curCount >= COUNT_BATCH_SIZE) { + ExportTaskService exportTaskService = ApplicationUtil.getBean(ExportTaskService.class); + exportTaskService.addCurCount(taskId, this.curCount); + this.curCount = 0; + } + } + + /** + * 处理异常 + * + * @param e + */ + protected void handleError(Exception e) { + ExportTaskService exportTaskService = ApplicationUtil.getBean(ExportTaskService.class); + // 将导出任务状态置为失败 + exportTaskService.setFail(taskId, + StringUtil.isBlank(e.getMessage()) ? e.toString() : e.getMessage()); + + exportTaskWorker.handleError(e); + } + + protected void checkCurrentUser() { + // 必须一直检测session是否在线,否则可能会导致查出的数据超出了当前用户可访问的数据 + AbstractUserDetails currentUser = SecurityUtil.getCurrentUser(); + if (currentUser == null || SecurityUtil.getSessionByLoginId(currentUser.getLoginId()) == null) { + throw new DefaultClientException("导出用户已退出登录,无法导出"); + } + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/impl/ExportTaskServiceImpl.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/impl/ExportTaskServiceImpl.java new file mode 100644 index 0000000..80d490a --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/impl/ExportTaskServiceImpl.java @@ -0,0 +1,127 @@ +package com.lframework.starter.mq.core.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.mq.core.dto.ExportTaskSummaryDto; +import com.lframework.starter.mq.core.entity.ExportTask; +import com.lframework.starter.mq.core.enums.ExportTaskStatus; +import com.lframework.starter.mq.core.events.ExportTaskNotifyEvent; +import com.lframework.starter.mq.core.mappers.ExportTaskMapper; +import com.lframework.starter.mq.core.service.ExportTaskService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import java.time.LocalDateTime; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +public class ExportTaskServiceImpl extends BaseMpServiceImpl + implements ExportTaskService { + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(ExportTask task) { + this.save(task); + + ApplicationUtil.publishEvent(new ExportTaskNotifyEvent(this, task.getCreateById())); + return task.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setExporting(String id) { + + ExportTask task = this.getById(id); + + Wrapper updateWrapper = Wrappers.lambdaUpdate(ExportTask.class) + .eq(ExportTask::getId, id) + .eq(ExportTask::getStatus, ExportTaskStatus.CREATED) + .set(ExportTask::getStatus, ExportTaskStatus.EXPORTING); + + if (!this.update(updateWrapper)) { + log.error("导出任务 ID {} 设置为 正在导出 失败", id); + throw new DefaultSysException( + "导出任务设置为“" + ExportTaskStatus.EXPORTING.getDesc() + "”失败"); + } + + ApplicationUtil.publishEvent(new ExportTaskNotifyEvent(this, task.getCreateById())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setSuccess(String id, String securityUploadRecordId, String fileSize) { + + ExportTask task = this.getById(id); + String recordId = securityUploadRecordId; + + Wrapper updateWrapper = Wrappers.lambdaUpdate(ExportTask.class) + .eq(ExportTask::getId, id) + .in(ExportTask::getStatus, ExportTaskStatus.CREATED, ExportTaskStatus.EXPORTING) + .set(ExportTask::getRecordId, recordId) + .set(ExportTask::getStatus, ExportTaskStatus.SUCCESS) + .set(ExportTask::getFinishTime, LocalDateTime.now()) + .set(ExportTask::getFileSize, fileSize) + .setSql("cur_count = total_count"); + if (!this.update(updateWrapper)) { + log.error("导出任务 ID {} 设置为 导出成功 失败", id); + throw new DefaultSysException( + "导出任务设置为“" + ExportTaskStatus.SUCCESS.getDesc() + "”失败"); + } + ApplicationUtil.publishEvent(new ExportTaskNotifyEvent(this, task.getCreateById())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setFail(String id, String errorMsg) { + ExportTask task = this.getById(id); + Wrapper updateWrapper = Wrappers.lambdaUpdate(ExportTask.class) + .eq(ExportTask::getId, id) + .set(ExportTask::getStatus, ExportTaskStatus.FAIL) + .set(ExportTask::getErrorMsg, errorMsg) + .set(ExportTask::getFinishTime, LocalDateTime.now()); + if (!this.update(updateWrapper)) { + log.error("导出任务 ID {} 设置为 导出失败 失败", id); + throw new DefaultSysException( + "导出任务设置为“" + ExportTaskStatus.FAIL.getDesc() + "”失败"); + } + ApplicationUtil.publishEvent(new ExportTaskNotifyEvent(this, task.getCreateById())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setTotalCount(String id, Long totalCount) { + Wrapper updateWrapper = Wrappers.lambdaUpdate(ExportTask.class) + .eq(ExportTask::getId, id) + .eq(ExportTask::getStatus, ExportTaskStatus.EXPORTING) + .set(ExportTask::getTotalCount, totalCount); + + if (!this.update(updateWrapper)) { + log.error("导出任务 ID {} 设置 数据总条数 失败", id); + throw new DefaultSysException( + "导出任务设置数据总条数失败"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void addCurCount(String id, int addCount) { + Wrapper updateWrapper = Wrappers.lambdaUpdate(ExportTask.class) + .eq(ExportTask::getId, id) + .eq(ExportTask::getStatus, ExportTaskStatus.EXPORTING) + .setSql("cur_count = cur_count + " + addCount); + + if (!this.update(updateWrapper)) { + log.error("导出任务 ID {} 设置 当前导出条数 失败", id); + throw new DefaultSysException( + "导出任务设置当前导出条数失败"); + } + } + + @Override + public ExportTaskSummaryDto getSummaryByUserId(String userId) { + return getBaseMapper().getSummaryByUserId(userId); + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/mappers/ExportTaskMapper.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/mappers/ExportTaskMapper.java new file mode 100644 index 0000000..27308df --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/mappers/ExportTaskMapper.java @@ -0,0 +1,24 @@ +package com.lframework.starter.mq.core.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.mq.core.dto.ExportTaskSummaryDto; +import com.lframework.starter.mq.core.entity.ExportTask; + +/** + *

+ * ExportTaskMapper 接口 + *

+ * + * @author zmj + * @since 2025-04-10 + */ +public interface ExportTaskMapper extends BaseMapper { + + /** + * 根据用户ID统计导出任务 + * + * @param userId + * @return + */ + ExportTaskSummaryDto getSummaryByUserId(String userId); +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/ExportTaskService.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/ExportTaskService.java new file mode 100644 index 0000000..c5e93cb --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/ExportTaskService.java @@ -0,0 +1,67 @@ +package com.lframework.starter.mq.core.service; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.mq.core.dto.ExportTaskSummaryDto; +import com.lframework.starter.mq.core.entity.ExportTask; + +/** + * 导出任务 Service + * + * @author zmj + */ +public interface ExportTaskService extends BaseMpService { + + /** + * 新增 + * + * @param task + * @return + */ + String create(ExportTask task); + + /** + * 设置为正在导出 + * + * @param id + */ + void setExporting(String id); + + /** + * 设置为成功 + * + * @param id + */ + void setSuccess(String id, String securityUploadRecordId, String fileSize); + + /** + * 设置为失败 + * + * @param id + * @param errorMsg + */ + void setFail(String id, String errorMsg); + + /** + * 设置数据总条数 + * + * @param id + * @param totalCount + */ + void setTotalCount(String id, Long totalCount); + + /** + * 增加当前导出条数 + * + * @param id + * @param addCount + */ + void addCurCount(String id, int addCount); + + /** + * 根据用户ID统计导出任务 + * + * @param userId + * @return + */ + ExportTaskSummaryDto getSummaryByUserId(String userId); +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/MqProducerService.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/MqProducerService.java new file mode 100644 index 0000000..d537d7f --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/service/MqProducerService.java @@ -0,0 +1,46 @@ +package com.lframework.starter.mq.core.service; + +import com.lframework.starter.mq.core.dto.AddExportTaskDto; +import com.lframework.starter.mq.core.dto.ExecuteExportTaskDto; +import com.lframework.starter.web.core.service.BaseService; +import com.lframework.starter.web.inner.dto.message.SysMailMessageDto; +import com.lframework.starter.web.inner.dto.message.SysSiteMessageDto; +import com.lframework.starter.web.inner.dto.notify.SysNotifyDto; + +public interface MqProducerService extends BaseService { + + /** + * 发送消息通知 + * + * @param dto + */ + void createSysNotify(SysNotifyDto dto); + + /** + * 发送邮件消息 + * + * @param dto + */ + void createSysMailMessage(SysMailMessageDto dto); + + /** + * 发送站内信 + * + * @param dto + */ + void createSysSiteMessage(SysSiteMessageDto dto); + + /** + * 新增导出任务 + * + * @param dto + */ + void addExportTask(AddExportTaskDto dto); + + /** + * 执行导出任务 + * + * @param dto + */ + void executeExportTask(ExecuteExportTaskDto dto); +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/utils/ExportTaskUtil.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/utils/ExportTaskUtil.java new file mode 100644 index 0000000..5b74109 --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/utils/ExportTaskUtil.java @@ -0,0 +1,27 @@ +package com.lframework.starter.mq.core.utils; + +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.mq.core.components.export.ExportTaskWorker; +import com.lframework.starter.mq.core.service.MqProducerService; +import com.lframework.starter.web.core.components.security.UserTokenResolver; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.mq.core.dto.AddExportTaskDto; +import java.time.LocalDateTime; + +public class ExportTaskUtil { + + public static void exportTask(String taskName, + Class> clazz, + Object params) { + MqProducerService mqProducerService = ApplicationUtil.getBean(MqProducerService.class); + UserTokenResolver userTokenResolver = ApplicationUtil.getBean(UserTokenResolver.class); + AddExportTaskDto dto = new AddExportTaskDto(); + dto.setName(taskName + "_" + DateUtil.formatDateTime(LocalDateTime.now(), "yyyyMMddHHmmss")); + dto.setReqClassName(clazz.getName()); + dto.setReqParams(JsonUtil.toJsonString(params)); + dto.setToken(userTokenResolver.getToken()); + + mqProducerService.addExportTask(dto); + } +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QueryFailExportTaskVo.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QueryFailExportTaskVo.java new file mode 100644 index 0000000..237c23b --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QueryFailExportTaskVo.java @@ -0,0 +1,15 @@ +package com.lframework.starter.mq.core.vo; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryFailExportTaskVo extends PageVo { + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QuerySuccessExportTaskVo.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QuerySuccessExportTaskVo.java new file mode 100644 index 0000000..cd66eef --- /dev/null +++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/vo/QuerySuccessExportTaskVo.java @@ -0,0 +1,15 @@ +package com.lframework.starter.mq.core.vo; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySuccessExportTaskVo extends PageVo { + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/websocket-starter/src/main/resources/META-INF/spring.factories b/mq-starter/mq-core/src/main/resources/META-INF/spring.factories similarity index 33% rename from websocket-starter/src/main/resources/META-INF/spring.factories rename to mq-starter/mq-core/src/main/resources/META-INF/spring.factories index 2caf5ff..d7c42dd 100644 --- a/websocket-starter/src/main/resources/META-INF/spring.factories +++ b/mq-starter/mq-core/src/main/resources/META-INF/spring.factories @@ -1 +1,2 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lframework.starter.websocket.config.WsAutoConfiguration \ No newline at end of file +org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lframework.starter.mq.core.config.MqBeanAutoConfiguration,\ + com.lframework.starter.mq.core.config.MqSwaggerAutoConfiguration \ No newline at end of file diff --git a/mq-starter/mq-core/src/main/resources/mappers/ExportTaskMapper.xml b/mq-starter/mq-core/src/main/resources/mappers/ExportTaskMapper.xml new file mode 100644 index 0000000..1c3e8d1 --- /dev/null +++ b/mq-starter/mq-core/src/main/resources/mappers/ExportTaskMapper.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index 95f0f74..e7dedf2 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.8 + 4.0.0 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index e28d78c..966a25d 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 3.1.8 + 4.0.0 rabbitmq-starter diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java index 9e72abe..a74c842 100644 --- a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/RabbitMqAutoConfiguration.java @@ -1,6 +1,12 @@ package com.lframework.starter.mq.rabbitmq.config; import com.lframework.starter.common.utils.ArrayUtil; +import com.lframework.starter.mq.rabbitmq.impl.RabbitMqProducerServiceImpl; +import com.lframework.starter.mq.rabbitmq.listeners.app.ExportTaskNotifyListener; +import com.lframework.starter.mq.rabbitmq.listeners.mq.ExportTaskListener; +import com.lframework.starter.mq.rabbitmq.listeners.mq.SysMailMessageListener; +import com.lframework.starter.mq.rabbitmq.listeners.mq.SysNotifyListener; +import com.lframework.starter.mq.rabbitmq.listeners.mq.SysSiteMessageListener; import com.lframework.starter.mq.rabbitmq.producer.RabbitMqProducer; import org.aopalliance.aop.Advice; import org.springframework.amqp.rabbit.annotation.EnableRabbit; @@ -18,9 +24,18 @@ import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainer import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; @EnableRabbit @Configuration +@Import({ + RabbitMqProducerServiceImpl.class, + SysMailMessageListener.class, + SysNotifyListener.class, + SysSiteMessageListener.class, + ExportTaskNotifyListener.class, + ExportTaskListener.class, +}) public class RabbitMqAutoConfiguration { private final ObjectProvider messageConverter; @@ -33,7 +48,8 @@ public class RabbitMqAutoConfiguration { RabbitMqAutoConfiguration(ObjectProvider messageConverter, ObjectProvider messageRecoverer, - ObjectProvider retryTemplateCustomizers, RabbitProperties properties) { + ObjectProvider retryTemplateCustomizers, + RabbitProperties properties) { this.messageConverter = messageConverter; this.messageRecoverer = messageRecoverer; this.retryTemplateCustomizers = retryTemplateCustomizers; @@ -49,7 +65,8 @@ public class RabbitMqAutoConfiguration { @ConditionalOnProperty(prefix = "spring.rabbitmq.listener", name = "type", havingValue = "simple", matchIfMissing = true) SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory( - SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { + SimpleRabbitListenerContainerFactoryConfigurer configurer, + ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); configurer.configure(factory, connectionFactory); factory.setAdviceChain(combineAdvice(factory.getAdviceChain())); @@ -59,7 +76,8 @@ public class RabbitMqAutoConfiguration { @Bean(name = "rabbitListenerContainerFactory") @ConditionalOnProperty(prefix = "spring.rabbitmq.listener", name = "type", havingValue = "direct") DirectRabbitListenerContainerFactory directRabbitListenerContainerFactory( - DirectRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { + DirectRabbitListenerContainerFactoryConfigurer configurer, + ConnectionFactory connectionFactory) { DirectRabbitListenerContainerFactory factory = new DirectRabbitListenerContainerFactory(); configurer.configure(factory, connectionFactory); factory.setAdviceChain(combineAdvice(factory.getAdviceChain())); diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java index b668bf9..2c46e08 100644 --- a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/config/TenantMethodInterceptor.java @@ -1,8 +1,8 @@ package com.lframework.starter.mq.rabbitmq.config; import com.lframework.starter.common.utils.ArrayUtil; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.TenantUtil; import lombok.extern.slf4j.Slf4j; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqConstants.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqConstants.java new file mode 100644 index 0000000..05f24c9 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqConstants.java @@ -0,0 +1,40 @@ +package com.lframework.starter.mq.rabbitmq.constants; + +import com.lframework.starter.mq.core.queue.QueueDefinition; +import com.lframework.starter.mq.rabbitmq.queue.RabbitMQQueueDefinition; + +public class RabbitMqConstants { + + /** + * 消息通知 + */ + public static final QueueDefinition SYS_NOTIFY = new RabbitMQQueueDefinition( + RabbitMqStringPool.SYS_NOTIFY_EXCHANGE, RabbitMqStringPool.SYS_NOTIFY_ROUTING_KEY); + + /** + * 邮件消息 + */ + public static final QueueDefinition SYS_MAIL_MESSAGE = new RabbitMQQueueDefinition( + RabbitMqStringPool.SYS_MAIL_MESSAGE_EXCHANGE, + RabbitMqStringPool.SYS_MAIL_MESSAGE_ROUTING_KEY); + + /** + * 站内信 + */ + public static final QueueDefinition SYS_SITE_MESSAGE = new RabbitMQQueueDefinition( + RabbitMqStringPool.SYS_SITE_MESSAGE_EXCHANGE, + RabbitMqStringPool.SYS_SITE_MESSAGE_ROUTING_KEY); + + /** + * 新增导出任务 + */ + public static final QueueDefinition ADD_EXPORT_TASK = new RabbitMQQueueDefinition( + RabbitMqStringPool.ADD_EXPORT_TASK_EXCHANGE, RabbitMqStringPool.ADD_EXPORT_TASK_ROUTING_KEY); + + /** + * 执行导出任务 + */ + public static final QueueDefinition EXECUTE_EXPORT_TASK = new RabbitMQQueueDefinition( + RabbitMqStringPool.EXECUTE_EXPORT_TASK_EXCHANGE, + RabbitMqStringPool.EXECUTE_EXPORT_TASK_ROUTING_KEY); +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqStringPool.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqStringPool.java new file mode 100644 index 0000000..4d609e8 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/constants/RabbitMqStringPool.java @@ -0,0 +1,39 @@ +package com.lframework.starter.mq.rabbitmq.constants; + +public interface RabbitMqStringPool { + + // 增加库存 + String ADD_STOCK_EXCHANGE = "add_stock.fanout"; + + // 扣减库存 + String SUB_STOCK_EXCHANGE = "sub_stock.fanout"; + + // 审核通过订单 + String APPROVE_PASS_ORDER_EXCHANGE = "approve_pass_order.fanout"; + + // 消息通知 + String SYS_NOTIFY_EXCHANGE = "sys_notify.direct"; + String SYS_NOTIFY_ROUTING_KEY = "sys_notify_routing_key"; + String SYS_NOTIFY_QUEUE = "sys_notify"; + + // 邮件消息 + String SYS_MAIL_MESSAGE_EXCHANGE = "sys_mail_message.direct"; + String SYS_MAIL_MESSAGE_ROUTING_KEY = "sys_mail_message_routing_key"; + String SYS_MAIL_MESSAGE_QUEUE = "sys_mail_message"; + + // 站内信 + String SYS_SITE_MESSAGE_EXCHANGE = "sys_site_message.direct"; + String SYS_SITE_MESSAGE_ROUTING_KEY = "sys_site_message_routing_key"; + String SYS_SITE_MESSAGE_QUEUE = "sys_site_message"; + + // 新增导出任务 + String ADD_EXPORT_TASK_EXCHANGE = "add_export_task.direct"; + String ADD_EXPORT_TASK_ROUTING_KEY = "add_export_task_routing_key"; + String ADD_EXPORT_TASK_QUEUE = "add_export_task"; + + // 执行导出任务 + String EXECUTE_EXPORT_TASK_EXCHANGE = "execute_export_task.direct"; + String EXECUTE_EXPORT_TASK_ROUTING_KEY = "execute_export_task_routing_key"; + String EXECUTE_EXPORT_TASK_QUEUE = "execute_export_task"; + +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/impl/RabbitMqProducerServiceImpl.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/impl/RabbitMqProducerServiceImpl.java new file mode 100644 index 0000000..fa62aa6 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/impl/RabbitMqProducerServiceImpl.java @@ -0,0 +1,42 @@ +package com.lframework.starter.mq.rabbitmq.impl; + +import com.lframework.starter.mq.core.dto.ExecuteExportTaskDto; +import com.lframework.starter.mq.core.producer.MqProducer; +import com.lframework.starter.mq.core.service.MqProducerService; +import com.lframework.starter.mq.rabbitmq.constants.RabbitMqConstants; +import com.lframework.starter.mq.core.dto.AddExportTaskDto; +import com.lframework.starter.web.inner.dto.message.SysMailMessageDto; +import com.lframework.starter.web.inner.dto.message.SysSiteMessageDto; +import com.lframework.starter.web.inner.dto.notify.SysNotifyDto; +import org.springframework.beans.factory.annotation.Autowired; + +public class RabbitMqProducerServiceImpl implements MqProducerService { + + @Autowired + private MqProducer mqProducer; + + @Override + public void createSysNotify(SysNotifyDto dto) { + mqProducer.sendMessage(RabbitMqConstants.SYS_NOTIFY, dto); + } + + @Override + public void createSysMailMessage(SysMailMessageDto dto) { + mqProducer.sendMessage(RabbitMqConstants.SYS_MAIL_MESSAGE, dto); + } + + @Override + public void createSysSiteMessage(SysSiteMessageDto dto) { + mqProducer.sendMessage(RabbitMqConstants.SYS_SITE_MESSAGE, dto); + } + + @Override + public void addExportTask(AddExportTaskDto dto) { + mqProducer.sendMessage(RabbitMqConstants.ADD_EXPORT_TASK, dto); + } + + @Override + public void executeExportTask(ExecuteExportTaskDto dto) { + mqProducer.sendMessage(RabbitMqConstants.EXECUTE_EXPORT_TASK, dto); + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/app/ExportTaskNotifyListener.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/app/ExportTaskNotifyListener.java new file mode 100644 index 0000000..91c5d07 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/app/ExportTaskNotifyListener.java @@ -0,0 +1,41 @@ +package com.lframework.starter.mq.rabbitmq.listeners.app; + +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.websocket.components.WsDataPusher; +import com.lframework.starter.web.websocket.events.UserConnectEvent; +import com.lframework.starter.mq.core.events.ExportTaskNotifyEvent; +import com.lframework.starter.mq.core.service.ExportTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionalEventListener; + +@Component +public class ExportTaskNotifyListener implements ApplicationListener { + + @Autowired + private WsDataPusher wsDataPusher; + + @Autowired + private ExportTaskService exportTaskService; + + @TransactionalEventListener + public void execute(ExportTaskNotifyEvent event) { + this.notify(event.getCreateById()); + } + + @Override + public void onApplicationEvent(UserConnectEvent event) { + this.notify(event.getUser().getId()); + } + + private void notify(String userId) { + // 发送广播 + WsPushData pushData = new WsPushData(); + pushData.setBizType("exportTask"); + pushData.setDataObj(exportTaskService.getSummaryByUserId(userId)); + pushData.setIncludeUserId(userId); + + wsDataPusher.push(pushData); + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/ExportTaskListener.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/ExportTaskListener.java new file mode 100644 index 0000000..18b3522 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/ExportTaskListener.java @@ -0,0 +1,125 @@ +package com.lframework.starter.mq.rabbitmq.listeners.mq; + +import cn.hutool.crypto.SecureUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.ClientException; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.ReflectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.mq.core.dto.AddExportTaskDto; +import com.lframework.starter.mq.core.dto.ExecuteExportTaskDto; +import com.lframework.starter.mq.core.entity.ExportTask; +import com.lframework.starter.mq.core.enums.ExportTaskStatus; +import com.lframework.starter.mq.core.handlers.ExportTaskHandler; +import com.lframework.starter.mq.core.service.ExportTaskService; +import com.lframework.starter.mq.core.service.MqProducerService; +import com.lframework.starter.mq.rabbitmq.constants.RabbitMqStringPool; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.service.SysConfService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; + +@Slf4j +@Component("exportTaskListener") +public class ExportTaskListener { + + @Autowired + private ExportTaskService exportTaskService; + + @Autowired + private MqProducerService mqProducerService; + + @Autowired + private SysConfService sysConfService; + + @RabbitListener(bindings = { + @QueueBinding(value = @Queue(value = RabbitMqStringPool.ADD_EXPORT_TASK_QUEUE), key = RabbitMqStringPool.ADD_EXPORT_TASK_ROUTING_KEY, exchange = @Exchange(value = RabbitMqStringPool.ADD_EXPORT_TASK_EXCHANGE))}, concurrency = "2") + public void addExportTask(Message message) { + + AddExportTaskDto dto = message.getPayload(); + + log.info("接收到新增导出任务MQ message = {}", dto); + + AbstractUserDetails currentUser = SecurityUtil.getUserByToken(dto.getToken()); + if (currentUser == null) { + log.info("导出用户已退出登录,无法导出"); + return; + } + + try { + SecurityUtil.setCurrentUser(currentUser); + + // 新增导出任务 + ExportTask task = new ExportTask(); + task.setId(IdUtil.getId()); + task.setName(dto.getName()); + task.setStatus(ExportTaskStatus.CREATED); + task.setReqClassName(dto.getReqClassName()); + task.setReqParams(dto.getReqParams()); + + task.setReqParamsSign(SecureUtil.md5(dto.getReqClassName() + ":" + dto.getReqParams())); + + exportTaskService.create(task); + + ExecuteExportTaskDto taskDto = new ExecuteExportTaskDto(); + taskDto.setTaskId(task.getId()); + taskDto.setToken(dto.getToken()); + + mqProducerService.executeExportTask(taskDto); + + } finally { + SecurityUtil.removeCurrentUser(); + } + } + + @RabbitListener(bindings = { + @QueueBinding(value = @Queue(value = RabbitMqStringPool.EXECUTE_EXPORT_TASK_QUEUE), key = RabbitMqStringPool.EXECUTE_EXPORT_TASK_ROUTING_KEY, exchange = @Exchange(value = RabbitMqStringPool.EXECUTE_EXPORT_TASK_EXCHANGE))}) + public void executeExportTask(Message message) { + + ExecuteExportTaskDto dto = message.getPayload(); + + log.info("接收到执行导出任务MQ message = {}", dto); + + ExportTask task = exportTaskService.getById(dto.getTaskId()); + AbstractUserDetails currentUser = SecurityUtil.getUserByToken(dto.getToken()); + + try { + if (currentUser == null) { + throw new DefaultClientException("导出用户已退出登录,无法导出"); + } + + SecurityUtil.setCurrentUser(currentUser); + + Wrapper checkWrapper = Wrappers.lambdaQuery(ExportTask.class) + .eq(ExportTask::getReqParamsSign, task.getReqParamsSign()) + .in(ExportTask::getStatus, ExportTaskStatus.CREATED, ExportTaskStatus.EXPORTING) + .ne(ExportTask::getId, task.getId()); + if (exportTaskService.count(checkWrapper) > 0) { + throw new DefaultClientException("导出任务重复,请勿重复导出。"); + } + + ExportTaskHandler exportTaskHandler = new ExportTaskHandler(task.getId(), + ReflectUtil.newInstance(task.getReqClassName()), + sysConfService.getLong("export.timeout", 600L)); + exportTaskHandler.execute(task.getReqParams()); + } catch (ClientException e) { + exportTaskService.setFail(task.getId(), + StringUtil.isBlank(e.getMessage()) ? e.toString() : e.getMessage()); + } catch (Exception e) { + log.error(e.getMessage(), e); + exportTaskService.setFail(task.getId(), + StringUtil.isBlank(e.getMessage()) ? e.toString() : e.getMessage()); + } finally { + SecurityUtil.removeCurrentUser(); + } + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysMailMessageListener.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysMailMessageListener.java new file mode 100644 index 0000000..8a548b9 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysMailMessageListener.java @@ -0,0 +1,130 @@ +package com.lframework.starter.mq.rabbitmq.listeners.mq; + +import cn.hutool.extra.mail.MailException; +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.RegUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.mq.rabbitmq.constants.RabbitMqStringPool; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.dto.message.SysMailMessageDto; +import com.lframework.starter.web.inner.entity.SysMailMessage; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.enums.system.SysMailMessageSendStatus; +import com.lframework.starter.web.inner.service.MailService; +import com.lframework.starter.web.inner.service.system.SysMailMessageService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import java.util.List; +import java.util.stream.Collectors; +import javax.mail.Address; +import javax.mail.SendFailedException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class SysMailMessageListener { + + @Autowired + private SysMailMessageService sysMailMessageService; + + @Autowired + private SysUserService sysUserService; + + @RabbitListener(bindings = { + @QueueBinding(value = @Queue(value = RabbitMqStringPool.SYS_MAIL_MESSAGE_QUEUE), key = RabbitMqStringPool.SYS_MAIL_MESSAGE_ROUTING_KEY, exchange = @Exchange(value = RabbitMqStringPool.SYS_MAIL_MESSAGE_EXCHANGE))}) + public void execute(Message message) { + + SysMailMessageDto dto = message.getPayload(); + log.info("接收到发送邮件消息 {}", dto); + + if (CollectionUtil.isNotEmpty(dto.getMailList())) { + dto.setMailList( + dto.getMailList().stream().filter(t -> RegUtil.isMatch(PatternPool.EMAIL, t)).collect( + Collectors.toList())); + } + + if (CollectionUtil.isEmpty(dto.getMailList())) { + log.info("邮箱地址为空,不发送"); + return; + } + + String title = dto.getTitle(); + String content = dto.getContent(); + if (StringUtil.isBlank(title) || StringUtil.isBlank(content) || StringUtil.isBlank( + dto.getBizKey())) { + log.info("标题、内容、业务键不能为空,不发送"); + return; + } + + SysUser createBy = StringUtil.isBlank(dto.getCreateUserId()) ? null + : sysUserService.findById(dto.getCreateUserId()); + + List recordList = dto.getMailList().stream().distinct().map(t -> { + SysMailMessage record = new SysMailMessage(); + record.setId(IdUtil.getId()); + record.setTitle(title); + record.setContent(content); + record.setMail(t); + record.setBizKey(dto.getBizKey()); + record.setSendStatus(SysMailMessageSendStatus.UN_SEND); + if (createBy != null) { + record.setCreateById(createBy.getId()); + record.setCreateBy(createBy.getName()); + record.setUpdateBy(createBy.getName()); + record.setUpdateById(createBy.getId()); + } + + return record; + }).collect(Collectors.toList()); + + sysMailMessageService.saveBatch(recordList); + + try { + MailService mailService = ApplicationUtil.getBean(MailService.class); + mailService.send( + recordList.stream().map(SysMailMessage::getMail).collect(Collectors.toList()), + title, content); + + // 全部成功 + recordList.forEach(t -> t.setSendStatus(SysMailMessageSendStatus.SENDED)); + + } catch (MailException e) { + Throwable throwable = e.getCause(); + if (throwable instanceof SendFailedException) { + //部分失败 + Address[] invalidAddresses = ((SendFailedException) throwable).getInvalidAddresses(); + for (Address invalidAddress : invalidAddresses) { + String mail = invalidAddress.toString(); + recordList.stream().filter(t -> mail.equals(t.getMail())) + .findFirst().ifPresent(record -> record.setSendStatus(SysMailMessageSendStatus.FAIL)); + recordList.stream().filter(t -> t.getSendStatus() == SysMailMessageSendStatus.UN_SEND + ).forEach(record -> record.setSendStatus(SysMailMessageSendStatus.SENDED)); + } + } else { + // 全部失败 + recordList.forEach(t -> t.setSendStatus(SysMailMessageSendStatus.FAIL)); + log.error(e.getMessage(), e); + } + } + + sysMailMessageService.updateBatchById(recordList.stream().map(t -> { + SysMailMessage record = new SysMailMessage(); + record.setId(t.getId()); + record.setSendStatus(t.getSendStatus()); + record.setCreateById(t.getCreateById()); + record.setCreateBy(t.getCreateBy()); + record.setUpdateById(t.getUpdateById()); + record.setUpdateBy(t.getUpdateBy()); + + return record; + }).collect(Collectors.toList())); + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysNotifyListener.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysNotifyListener.java new file mode 100644 index 0000000..f13462e --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysNotifyListener.java @@ -0,0 +1,174 @@ +package com.lframework.starter.mq.rabbitmq.listeners.mq; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.mq.core.service.MqProducerService; +import com.lframework.starter.mq.rabbitmq.constants.RabbitMqStringPool; +import com.lframework.starter.web.core.components.notify.SysNotifyRuleEmail; +import com.lframework.starter.web.core.components.notify.SysNotifyRuleSys; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.dto.message.SysMailMessageDto; +import com.lframework.starter.web.inner.dto.message.SysSiteMessageDto; +import com.lframework.starter.web.inner.dto.notify.SysNotifyDto; +import com.lframework.starter.web.inner.dto.notify.SysNotifyParamsDto; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.enums.system.SysNotifyMessageType; +import com.lframework.starter.web.inner.service.system.SysNotifyGroupService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class SysNotifyListener { + + @Autowired + private SysNotifyGroupService sysNotifyGroupService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private MqProducerService mqProducerService; + + private static final int BATCH_SIZE = 100; + + @RabbitListener(bindings = { + @QueueBinding(value = @Queue(value = RabbitMqStringPool.SYS_NOTIFY_QUEUE), key = RabbitMqStringPool.SYS_NOTIFY_ROUTING_KEY, exchange = @Exchange(value = RabbitMqStringPool.SYS_NOTIFY_EXCHANGE))}) + public void execute(Message message) { + SysNotifyDto dto = message.getPayload(); + log.debug("接收到消息:{}", dto); + + SysNotifyGroup notifyGroup = sysNotifyGroupService.findById(dto.getNotifyGroupId()); + if (notifyGroup == null) { + log.info("消息通知组不存在,通知组ID:{}", dto.getNotifyGroupId()); + return; + } + if (!notifyGroup.getAvailable()) { + log.info("消息通知组不可用,通知组ID:{}", dto.getNotifyGroupId()); + return; + } + + Set userIds = sysNotifyGroupService.getReceiveUserIds(notifyGroup.getId()); + if (CollectionUtil.isEmpty(userIds)) { + log.info("消息通知组不存在接收人,通知组ID:{}", dto.getNotifyGroupId()); + return; + } + + List messageTypeCodes = Arrays.stream( + notifyGroup.getMessageType().split(StringPool.STR_SPLIT)).map(Integer::valueOf).collect( + Collectors.toList()); + for (Integer messageTypeCode : messageTypeCodes) { + SysNotifyMessageType messageType = EnumUtil.getByCode(SysNotifyMessageType.class, + messageTypeCode); + switch (messageType) { + case EMAIL: { + Map ruleMap = ApplicationUtil.getBeansOfType( + SysNotifyRuleEmail.class); + + for (SysNotifyRuleEmail rule : ruleMap.values()) { + if (!rule.match(dto.getBizType())) { + continue; + } + + log.info("匹配到rule,开始发送邮件"); + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUser.class) + .select(SysUser::getEmail) + .in(SysUser::getId, userIds) + .eq(SysUser::getAvailable, true) + .isNotNull(SysUser::getEmail) + .ne(SysUser::getEmail, StringPool.EMPTY_STR); + List userList = sysUserService.list(queryWrapper); + if (CollectionUtil.isNotEmpty(userList)) { + SysNotifyParamsDto paramsDto = new SysNotifyParamsDto(); + paramsDto.setVariables(dto.getVariables()); + + String title = rule.getTitle(paramsDto); + String content = rule.getContent(paramsDto); + + List allMailList = userList.stream().map(SysUser::getEmail).distinct() + .collect( + Collectors.toList()); + List> splitMailList = CollectionUtil.split(allMailList, BATCH_SIZE); + for (List mailList : splitMailList) { + SysMailMessageDto messageDto = new SysMailMessageDto(); + messageDto.setMailList(mailList); + messageDto.setTitle(title); + messageDto.setContent(content); + messageDto.setBizKey(IdUtil.getId()); + messageDto.setCreateUserId(dto.getCreateUserId()); + + mqProducerService.createSysMailMessage(messageDto); + } + } + break; + } + break; + } + + case SYS: { + Map ruleMap = ApplicationUtil.getBeansOfType( + SysNotifyRuleSys.class); + + for (SysNotifyRuleSys rule : ruleMap.values()) { + if (!rule.match(dto.getBizType())) { + continue; + } + + log.info("匹配到rule,开始发送站内信"); + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUser.class) + .select(SysUser::getId) + .in(SysUser::getId, userIds) + .eq(SysUser::getAvailable, true); + List userList = sysUserService.list(queryWrapper); + if (CollectionUtil.isNotEmpty(userList)) { + SysNotifyParamsDto paramsDto = new SysNotifyParamsDto(); + paramsDto.setVariables(dto.getVariables()); + + String title = rule.getTitle(paramsDto); + String content = rule.getContent(paramsDto); + + List allUserIdList = userList.stream().map(SysUser::getId).distinct() + .collect( + Collectors.toList()); + List> splitUserIdList = CollectionUtil.split(allUserIdList, BATCH_SIZE); + for (List userIdList : splitUserIdList) { + SysSiteMessageDto messageDto = new SysSiteMessageDto(); + messageDto.setUserIdList(userIdList); + messageDto.setTitle(title); + messageDto.setContent(content); + messageDto.setBizKey(IdUtil.getId()); + messageDto.setCreateUserId(dto.getCreateUserId()); + + mqProducerService.createSysSiteMessage(messageDto); + } + } + break; + } + break; + } + + default: { + throw new DefaultSysException("未知的MessageType: " + messageTypeCode); + } + } + } + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysSiteMessageListener.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysSiteMessageListener.java new file mode 100644 index 0000000..49adcf9 --- /dev/null +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/listeners/mq/SysSiteMessageListener.java @@ -0,0 +1,91 @@ +package com.lframework.starter.mq.rabbitmq.listeners.mq; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.mq.rabbitmq.constants.RabbitMqStringPool; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.dto.message.SysSiteMessageDto; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.service.system.SysSiteMessageService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.websocket.components.WsDataPusher; +import com.lframework.starter.web.websocket.dto.WsPushData; +import java.util.List; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class SysSiteMessageListener { + + @Autowired + private SysSiteMessageService sysSiteMessageService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private WsDataPusher wsDataPusher; + + @RabbitListener(bindings = { + @QueueBinding(value = @Queue(value = RabbitMqStringPool.SYS_SITE_MESSAGE_QUEUE), key = RabbitMqStringPool.SYS_SITE_MESSAGE_ROUTING_KEY, exchange = @Exchange(value = RabbitMqStringPool.SYS_SITE_MESSAGE_EXCHANGE))}) + public void execute(Message message) { + + SysSiteMessageDto dto = message.getPayload(); + log.info("接收到发送站内信消息 {}", dto); + + if (CollectionUtil.isEmpty(dto.getUserIdList())) { + log.info("接收人为空,不发送"); + return; + } + + String title = dto.getTitle(); + String content = dto.getContent(); + if (StringUtil.isBlank(title) || StringUtil.isBlank(content) || StringUtil.isBlank( + dto.getBizKey())) { + log.info("标题、内容、业务键不能为空,不发送"); + return; + } + + SysUser createBy = StringUtil.isBlank(dto.getCreateUserId()) ? null + : sysUserService.findById(dto.getCreateUserId()); + + List recordList = dto.getUserIdList().stream().distinct().map(t -> { + SysSiteMessage record = new SysSiteMessage(); + record.setId(IdUtil.getId()); + record.setTitle(title); + record.setContent(content); + record.setReceiverId(t); + record.setBizKey(dto.getBizKey()); + if (createBy != null) { + record.setCreateById(createBy.getId()); + record.setCreateBy(createBy.getName()); + record.setUpdateBy(createBy.getName()); + record.setUpdateById(createBy.getId()); + } + + return record; + }).collect(Collectors.toList()); + + sysSiteMessageService.saveBatch(recordList); + + for (SysSiteMessage sysSiteMessage : recordList) { + try { + WsPushData pushData = new WsPushData(); + pushData.setBizType("siteMessage"); + pushData.setIncludeUserId(sysSiteMessage.getReceiverId()); + wsDataPusher.push(pushData); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + } +} diff --git a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java index 47d346a..8bb4a0c 100644 --- a/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java +++ b/mq-starter/rabbitmq-starter/src/main/java/com/lframework/starter/mq/rabbitmq/producer/RabbitMqProducer.java @@ -5,8 +5,8 @@ import com.lframework.starter.common.utils.Assert; import com.lframework.starter.mq.core.producer.MqProducer; import com.lframework.starter.mq.core.queue.QueueDefinition; import com.lframework.starter.mq.rabbitmq.queue.RabbitMQQueueDefinition; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.TenantUtil; import java.io.Serializable; import org.springframework.amqp.rabbit.core.RabbitTemplate; diff --git a/pom.xml b/pom.xml index 18ccba1..8f422ba 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 3.1.8 + 4.0.0 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 3.1.8 + 4.0.0 1.18.10 1.7.21 1.1.7 @@ -51,6 +51,7 @@ 3.16.3 3.19.7 5.6.133 + 1.7.4 @@ -58,7 +59,7 @@ web-starter cloud-starter mq-starter - websocket-starter + bpm-starter @@ -135,7 +136,7 @@ com.lframework - websocket-starter + bpm-starter ${jugg.version} @@ -378,6 +379,31 @@ cos_api ${cos_api.version}
+ + + + org.dromara.warm + warm-flow-mybatis-plus-sb-starter + ${warm-flow.version} + + + com.baomidou + mybatis-plus-extension + + + + + + org.dromara.warm + warm-flow-plugin-ui-sb-web + ${warm-flow.version} + + + + org.dromara.warm + warm-flow-plugin-ui-core + ${warm-flow.version} +
diff --git a/web-starter/pom.xml b/web-starter/pom.xml index 195d1d9..342fefb 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 3.1.8 + 4.0.0 4.0.0 @@ -180,5 +180,18 @@ org.springframework.cloud spring-cloud-sleuth-core
+ + + org.freemarker + freemarker + + + org.ssssssss + magic-api-spring-boot-starter + + + org.ssssssss + magic-api-plugin-cluster + diff --git a/web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintBo.java b/web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintBo.java deleted file mode 100644 index 981b660..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintBo.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.lframework.starter.web.bo; - -import com.lframework.starter.web.dto.BaseDto; -import com.lframework.starter.web.utils.PrintUtil; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 打印数据Bo - * - * @param - */ -@Data -public abstract class BasePrintBo> { - - /** - * 打印方向及纸张类型 1---纵向打印,固定纸张; 2---横向打印,固定纸张; 3---纵向打印,宽度固定,高度按打印内容的高度自适应; - * 0---方向不定,由操作者自行选择或按打印机缺省设置。 - */ - @ApiModelProperty("打印方向及纸张类型 1---纵向打印,固定纸张; 2---横向打印,固定纸张; 3---纵向打印,宽度固定,高度按打印内容的高度自适应;0---方向不定,由操作者自行选择或按打印机缺省设置。") - private Integer orient; - - /** - * 纸张宽,单位为0.1mm 譬如该参数值为45,则表示4.5mm,计量精度是0.1mm。 - */ - @ApiModelProperty("纸张宽,单位为0.1mm 譬如该参数值为45,则表示4.5mm,计量精度是0.1mm。") - private Integer pageWidth; - - /** - * 固定纸张时该参数是纸张高;高度自适应时该参数是纸张底边的空白高,计量单位与纸张宽一样。 - */ - @ApiModelProperty("固定纸张时该参数是纸张高;高度自适应时该参数是纸张底边的空白高,计量单位与纸张宽一样。") - private Integer pageHeight; - - /** - * 纸张类型名, pageWidth等于零时本参数才有效,具体名称参见操作系统打印服务属性中的格式定义。 关键字“CreateCustomPage”会在系统内建立一个名称为“LodopCustomPage”自定义纸张类型。 - */ - @ApiModelProperty("纸张类型名, pageWidth等于零时本参数才有效,具体名称参见操作系统打印服务属性中的格式定义。 关键字“CreateCustomPage”会在系统内建立一个名称为“LodopCustomPage”自定义纸张类型。") - private String pageName; - - /** - * 上边距 单位:mm - */ - @ApiModelProperty("上边距 单位:mm") - private Double marginTop; - - /** - * 左边距 单位:mm - */ - @ApiModelProperty("左边距 单位:mm") - private Double marginLeft; - - /** - * 右边距 单位:mm - */ - @ApiModelProperty("右边距 单位:mm") - private Double marginRight; - - /** - * 下边距 单位:mm - */ - @ApiModelProperty("下边距 单位:mm") - private Double marginBottom; - - /** - * 打印html内容 - */ - @ApiModelProperty("打印html内容") - private String html; - - public BasePrintBo() { - - } - - public BasePrintBo(String templateName) { - - this(templateName, null); - } - - public BasePrintBo(String templateName, T data) { - - this.html = PrintUtil.generate(templateName, data); - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintDataBo.java b/web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintDataBo.java deleted file mode 100644 index 5d1d466..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/bo/BasePrintDataBo.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.lframework.starter.web.bo; - -import com.lframework.starter.web.dto.BaseDto; -import lombok.Data; - -@Data -public class BasePrintDataBo extends BaseBo { - - public BasePrintDataBo() { - - } - - public BasePrintDataBo(T dto) { - - super(dto); - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockConditional.java b/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockConditional.java deleted file mode 100644 index 5996252..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockConditional.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.lframework.starter.web.components.redis.locker; - -import org.springframework.context.annotation.Condition; -import org.springframework.context.annotation.ConditionContext; -import org.springframework.core.type.AnnotatedTypeMetadata; - -public class RedisLockConditional implements Condition { - - @Override - public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - - String lockerType = context.getEnvironment().getProperty("jugg.locker.type"); - return "redis".equalsIgnoreCase(lockerType); - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/GenAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/GenAutoConfiguration.java new file mode 100644 index 0000000..c78d4d3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/config/GenAutoConfiguration.java @@ -0,0 +1,227 @@ +package com.lframework.starter.web.config; + +import com.lframework.starter.web.gen.builders.CustomListBuilder; +import com.lframework.starter.web.gen.builders.CustomPageBuilder; +import com.lframework.starter.web.gen.builders.CustomSelectorBuilder; +import com.lframework.starter.web.gen.builders.DataEntityBuilder; +import com.lframework.starter.web.gen.builders.DataObjectBuilder; +import com.lframework.starter.web.gen.controller.GenController; +import com.lframework.starter.web.gen.controller.GenCustomListCategoryController; +import com.lframework.starter.web.gen.controller.GenCustomListController; +import com.lframework.starter.web.gen.controller.GenCustomPageCategoryController; +import com.lframework.starter.web.gen.controller.GenCustomPageController; +import com.lframework.starter.web.gen.controller.GenCustomSelectorCategoryController; +import com.lframework.starter.web.gen.controller.GenCustomSelectorController; +import com.lframework.starter.web.gen.controller.GenDataEntityCategoryController; +import com.lframework.starter.web.gen.controller.GenDataEntityController; +import com.lframework.starter.web.gen.controller.GenDataObjCategoryController; +import com.lframework.starter.web.gen.controller.GenDataObjController; +import com.lframework.starter.web.gen.controller.GenSelectorController; +import com.lframework.starter.web.gen.converters.GenMysqlDataTypeConverter; +import com.lframework.starter.web.gen.converters.GenViewTypeConverter; +import com.lframework.starter.web.gen.impl.GenCreateColumnConfigServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomListCategoryServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomListDetailServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomListHandleColumnServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomListQueryParamsServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomListServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomListToolbarServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomPageCategoryServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomPageServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomSelectorCategoryServiceImpl; +import com.lframework.starter.web.gen.impl.GenCustomSelectorServiceImpl; +import com.lframework.starter.web.gen.impl.GenDataEntityCategoryServiceImpl; +import com.lframework.starter.web.gen.impl.GenDataEntityDetailServiceImpl; +import com.lframework.starter.web.gen.impl.GenDataEntityServiceImpl; +import com.lframework.starter.web.gen.impl.GenDataObjCategoryServiceImpl; +import com.lframework.starter.web.gen.impl.GenDataObjDetailServiceImpl; +import com.lframework.starter.web.gen.impl.GenDataObjQueryDetailServiceImpl; +import com.lframework.starter.web.gen.impl.GenDataObjServiceImpl; +import com.lframework.starter.web.gen.impl.GenDetailColumnConfigServiceImpl; +import com.lframework.starter.web.gen.impl.GenQueryColumnConfigServiceImpl; +import com.lframework.starter.web.gen.impl.GenQueryParamsColumnConfigServiceImpl; +import com.lframework.starter.web.gen.impl.GenUpdateColumnConfigServiceImpl; +import com.lframework.starter.web.gen.impl.GenerateInfoServiceImpl; +import com.lframework.starter.web.gen.impl.SimpleDBServiceImpl; +import com.lframework.starter.web.gen.impl.SimpleTableColumnServiceImpl; +import com.lframework.starter.web.gen.listeners.CreateColumnConfigListener; +import com.lframework.starter.web.gen.listeners.DetailColumnConfigListener; +import com.lframework.starter.web.gen.listeners.GenCustomListListener; +import com.lframework.starter.web.gen.listeners.GenCustomSelectorListener; +import com.lframework.starter.web.gen.listeners.GenDataObjListener; +import com.lframework.starter.web.gen.listeners.GenTenantListener; +import com.lframework.starter.web.gen.listeners.GenerateInfoListener; +import com.lframework.starter.web.gen.listeners.QueryColumnConfigListener; +import com.lframework.starter.web.gen.listeners.QueryParamsColumnConfigListener; +import com.lframework.starter.web.gen.listeners.UpdateColumnConfigListener; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import({ + GenController.class, + GenCustomListCategoryController.class, + GenCustomListController.class, + GenCustomPageCategoryController.class, + GenCustomPageController.class, + GenCustomSelectorCategoryController.class, + GenCustomSelectorController.class, + GenDataEntityCategoryController.class, + GenDataEntityController.class, + GenDataObjCategoryController.class, + GenDataObjController.class, + GenSelectorController.class, + GenCreateColumnConfigServiceImpl.class, + GenCustomListCategoryServiceImpl.class, + GenCustomListDetailServiceImpl.class, + GenCustomListHandleColumnServiceImpl.class, + GenCustomListQueryParamsServiceImpl.class, + GenCustomListServiceImpl.class, + GenCustomListToolbarServiceImpl.class, + GenCustomPageCategoryServiceImpl.class, + GenCustomPageServiceImpl.class, + GenCustomSelectorCategoryServiceImpl.class, + GenCustomSelectorServiceImpl.class, + GenDataEntityCategoryServiceImpl.class, + GenDataEntityDetailServiceImpl.class, + GenDataEntityServiceImpl.class, + GenDataObjCategoryServiceImpl.class, + GenDataObjDetailServiceImpl.class, + GenDataObjQueryDetailServiceImpl.class, + GenDataObjServiceImpl.class, + GenDetailColumnConfigServiceImpl.class, + GenerateInfoServiceImpl.class, + GenQueryColumnConfigServiceImpl.class, + GenQueryParamsColumnConfigServiceImpl.class, + GenUpdateColumnConfigServiceImpl.class, + SimpleDBServiceImpl.class, + SimpleTableColumnServiceImpl.class +}) +public class GenAutoConfiguration { + + @Bean + public CustomListBuilder customListBuilder() { + return new CustomListBuilder(); + } + + @Bean + public CustomPageBuilder customPageBuilder() { + return new CustomPageBuilder(); + } + + @Bean + public CustomSelectorBuilder customSelectorBuilder() { + return new CustomSelectorBuilder(); + } + + @Bean + public DataEntityBuilder dataEntityBuilder() { + return new DataEntityBuilder(); + } + + @Bean + public DataObjectBuilder dataObjectBuilder() { + return new DataObjectBuilder(); + } + + @Bean + public GenMysqlDataTypeConverter genMysqlDataTypeConverter() { + return new GenMysqlDataTypeConverter(); + } + + @Bean + public GenViewTypeConverter genViewTypeConverter() { + return new GenViewTypeConverter(); + } + + @Bean + public CreateColumnConfigListener.DeleteEntityDetailListener createColumnConfigDeleteEntityDetailListener() { + return new CreateColumnConfigListener.DeleteEntityDetailListener(); + } + + @Bean + public CreateColumnConfigListener.DeleteEntityListener deleteEntityListener() { + return new CreateColumnConfigListener.DeleteEntityListener(); + } + + @Bean + public DetailColumnConfigListener.DeleteEntityDetailListener detailColumnConfigDeleteEntityDetailListener() { + return new DetailColumnConfigListener.DeleteEntityDetailListener(); + } + + @Bean + public DetailColumnConfigListener.DeleteEntityListener detailColumnConfigDeleteEntityListener() { + return new DetailColumnConfigListener.DeleteEntityListener(); + } + + @Bean + public GenCustomListListener.DataEntityDetailDeleteListener genCustomListDataEntityDetailDeleteListener() { + return new GenCustomListListener.DataEntityDetailDeleteListener(); + } + + @Bean + public GenCustomListListener.DataObjDeleteListener genCustomListDataObjDeleteListener() { + return new GenCustomListListener.DataObjDeleteListener(); + } + + @Bean + public GenCustomListListener.DataObjQueryDetailDeleteListener genCustomListDataObjQueryDetailDeleteListener() { + return new GenCustomListListener.DataObjQueryDetailDeleteListener(); + } + + @Bean + public GenCustomSelectorListener.CustomListDeleteListener genCustomSelectorCustomListDeleteListener() { + return new GenCustomSelectorListener.CustomListDeleteListener(); + } + + @Bean + public GenDataObjListener.DataEntityDeleteListener genDataObjDataEntityDeleteListener() { + return new GenDataObjListener.DataEntityDeleteListener(); + } + + @Bean + public GenDataObjListener.DataEntityDetailDeleteListener genDataObjDataEntityDetailDeleteListener() { + return new GenDataObjListener.DataEntityDetailDeleteListener(); + } + + @Bean + public GenerateInfoListener.DeleteEntityListener generateInfoDeleteEntityListener() { + return new GenerateInfoListener.DeleteEntityListener(); + } + + @Bean + public GenTenantListener.ReloadTenantListener genTenantReloadTenantListener() { + return new GenTenantListener.ReloadTenantListener(); + } + + @Bean + public QueryColumnConfigListener.DeleteEntityDetailListener queryColumnConfigDeleteEntityDetailListener() { + return new QueryColumnConfigListener.DeleteEntityDetailListener(); + } + + @Bean + public QueryColumnConfigListener.DeleteEntityListener queryColumnConfigDeleteEntityListener() { + return new QueryColumnConfigListener.DeleteEntityListener(); + } + + @Bean + public QueryParamsColumnConfigListener.DeleteEntityDetailListener queryParamsColumnConfigDeleteEntityDetailListener() { + return new QueryParamsColumnConfigListener.DeleteEntityDetailListener(); + } + + @Bean + public QueryParamsColumnConfigListener.DeleteEntityListener queryParamsColumnConfigDeleteEntityListener() { + return new QueryParamsColumnConfigListener.DeleteEntityListener(); + } + + @Bean + public UpdateColumnConfigListener.DeleteEntityDetailListener updateColumnConfigDeleteEntityDetailListener() { + return new UpdateColumnConfigListener.DeleteEntityDetailListener(); + } + + @Bean + public UpdateColumnConfigListener.DeleteEntityListener updateColumnConfigDeleteEntityListener() { + return new UpdateColumnConfigListener.DeleteEntityListener(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/LockAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/LockAutoConfiguration.java index 9d64918..488fffe 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/LockAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/LockAutoConfiguration.java @@ -1,10 +1,10 @@ package com.lframework.starter.web.config; import com.lframework.starter.common.locker.LockBuilder; -import com.lframework.starter.web.annotations.locker.EnableLock; -import com.lframework.starter.web.annotations.locker.LockType; -import com.lframework.starter.web.components.locker.DefaultLockBuilder; -import com.lframework.starter.web.components.redis.locker.RedisLockBuilder; +import com.lframework.starter.web.core.annotations.locker.EnableLock; +import com.lframework.starter.web.core.annotations.locker.LockType; +import com.lframework.starter.web.core.components.locker.DefaultLockBuilder; +import com.lframework.starter.web.core.components.locker.RedisLockBuilder; import java.util.Map; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ImportSelector; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java new file mode 100644 index 0000000..d4caaf7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.config; + +import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; +import com.baomidou.dynamic.datasource.creator.BasicDataSourceCreator; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.config.properties.SecretProperties; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.inner.service.TenantService; +import com.lframework.starter.web.core.utils.DataSourceUtil; +import com.lframework.starter.web.core.utils.EncryptUtil; +import java.util.List; +import java.util.Map; +import javax.sql.DataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource; + +@Configuration +public class MagicCustomAutoConfiguration { + + @Autowired + private DynamicDataSourceProperties dynamicDataSourceProperties; + + @Bean + public TaskScheduler taskScheduler() { + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + taskScheduler.setPoolSize(10); + taskScheduler.initialize(); + return taskScheduler; + } + + @Bean + public MagicDynamicDataSource magicDynamicDataSource(DynamicRoutingDataSource dataSource, + TenantService tenantService, BasicDataSourceCreator basicDataSourceCreator, SecretProperties secretProperties) { + Map dataSourceMap = dataSource.getDataSources(); + MagicDynamicDataSource dynamicDataSource = new MagicDynamicDataSource(); + dynamicDataSource.setDefault(dataSourceMap.get("master")); + + DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource() + .get("master"); + // 这里只加载启用的租户 + Wrapper queryWrapper = Wrappers.lambdaQuery(Tenant.class) + .eq(Tenant::getAvailable, Boolean.TRUE); + List tenants = tenantService.list(queryWrapper); + + for (Tenant tenant : tenants) { + dynamicDataSource.add(String.valueOf(tenant.getId()), + basicDataSourceCreator.createDataSource( + DataSourceUtil.createDataSourceProperty(dataSourceProperty, tenant.getJdbcUrl(), + tenant.getJdbcUsername(), EncryptUtil.decrypt(tenant.getJdbcPassword(), secretProperties)))); + } + + return dynamicDataSource; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java index 3494781..76b8680 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/MailAutoConfiguration.java @@ -2,10 +2,10 @@ package com.lframework.starter.web.config; import cn.hutool.extra.mail.MailAccount; import com.lframework.starter.web.config.properties.MailProperties; -import com.lframework.starter.web.impl.MailServiceImpl; -import com.lframework.starter.web.service.MailService; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.inner.impl.MailServiceImpl; +import com.lframework.starter.web.inner.service.MailService; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.JsonUtil; import com.sun.mail.util.MailSSLSocketFactory; import java.security.GeneralSecurityException; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/MybatisAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/MybatisAutoConfiguration.java index 4c9f348..f12bb66 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/MybatisAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/MybatisAutoConfiguration.java @@ -1,12 +1,18 @@ package com.lframework.starter.web.config; import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer; +import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import com.lframework.starter.web.handlers.DefaultBaseEntityFillHandler; -import com.lframework.starter.web.injectors.MybatisPlusUpdateAllColumnInjector; +import com.lframework.starter.web.core.components.permission.DataPermissionHandlerImpl; +import com.lframework.starter.web.core.handlers.DefaultBaseEntityFillHandler; +import com.lframework.starter.web.core.injectors.MybatisPlusUpdateAllColumnInjector; +import com.lframework.starter.web.core.interceptors.CustomSortInterceptor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -25,8 +31,11 @@ public class MybatisAutoConfiguration { @ConditionalOnMissingBean(MybatisPlusInterceptor.class) public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + interceptor.addInnerInterceptor( + new DataPermissionInterceptor(new DataPermissionHandlerImpl())); + interceptor.addInnerInterceptor(new CustomSortInterceptor()); interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/MybatisBeanAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/MybatisBeanAutoConfiguration.java index 03b8e2a..282b07c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/MybatisBeanAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/MybatisBeanAutoConfiguration.java @@ -1,6 +1,6 @@ package com.lframework.starter.web.config; -import com.lframework.starter.web.components.CaptchaValidator; +import com.lframework.starter.web.core.components.captcha.CaptchaValidator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/PasswordEncoderAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/PasswordEncoderAutoConfiguration.java index 3a16433..db8f1b7 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/PasswordEncoderAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/PasswordEncoderAutoConfiguration.java @@ -1,6 +1,6 @@ package com.lframework.starter.web.config; -import com.lframework.starter.web.components.security.PasswordEncoderWrapper; +import com.lframework.starter.web.core.components.security.PasswordEncoderWrapper; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/RedisAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/RedisAutoConfiguration.java index feaac5e..6cb1e0d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/RedisAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/RedisAutoConfiguration.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; -import com.lframework.starter.web.components.redis.RedisHandler; +import com.lframework.starter.web.core.components.redis.RedisHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/SecurityAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/SecurityAutoConfiguration.java index 21f193b..8821013 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/SecurityAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/SecurityAutoConfiguration.java @@ -1,9 +1,9 @@ package com.lframework.starter.web.config; -import com.lframework.starter.web.components.security.LoginInterceptor; -import com.lframework.starter.web.components.security.PermitAllService; -import com.lframework.starter.web.components.tenant.DefaultTenantInterceptor; -import com.lframework.starter.web.components.tenant.TenantInterceptor; +import com.lframework.starter.web.core.interceptors.LoginInterceptor; +import com.lframework.starter.web.core.components.security.PermitAllService; +import com.lframework.starter.web.core.components.tenant.DefaultTenantInterceptor; +import com.lframework.starter.web.core.components.tenant.TenantInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java index 54069e8..be353fe 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/SwaggerAutoConfiguration.java @@ -1,6 +1,6 @@ package com.lframework.starter.web.config; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; import java.net.InetAddress; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/TenantConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/TenantAutoConfiguration.java similarity index 83% rename from web-starter/src/main/java/com/lframework/starter/web/config/TenantConfiguration.java rename to web-starter/src/main/java/com/lframework/starter/web/config/TenantAutoConfiguration.java index de39f53..70761a7 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/TenantConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/TenantAutoConfiguration.java @@ -4,13 +4,13 @@ import com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import com.lframework.starter.web.config.properties.SecretProperties; -import com.lframework.starter.web.utils.DataSourceUtil; -import com.lframework.starter.web.interceptors.TenantInterceptorImpl; -import com.lframework.starter.web.listeners.TenantListener.ClearTenantListener; -import com.lframework.starter.web.listeners.TenantListener.ReloadTenantListener; -import com.lframework.starter.web.listeners.TenantListener.SetTenantListener; -import com.lframework.starter.web.components.tenant.TenantInterceptor; -import com.lframework.starter.web.utils.EncryptUtil; +import com.lframework.starter.web.core.utils.DataSourceUtil; +import com.lframework.starter.web.core.interceptors.TenantInterceptorImpl; +import com.lframework.starter.web.core.listeners.TenantListener.ClearTenantListener; +import com.lframework.starter.web.core.listeners.TenantListener.ReloadTenantListener; +import com.lframework.starter.web.core.listeners.TenantListener.SetTenantListener; +import com.lframework.starter.web.core.components.tenant.TenantInterceptor; +import com.lframework.starter.web.core.utils.EncryptUtil; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; @@ -25,7 +25,7 @@ import org.springframework.context.annotation.Configuration; @Slf4j @Configuration @ConditionalOnProperty(prefix = "jugg.tenant", value = "enabled", matchIfMissing = false, havingValue = "true") -public class TenantConfiguration { +public class TenantAutoConfiguration { @Autowired private DynamicDataSourceProperties dynamicDataSourceProperties; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/TenantDynamicDataSourceAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/TenantDynamicDataSourceAutoConfiguration.java new file mode 100644 index 0000000..01f6eb4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/config/TenantDynamicDataSourceAutoConfiguration.java @@ -0,0 +1,66 @@ +package com.lframework.starter.web.config; + +import com.baomidou.dynamic.datasource.processor.DsHeaderProcessor; +import com.baomidou.dynamic.datasource.processor.DsProcessor; +import com.baomidou.dynamic.datasource.processor.DsSessionProcessor; +import com.baomidou.dynamic.datasource.processor.DsSpelExpressionProcessor; +import com.baomidou.dynamic.datasource.processor.jakarta.DsJakartaHeaderProcessor; +import com.baomidou.dynamic.datasource.processor.jakarta.DsJakartaSessionProcessor; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.constants.MyBatisStringPool; +import com.lframework.starter.web.core.utils.TenantUtil; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.boot.SpringBootVersion; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@AutoConfigureBefore(value = DynamicDataSourceAutoConfiguration.class) +public class TenantDynamicDataSourceAutoConfiguration { + + public class DsCurTenantProcessor extends DsProcessor { + + private String primary; + + public DsCurTenantProcessor(String primary) { + this.primary = primary; + } + + @Override + public boolean matches(String key) { + return key.equals(MyBatisStringPool.DS_KEY_CUR_TENANT); + } + + @Override + public String doDetermineDatasource(MethodInvocation invocation, String key) { + + if (TenantUtil.enableTenant()) { + return TenantContextHolder.getTenantIdStr(); + } + return this.primary; + } + } + + @Bean + public DsProcessor dsProcessor(DynamicDataSourceProperties properties) { + String version = SpringBootVersion.getVersion(); + DsProcessor headerProcessor; + DsProcessor sessionProcessor; + if (version.startsWith("3")) { + headerProcessor = new DsJakartaHeaderProcessor(); + sessionProcessor = new DsJakartaSessionProcessor(); + } else { + headerProcessor = new DsHeaderProcessor(); + sessionProcessor = new DsSessionProcessor(); + } + DsCurTenantProcessor curTenantProcessor = new DsCurTenantProcessor(properties.getPrimary()); + DsSpelExpressionProcessor spelExpressionProcessor = new DsSpelExpressionProcessor(); + headerProcessor.setNextProcessor(sessionProcessor); + sessionProcessor.setNextProcessor(spelExpressionProcessor); + spelExpressionProcessor.setNextProcessor(curTenantProcessor); + return headerProcessor; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java index 1a6f0ee..19a945e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java @@ -21,16 +21,16 @@ import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.utils.IdWorker; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.security.CheckPermissionHandler; -import com.lframework.starter.web.components.security.CheckPermissionHandlerImpl; -import com.lframework.starter.web.components.security.PermitAllService; -import com.lframework.starter.web.components.trace.DefaultTraceBuilder; -import com.lframework.starter.web.components.trace.TraceBuilder; +import com.lframework.starter.web.core.components.security.CheckPermissionHandler; +import com.lframework.starter.web.core.components.security.CheckPermissionHandlerImpl; +import com.lframework.starter.web.core.components.security.PermitAllService; +import com.lframework.starter.web.core.components.trace.DefaultTraceBuilder; +import com.lframework.starter.web.core.components.trace.TraceBuilder; import com.lframework.starter.web.config.properties.DefaultSettingProperties; import com.lframework.starter.web.config.properties.SecretProperties; import com.lframework.starter.web.config.properties.WebProperties; -import com.lframework.starter.web.sign.CheckSignHandler; -import com.lframework.starter.web.sign.DefaultCheckSignHandler; +import com.lframework.starter.web.core.components.sign.CheckSignHandler; +import com.lframework.starter.web.core.components.sign.DefaultCheckSignHandler; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java index cc854eb..8562db6 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java @@ -1,35 +1,201 @@ package com.lframework.starter.web.config; -import com.lframework.starter.web.aop.ControllerAspector; -import com.lframework.starter.web.aop.OpenApiAspect; -import com.lframework.starter.web.aop.PermissionAspect; -import com.lframework.starter.web.components.cache.CacheVariables; -import com.lframework.starter.web.components.generator.handler.impl.CurrentDateTimeRuleGenerateCodeHandler; -import com.lframework.starter.web.components.generator.handler.impl.CustomRandomStrGenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.handler.impl.FlowGenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.handler.impl.SnowFlakeGenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.handler.impl.StaticStrGenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.handler.impl.UUIDGenerateCodeRuleHandler; -import com.lframework.starter.web.components.security.UserTokenResolver; -import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; -import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.CosSecurityUploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.CosUploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.LocalSecurityUploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.LocalUploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.ObsSecurityUploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.ObsUploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.OssSecurityUploadHandler; -import com.lframework.starter.web.components.upload.handler.impl.OssUploadHandler; -import com.lframework.starter.web.resp.InvokeResultErrorBuilderWrapper; -import com.lframework.starter.web.resp.ResponseErrorBuilder; -import com.lframework.starter.web.sign.CheckSignFactory; -import com.lframework.starter.web.sign.DefaultCheckSignFactory; +import com.lframework.starter.web.core.aop.ControllerAspector; +import com.lframework.starter.web.core.aop.OpLogAspector; +import com.lframework.starter.web.core.aop.OpenApiAspect; +import com.lframework.starter.web.core.aop.OrderTimeLineLogAspect; +import com.lframework.starter.web.core.aop.PermissionAspect; +import com.lframework.starter.web.core.components.cache.CacheVariables; +import com.lframework.starter.web.core.components.generator.handler.impl.CurrentDateTimeRuleGenerateCodeHandler; +import com.lframework.starter.web.core.components.generator.handler.impl.CustomRandomStrGenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.handler.impl.FlowGenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.handler.impl.SnowFlakeGenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.handler.impl.StaticStrGenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.handler.impl.UUIDGenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.resp.InvokeResultErrorBuilderWrapper; +import com.lframework.starter.web.core.components.resp.ResponseErrorBuilder; +import com.lframework.starter.web.core.components.security.UserTokenResolverImpl; +import com.lframework.starter.web.core.components.sign.CheckSignFactory; +import com.lframework.starter.web.core.components.sign.DefaultCheckSignFactory; +import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.UploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.CosSecurityUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.CosUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.LocalSecurityUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.LocalUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.ObsSecurityUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.ObsUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.OssSecurityUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.impl.OssUploadHandler; +import com.lframework.starter.web.core.handlers.exception.WebExceptionHandler; +import com.lframework.starter.web.inner.components.oplog.AuthOpLogType; +import com.lframework.starter.web.inner.components.oplog.OtherOpLogType; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.components.permission.OrderDataPermissionDataPermissionType; +import com.lframework.starter.web.inner.components.permission.ProductDataPermissionDataPermissionType; +import com.lframework.starter.web.inner.components.timeline.ApprovePassOrderTimeLineBizType; +import com.lframework.starter.web.inner.components.timeline.ApproveReturnOrderTimeLineBizType; +import com.lframework.starter.web.inner.components.timeline.CancelApproveOrderTimeLineBizType; +import com.lframework.starter.web.inner.components.timeline.CreateOrderTimeLineBizType; +import com.lframework.starter.web.inner.components.timeline.NormalOrderTimeLineBizType; +import com.lframework.starter.web.inner.components.timeline.SendOrderTimeLineBizType; +import com.lframework.starter.web.inner.components.timeline.UpdateOrderTimeLineBizType; +import com.lframework.starter.web.inner.controller.AuthController; +import com.lframework.starter.web.inner.controller.QrtzController; +import com.lframework.starter.web.inner.controller.UserCenterController; +import com.lframework.starter.web.inner.controller.system.DefaultSysSelectorController; +import com.lframework.starter.web.inner.controller.system.OpLogController; +import com.lframework.starter.web.inner.controller.system.SysDataDicCategoryController; +import com.lframework.starter.web.inner.controller.system.SysDataDicController; +import com.lframework.starter.web.inner.controller.system.SysDataDicItemController; +import com.lframework.starter.web.inner.controller.system.SysDataPermissionDataController; +import com.lframework.starter.web.inner.controller.system.SysDataPermissionModelDetailController; +import com.lframework.starter.web.inner.controller.system.SysDeptController; +import com.lframework.starter.web.inner.controller.system.SysGenerateCodeController; +import com.lframework.starter.web.inner.controller.system.SysMailMessageController; +import com.lframework.starter.web.inner.controller.system.SysMenuController; +import com.lframework.starter.web.inner.controller.system.SysModuleController; +import com.lframework.starter.web.inner.controller.system.SysNoticeController; +import com.lframework.starter.web.inner.controller.system.SysNotifyGroupController; +import com.lframework.starter.web.inner.controller.system.SysOpenDomainController; +import com.lframework.starter.web.inner.controller.system.SysParameterController; +import com.lframework.starter.web.inner.controller.system.SysRoleCategoryController; +import com.lframework.starter.web.inner.controller.system.SysRoleController; +import com.lframework.starter.web.inner.controller.system.SysRoleMenuController; +import com.lframework.starter.web.inner.controller.system.SysSiteMessageController; +import com.lframework.starter.web.inner.controller.system.SysUserController; +import com.lframework.starter.web.inner.controller.system.SysUserGroupController; +import com.lframework.starter.web.inner.controller.system.SysUserRoleController; +import com.lframework.starter.web.inner.controller.system.TenantController; +import com.lframework.starter.web.inner.handlers.exception.AccessDeniedExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.BindExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.ClientExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.ConstraintViolationExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.ExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.FileUploadExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.HttpMessageNotReadableExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.HttpRequestMethodNotSupportedExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.MethodArgumentNotValidExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.NotPermissionExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.SysExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.TypeMismatchExceptionConverter; +import com.lframework.starter.web.inner.handlers.exception.UnexpectedTypeExceptionConverter; +import com.lframework.starter.web.inner.impl.DefaultUserDetailsService; +import com.lframework.starter.web.inner.impl.DicCityServiceImpl; +import com.lframework.starter.web.inner.impl.GenerateCodeServiceImpl; +import com.lframework.starter.web.inner.impl.OpLogsServiceImpl; +import com.lframework.starter.web.inner.impl.OrderTimeLineServiceImpl; +import com.lframework.starter.web.inner.impl.QrtzServiceImpl; +import com.lframework.starter.web.inner.impl.RecursionMappingServiceImpl; +import com.lframework.starter.web.inner.impl.SecurityUploadRecordServiceImpl; +import com.lframework.starter.web.inner.impl.SysModuleServiceImpl; +import com.lframework.starter.web.inner.impl.SysModuleTenantServiceImpl; +import com.lframework.starter.web.inner.impl.TenantServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysDataDicCategoryServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysDataDicItemServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysDataDicServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysDataPermissionDataServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysDataPermissionModelDetailServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysDeptServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysGenerateCodeServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysMailMessageServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysMenuServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysNoticeLogServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysNoticeServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysNotifyGroupReceiverServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysNotifyGroupServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysOpenDomainServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysParameterServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysRoleCategoryServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysRoleMenuServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysRoleServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysSiteMessageServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysUserDeptServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysUserGroupDetailServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysUserGroupServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysUserRoleServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysUserServiceImpl; +import com.lframework.starter.web.inner.impl.system.SysUserTelephoneServiceImpl; +import com.lframework.starter.web.inner.listeners.OpLogTimerListener; +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.env.Environment; +@Slf4j @Configuration -public class WebBeanAutoConfiguration { +@Import({ + WebExceptionHandler.class, + DicCityServiceImpl.class, + GenerateCodeServiceImpl.class, + OpLogsServiceImpl.class, + OrderTimeLineServiceImpl.class, + RecursionMappingServiceImpl.class, + SecurityUploadRecordServiceImpl.class, + DefaultSysSelectorController.class, + OpLogController.class, + SysDataDicCategoryController.class, + SysDataDicController.class, + SysDataDicItemController.class, + SysDataPermissionDataController.class, + SysDataPermissionModelDetailController.class, + SysDeptController.class, + SysGenerateCodeController.class, + SysMailMessageController.class, + SysMenuController.class, + SysModuleController.class, + SysNoticeController.class, + SysNotifyGroupController.class, + SysOpenDomainController.class, + SysParameterController.class, + SysRoleCategoryController.class, + SysRoleController.class, + SysRoleMenuController.class, + SysSiteMessageController.class, + SysUserController.class, + SysUserGroupController.class, + SysUserRoleController.class, + TenantController.class, + AuthController.class, + QrtzController.class, + UserCenterController.class, + SysDataDicCategoryServiceImpl.class, + SysDataDicItemServiceImpl.class, + SysDataDicServiceImpl.class, + SysDataPermissionDataServiceImpl.class, + SysDataPermissionModelDetailServiceImpl.class, + SysDeptServiceImpl.class, + SysGenerateCodeServiceImpl.class, + SysMailMessageServiceImpl.class, + SysMenuServiceImpl.class, + SysNoticeLogServiceImpl.class, + SysNoticeServiceImpl.class, + SysNotifyGroupReceiverServiceImpl.class, + SysNotifyGroupServiceImpl.class, + SysOpenDomainServiceImpl.class, + SysParameterServiceImpl.class, + SysRoleCategoryServiceImpl.class, + SysRoleMenuServiceImpl.class, + SysRoleServiceImpl.class, + SysSiteMessageServiceImpl.class, + SysUserDeptServiceImpl.class, + SysUserGroupDetailServiceImpl.class, + SysUserGroupServiceImpl.class, + SysUserRoleServiceImpl.class, + SysUserServiceImpl.class, + SysUserTelephoneServiceImpl.class, + QrtzServiceImpl.class, + SysModuleServiceImpl.class, + SysModuleTenantServiceImpl.class, + TenantServiceImpl.class, + DefaultUserDetailsService.class +}) +@MapperScan("com.lframework.starter.web.**.mappers") +public class WebBeanAutoConfiguration implements EnvironmentAware { @Bean public ControllerAspector controllerAspector() { @@ -103,8 +269,8 @@ public class WebBeanAutoConfiguration { } @Bean - public UserTokenResolver userTokenResolver() { - return new UserTokenResolver(); + public UserTokenResolverImpl userTokenResolver() { + return new UserTokenResolverImpl(); } @Bean @@ -136,4 +302,150 @@ public class WebBeanAutoConfiguration { public UUIDGenerateCodeRuleHandler uuidGenerateRuleHandler() { return new UUIDGenerateCodeRuleHandler(); } + + @Bean + public OrderDataPermissionDataPermissionType orderDataPermissionDataPermissionType() { + return new OrderDataPermissionDataPermissionType(); + } + + @Bean + public ProductDataPermissionDataPermissionType productDataPermissionDataPermissionType() { + return new ProductDataPermissionDataPermissionType(); + } + + @Bean + public ApprovePassOrderTimeLineBizType approvePassOrderTimeLineBizType() { + return new ApprovePassOrderTimeLineBizType(); + } + + @Bean + public ApproveReturnOrderTimeLineBizType approveReturnOrderTimeLineBizType() { + return new ApproveReturnOrderTimeLineBizType(); + } + + @Bean + public CancelApproveOrderTimeLineBizType cancelApproveOrderTimeLineBizType() { + return new CancelApproveOrderTimeLineBizType(); + } + + @Bean + public CreateOrderTimeLineBizType createOrderTimeLineBizType() { + return new CreateOrderTimeLineBizType(); + } + + @Bean + public NormalOrderTimeLineBizType normalOrderTimeLineBizType() { + return new NormalOrderTimeLineBizType(); + } + + @Bean + public SendOrderTimeLineBizType sendOrderTimeLineBizType() { + return new SendOrderTimeLineBizType(); + } + + @Bean + public UpdateOrderTimeLineBizType updateOrderTimeLineBizType() { + return new UpdateOrderTimeLineBizType(); + } + + @Bean + public AccessDeniedExceptionConverter accessDeniedExceptionConverter() { + return new AccessDeniedExceptionConverter(); + } + + @Bean + public BindExceptionConverter bindExceptionConverter() { + return new BindExceptionConverter(); + } + + @Bean + public ClientExceptionConverter clientExceptionConverter() { + return new ClientExceptionConverter(); + } + + @Bean + public ConstraintViolationExceptionConverter constraintViolationExceptionConverter() { + return new ConstraintViolationExceptionConverter(); + } + + @Bean + public ExceptionConverter exceptionConverter() { + return new ExceptionConverter(); + } + + @Bean + public FileUploadExceptionConverter fileUploadExceptionConverter() { + return new FileUploadExceptionConverter(); + } + + @Bean + public HttpMessageNotReadableExceptionConverter httpMessageNotReadableExceptionConverter() { + return new HttpMessageNotReadableExceptionConverter(); + } + + @Bean + public HttpRequestMethodNotSupportedExceptionConverter httpRequestMethodNotSupportedExceptionConverter() { + return new HttpRequestMethodNotSupportedExceptionConverter(); + } + + @Bean + public MethodArgumentNotValidExceptionConverter methodArgumentNotValidExceptionConverter() { + return new MethodArgumentNotValidExceptionConverter(); + } + + @Bean + public NotPermissionExceptionConverter notPermissionExceptionConverter() { + return new NotPermissionExceptionConverter(); + } + + @Bean + public SysExceptionConverter sysExceptionConverter() { + return new SysExceptionConverter(); + } + + @Bean + public TypeMismatchExceptionConverter typeMismatchExceptionConverter() { + return new TypeMismatchExceptionConverter(); + } + + @Bean + public UnexpectedTypeExceptionConverter unexpectedTypeExceptionConverter() { + return new UnexpectedTypeExceptionConverter(); + } + + @Bean + @ConditionalOnProperty(value = "op-logs.enabled", matchIfMissing = true) + public OpLogAspector opLogAspector() { + return new OpLogAspector(); + } + + @Bean + public OrderTimeLineLogAspect orderTimeLineLogAspect() { + return new OrderTimeLineLogAspect(); + } + + @Bean + public OpLogTimerListener opLogTimerListener() { + return new OpLogTimerListener(); + } + + @Bean + public AuthOpLogType authOpLogType() { + return new AuthOpLogType(); + } + + @Bean + public SystemOpLogType systemOpLogType() { + return new SystemOpLogType(); + } + + @Bean + public OtherOpLogType otherOpLogType() { + return new OtherOpLogType(); + } + + @Override + public void setEnvironment(Environment environment) { + log.info("web-starter加载完成"); + } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebCommonAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebCommonAutoConfiguration.java index 9d410c5..7d33af9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebCommonAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebCommonAutoConfiguration.java @@ -1,6 +1,6 @@ package com.lframework.starter.web.config; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebMvcAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebMvcAutoConfiguration.java index 657d523..508ecd2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebMvcAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebMvcAutoConfiguration.java @@ -1,7 +1,7 @@ package com.lframework.starter.web.config; import cn.dev33.satoken.interceptor.SaAnnotationInterceptor; -import com.lframework.starter.web.components.security.PermitAllService; +import com.lframework.starter.web.core.components.security.PermitAllService; import java.util.Map.Entry; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebSwaggerAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebSwaggerAutoConfiguration.java new file mode 100644 index 0000000..e7333f4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebSwaggerAutoConfiguration.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.config; + +import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@Configuration +public class WebSwaggerAutoConfiguration { + + @Bean("webApiDocket") + public Docket webApiDocket(ApiInfo info, OpenApiExtensionResolver openApiExtensionResolver) { + + // 除了描述 其他全与info保持一致 + ApiInfo apiInfo = new ApiInfo(info.getTitle(), "系统功能模块", info.getVersion(), + info.getTermsOfServiceUrl(), + info.getContact(), info.getLicense(), info.getLicenseUrl(), info.getVendorExtensions()); + + Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).groupName("系统功能模块") + .select() + .apis(RequestHandlerSelectors.basePackage("com.lframework.starter.web.inner")) + .paths(PathSelectors.any()) + .build() + .extensions(openApiExtensionResolver.buildSettingExtensions()); + return docket; + } + + @Bean("genApiDocket") + public Docket genApiDocket(ApiInfo info, OpenApiExtensionResolver openApiExtensionResolver) { + + // 除了描述 其他全与info保持一致 + ApiInfo apiInfo = new ApiInfo(info.getTitle(), "代码生成模块", info.getVersion(), + info.getTermsOfServiceUrl(), + info.getContact(), info.getLicense(), info.getLicenseUrl(), info.getVendorExtensions()); + + Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).groupName("代码生成模块") + .select() + .apis(RequestHandlerSelectors.basePackage("com.lframework.starter.web.gen")) + .paths(PathSelectors.any()) + .build() + .extensions(openApiExtensionResolver.buildSettingExtensions()); + return docket; + } +} diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/config/WsAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WsAutoConfiguration.java similarity index 78% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/config/WsAutoConfiguration.java rename to web-starter/src/main/java/com/lframework/starter/web/config/WsAutoConfiguration.java index 071c304..091e538 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/config/WsAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WsAutoConfiguration.java @@ -1,15 +1,16 @@ -package com.lframework.starter.websocket.config; +package com.lframework.starter.web.config; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.dto.WsPushData; -import com.lframework.starter.web.utils.JsonUtil; -import com.lframework.starter.websocket.components.WsDataPushWorker; -import com.lframework.starter.websocket.components.WsDataPusher; -import com.lframework.starter.websocket.components.WsDataPusherImpl; -import com.lframework.starter.websocket.handler.WsHandler; -import com.lframework.starter.websocket.interceptor.WsHandshakeInterceptor; -import com.lframework.starter.websocket.listener.WsUserConnectListener; -import com.lframework.starter.websocket.listener.WsUserDisConnectListener; +import com.lframework.starter.web.config.properties.WsProperties; +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.websocket.components.WsDataPushWorker; +import com.lframework.starter.web.websocket.components.WsDataPusher; +import com.lframework.starter.web.websocket.components.WsDataPusherImpl; +import com.lframework.starter.web.websocket.handler.WsHandler; +import com.lframework.starter.web.websocket.interceptor.WsHandshakeInterceptor; +import com.lframework.starter.web.websocket.listener.WsUserConnectListener; +import com.lframework.starter.web.websocket.listener.WsUserDisConnectListener; import java.nio.charset.StandardCharsets; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/config/WsProperties.java b/web-starter/src/main/java/com/lframework/starter/web/config/properties/WsProperties.java similarity index 81% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/config/WsProperties.java rename to web-starter/src/main/java/com/lframework/starter/web/config/properties/WsProperties.java index ef8ff21..01b64ea 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/config/WsProperties.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/properties/WsProperties.java @@ -1,6 +1,5 @@ -package com.lframework.starter.websocket.config; +package com.lframework.starter.web.config.properties; -import com.lframework.starter.web.utils.IdUtil; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/constants/EncryType.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/constants/EncryType.java similarity index 83% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/constants/EncryType.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/constants/EncryType.java index 935a91b..85ace72 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/constants/EncryType.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/constants/EncryType.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.annotations.constants; +package com.lframework.starter.web.core.annotations.constants; public enum EncryType { // 自动 diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/convert/EncryptConvert.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/EncryptConvert.java similarity index 78% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/convert/EncryptConvert.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/EncryptConvert.java index 8c731a8..d079c24 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/convert/EncryptConvert.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/EncryptConvert.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.annotations.convert; +package com.lframework.starter.web.core.annotations.convert; -import com.lframework.starter.web.annotations.constants.EncryType; +import com.lframework.starter.web.core.annotations.constants.EncryType; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/convert/EnumConvert.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/EnumConvert.java similarity index 86% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/convert/EnumConvert.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/EnumConvert.java index e825fd1..ba1ec97 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/convert/EnumConvert.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/EnumConvert.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.annotations.convert; +package com.lframework.starter.web.core.annotations.convert; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/convert/IgnoreConvert.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/IgnoreConvert.java similarity index 85% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/convert/IgnoreConvert.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/IgnoreConvert.java index 4b1e56e..202befc 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/convert/IgnoreConvert.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/convert/IgnoreConvert.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.annotations.convert; +package com.lframework.starter.web.core.annotations.convert; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/ds/CurTenantDs.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/ds/CurTenantDs.java new file mode 100644 index 0000000..14df40e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/ds/CurTenantDs.java @@ -0,0 +1,17 @@ +package com.lframework.starter.web.core.annotations.ds; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.lframework.starter.web.core.constants.MyBatisStringPool; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@DS(MyBatisStringPool.DS_KEY_CUR_TENANT) +public @interface CurTenantDs { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/excel/ExcelRequired.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/excel/ExcelRequired.java similarity index 84% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/excel/ExcelRequired.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/excel/ExcelRequired.java index 3a78104..4778de2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/excel/ExcelRequired.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/excel/ExcelRequired.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.annotations.excel; +package com.lframework.starter.web.core.annotations.excel; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/locker/EnableLock.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/locker/EnableLock.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/locker/EnableLock.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/locker/EnableLock.java index fdddbbf..7e1b78e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/locker/EnableLock.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/locker/EnableLock.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.annotations.locker; +package com.lframework.starter.web.core.annotations.locker; import com.lframework.starter.web.config.LockAutoConfiguration; import java.lang.annotation.Documented; diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/locker/LockType.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/locker/LockType.java similarity index 42% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/locker/LockType.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/locker/LockType.java index cb19a65..e8dea5d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/locker/LockType.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/locker/LockType.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.annotations.locker; +package com.lframework.starter.web.core.annotations.locker; public enum LockType { DEFAULT, REDIS diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/OpenApi.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/openapi/OpenApi.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/OpenApi.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/openapi/OpenApi.java index 37bc627..ded0cce 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/OpenApi.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/openapi/OpenApi.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.annotations; +package com.lframework.starter.web.core.annotations.openapi; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/oplog/OpLog.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/oplog/OpLog.java new file mode 100644 index 0000000..e60a95c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/oplog/OpLog.java @@ -0,0 +1,54 @@ +package com.lframework.starter.web.core.annotations.oplog; + +import com.lframework.starter.web.core.components.oplog.OpLogType; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 系统日志注解 + * + * @author zmj + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface OpLog { + + /** + * 日志类型 用于做业务区分 + * + * @return + */ + Class type(); + + /** + * 日志名称 需要填充参数部分用{}占位,会根据params的值进行填充 + * + * @return + */ + String name() default ""; + + /** + * 需要保存的参数 Spel表达式 + * + * @return + */ + String[] params() default {}; + + /** + * 是否循环填充日志名称 会将params中的collection循环format + * + * @return + */ + boolean loopFormat() default false; + + /** + * 是否自动保存参数 + * + * @return + */ + boolean autoSaveParams() default false; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermission.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermission.java new file mode 100644 index 0000000..9755045 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermission.java @@ -0,0 +1,17 @@ +package com.lframework.starter.web.core.annotations.permission; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataPermission { + + String template(); + + String alias(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissionGroup.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissionGroup.java new file mode 100644 index 0000000..b98f582 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissionGroup.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.core.annotations.permission; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataPermissionGroup { + + DataPermissions[] value(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissions.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissions.java new file mode 100644 index 0000000..15e3e10 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/permission/DataPermissions.java @@ -0,0 +1,18 @@ +package com.lframework.starter.web.core.annotations.permission; + +import com.lframework.starter.web.core.components.permission.SysDataPermissionDataPermissionType; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataPermissions { + + Class type(); + + DataPermission[] value(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/annotations/security/HasPermission.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/security/HasPermission.java similarity index 77% rename from web-starter/src/main/java/com/lframework/starter/web/annotations/security/HasPermission.java rename to web-starter/src/main/java/com/lframework/starter/web/core/annotations/security/HasPermission.java index 3b21b9f..49d5ea7 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/annotations/security/HasPermission.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/security/HasPermission.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.annotations.security; +package com.lframework.starter.web.core.annotations.security; -import com.lframework.starter.web.components.security.PermissionCalcType; +import com.lframework.starter.web.core.components.security.PermissionCalcType; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sort.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sort.java new file mode 100644 index 0000000..7f49fc2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sort.java @@ -0,0 +1,36 @@ +package com.lframework.starter.web.core.annotations.sort; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Sort { + + /** + * 传入列名 + * + * @return + */ + String value(); + + /** + * SQL列名 + * + * @return + */ + String alias() default ""; + + /** + * 是否自动解析 + *

+ * 如果自动解析,那么alias只需要指定表的别名即可,会直接将alias和转为下划线的value拼接作为SQL列名 + * + * @return + */ + boolean autoParse() default false; +} \ No newline at end of file diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sorts.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sorts.java new file mode 100644 index 0000000..03a709a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/sort/Sorts.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.core.annotations.sort; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Sorts { + + Sort[] value(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/annotations/timeline/OrderTimeLineLog.java b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/timeline/OrderTimeLineLog.java new file mode 100644 index 0000000..ce6bad2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/annotations/timeline/OrderTimeLineLog.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.core.annotations.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; +import com.lframework.starter.web.inner.components.timeline.NormalOrderTimeLineBizType; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 单据时间轴记录 + * 如果出现嵌套那么以最外层的为准,不会进行嵌套隔离 + * @author zmj + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface OrderTimeLineLog { + + /** + * 业务类型 + * + * @return + */ + Class type() default NormalOrderTimeLineBizType.class; + + /** + * 单据ID + * @return + */ + String[] orderId(); + + /** + * 内容 需要填充参数部分用{}占位,会根据params的值进行填充 + * + * @return + */ + String name() default ""; + + /** + * 需要保存的参数 Spel表达式 + * + * @return + */ + String[] params() default {}; + + /** + * 是否循环填充内容 会将params中的collection循环format + * + * @return + */ + boolean loopFormat() default false; + + /** + * 是否为删除操作 + * 如果为删除操作,那么忽略type、name、loopFormat,直接根据orderId进行删除操作 + * @return + */ + boolean delete() default false; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/aop/ControllerAspector.java b/web-starter/src/main/java/com/lframework/starter/web/core/aop/ControllerAspector.java similarity index 95% rename from web-starter/src/main/java/com/lframework/starter/web/aop/ControllerAspector.java rename to web-starter/src/main/java/com/lframework/starter/web/core/aop/ControllerAspector.java index db30c3e..899a1af 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/aop/ControllerAspector.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/aop/ControllerAspector.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.aop; +package com.lframework.starter.web.core.aop; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.utils.JsonUtil; import java.util.LinkedList; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -13,7 +13,6 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/aop/OpLogAspector.java b/web-starter/src/main/java/com/lframework/starter/web/core/aop/OpLogAspector.java new file mode 100644 index 0000000..36d365f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/aop/OpLogAspector.java @@ -0,0 +1,194 @@ +package com.lframework.starter.web.core.aop; + +import com.lframework.starter.common.utils.ArrayUtil; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.oplog.OpLogType; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.SpelUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.inner.vo.oplogs.CreateOpLogsVo; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.expression.EvaluationContext; + +/** + * OpLog切面 + * + * @author zmj + */ +@Slf4j +@Aspect +public class OpLogAspector { + + @Pointcut("@annotation(com.lframework.starter.web.core.annotations.oplog.OpLog)") + public void opLogCutPoint() { + + } + + @Around(value = "opLogCutPoint()") + public Object opLog(ProceedingJoinPoint joinPoint) throws Throwable { + + try { + //生成logId,多层嵌套时,隔离不同bean的数据 + String logId = IdUtil.getUUID(); + OpLogUtil.init(logId); + + AbstractUserDetails currentUser = SecurityUtil.getCurrentUser(); + + Object value = joinPoint.proceed(); + + if (currentUser == null) { + currentUser = SecurityUtil.getCurrentUser(); + } + + if (currentUser != null) { + try { + //获取方法的参数名和参数值 + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + List paramNameList = Arrays.asList(methodSignature.getParameterNames()); + List paramList = Arrays.asList(joinPoint.getArgs()); + + //将方法的参数名和参数值一一对应的放入上下文中 + EvaluationContext ctx = SpelUtil.buildContext(); + for (int i = 0; i < paramNameList.size(); i++) { + ctx.setVariable(paramNameList.get(i), paramList.get(i)); + } + + //将返回值放入上下文中 + ctx.setVariable("_result", value); + + Map variables = OpLogUtil.getVariables(); + if (!CollectionUtil.isEmpty(variables)) { + variables.forEach((k, v) -> { + ctx.setVariable(k, v); + }); + } + + // 解析SpEL表达式获取结果 + Object[] params; + OpLog opLog = methodSignature.getMethod().getAnnotation(OpLog.class); + if (!ArrayUtil.isEmpty(opLog.params())) { + params = new Object[opLog.params().length]; + for (int i = 0; i < opLog.params().length; i++) { + String param = opLog.params()[i]; + Object p = SpelUtil.parse(param, ctx); + params[i] = p; + } + } else { + params = new String[0]; + } + + List paramsList = new ArrayList<>(); + //循环format + if (opLog.loopFormat() && Arrays.stream(params).anyMatch(t -> t instanceof Collection)) { + String[] strParams = new String[params.length]; + //collectionIndex的索引 + List collectionIndexes = new ArrayList<>(); + for (int i = 0; i < params.length; i++) { + //先处理不是Collection的元素 + if (params[i] instanceof Collection) { + collectionIndexes.add(i); + continue; + } + strParams[i] = params[i] == null ? null : params[i].toString(); + } + + paramsList.add(strParams); + + if (!CollectionUtil.isEmpty(collectionIndexes)) { + //将所有的collection组合,例:collection1的size是2 collection2的size是3 则组合后的条数为2*3=6 + for (Integer collectionIndex : collectionIndexes) { + List tmpParamsList = new ArrayList<>(); + for (String[] paramsArr : paramsList) { + + Collection collection = (Collection) params[collectionIndex]; + for (Object o : collection) { + String[] tmp = new String[paramsArr.length]; + for (int j = 0; j < paramsArr.length; j++) { + if (j == collectionIndex) { + tmp[j] = o == null ? null : o.toString(); + } else { + tmp[j] = paramsArr[j]; + } + } + + tmpParamsList.add(tmp); + } + } + + paramsList.clear(); + paramsList.addAll(tmpParamsList); + } + } else { + paramsList.add(strParams); + } + } else { + String[] strParams = new String[params.length]; + for (int i = 0; i < params.length; i++) { + strParams[i] = params[i] == null ? null : params[i].toString(); + } + paramsList.add(strParams); + } + + List createOpLogsVoList = new ArrayList<>(); + for (String[] strArr : paramsList) { + String extra = OpLogUtil.getExtra(); + if (extra == null) { + if (opLog.autoSaveParams()) { + // 没有手动指定extra + if (CollectionUtil.isNotEmpty(paramNameList)) { + if (paramNameList.size() == 1) { + // 只有一个参数 + OpLogUtil.setExtra(ctx.lookupVariable(paramNameList.get(0))); + } else { + // 多个参数 + Map paramMap = new LinkedHashMap<>(paramNameList.size(), 1); + for (String paramName : paramNameList) { + paramMap.put(paramName, ctx.lookupVariable(paramName)); + } + OpLogUtil.setExtra(paramMap); + } + } + extra = OpLogUtil.getExtra(); + } + } + + String finalExtra = extra; + CreateOpLogsVo vo = new CreateOpLogsVo(); + vo.setName(StringUtil.format(opLog.name(), strArr)); + OpLogType opLogTypeBean = ApplicationUtil.getBean(opLog.type()); + vo.setLogType(opLogTypeBean.getCode()); + vo.setExtra(finalExtra); + vo.setIp(currentUser.getIp()); + createOpLogsVoList.add(vo); + } + + if (CollectionUtil.isNotEmpty(createOpLogsVoList)) { + OpLogUtil.addLogs(createOpLogsVoList); + } + OpLogUtil.submitLog(currentUser); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + return value; + } finally { + OpLogUtil.clear(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/aop/OpenApiAspect.java b/web-starter/src/main/java/com/lframework/starter/web/core/aop/OpenApiAspect.java similarity index 80% rename from web-starter/src/main/java/com/lframework/starter/web/aop/OpenApiAspect.java rename to web-starter/src/main/java/com/lframework/starter/web/core/aop/OpenApiAspect.java index 4ebf004..9dae659 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/aop/OpenApiAspect.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/aop/OpenApiAspect.java @@ -1,13 +1,13 @@ -package com.lframework.starter.web.aop; +package com.lframework.starter.web.core.aop; import com.lframework.starter.common.exceptions.impl.AccessDeniedException; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; -import com.lframework.starter.web.annotations.OpenApi; -import com.lframework.starter.web.sign.CheckSignFactory; -import com.lframework.starter.web.sign.CheckSignHandler; -import com.lframework.starter.web.utils.ApplicationUtil; -import com.lframework.starter.web.vo.OpenApiReqVo; +import com.lframework.starter.web.core.annotations.openapi.OpenApi; +import com.lframework.starter.web.core.components.sign.CheckSignFactory; +import com.lframework.starter.web.core.components.sign.CheckSignHandler; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.vo.openapi.OpenApiReqVo; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory; @Aspect public class OpenApiAspect { - @Pointcut("(@within(org.springframework.web.bind.annotation.RestController) || @within(org.springframework.stereotype.Controller)) && @annotation(com.lframework.starter.web.annotations.OpenApi) && execution(public * *(..))") + @Pointcut("(@within(org.springframework.web.bind.annotation.RestController) || @within(org.springframework.stereotype.Controller)) && @annotation(com.lframework.starter.web.core.annotations.openapi.OpenApi) && execution(public * *(..))") public void openApiPointCut() { } diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/aop/OrderTimeLineLogAspect.java b/web-starter/src/main/java/com/lframework/starter/web/core/aop/OrderTimeLineLogAspect.java new file mode 100644 index 0000000..cc216fc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/aop/OrderTimeLineLogAspect.java @@ -0,0 +1,222 @@ +package com.lframework.starter.web.core.aop; + +import com.lframework.starter.common.utils.ArrayUtil; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.config.properties.DefaultSettingProperties; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.SpelUtil; +import com.lframework.starter.web.core.annotations.timeline.OrderTimeLineLog; +import com.lframework.starter.web.inner.entity.OrderTimeLine; +import com.lframework.starter.web.inner.service.OrderTimeLineService; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.expression.EvaluationContext; + +/** + * 单据时间轴切面 + * + * @author zmj + */ +@Slf4j +@Aspect +public class OrderTimeLineLogAspect { + + @Autowired + private DefaultSettingProperties defaultSettingProperties; + + private final ThreadLocal POOL = new InheritableThreadLocal<>(); + + @Pointcut("@annotation(com.lframework.starter.web.core.annotations.timeline.OrderTimeLineLog)") + public void orderTimeLineLogCutPoint() { + + } + + @Around(value = "orderTimeLineLogCutPoint()") + public Object orderTimeLineLog(ProceedingJoinPoint joinPoint) throws Throwable { + + AbstractUserDetails currentUser = SecurityUtil.getCurrentUser(); + + String curUserId = + currentUser == null ? defaultSettingProperties.getDefaultUserId() : currentUser.getId(); + String curUserName = + currentUser == null ? defaultSettingProperties.getDefaultUserName() : currentUser.getName(); + + Object value = null; + + try { + if (POOL.get() != null) { + POOL.set(POOL.get() + 1); + // 如果出现嵌套,那么以最外层的为准,不进行嵌套隔离 + return joinPoint.proceed(); + } + + POOL.set(1); + + value = joinPoint.proceed(); + + try { + //获取方法的参数名和参数值 + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + List paramNameList = Arrays.asList(methodSignature.getParameterNames()); + List paramList = Arrays.asList(joinPoint.getArgs()); + + //将方法的参数名和参数值一一对应的放入上下文中 + EvaluationContext ctx = SpelUtil.buildContext(); + for (int i = 0; i < paramNameList.size(); i++) { + ctx.setVariable(paramNameList.get(i), paramList.get(i)); + } + + //将返回值放入上下文中 + ctx.setVariable("_result", value); + + // 解析SpEL表达式获取结果 + Object[] params; + OrderTimeLineLog orderTimeLineLog = methodSignature.getMethod() + .getAnnotation(OrderTimeLineLog.class); + if (!ArrayUtil.isEmpty(orderTimeLineLog.params())) { + params = new Object[orderTimeLineLog.params().length]; + for (int i = 0; i < orderTimeLineLog.params().length; i++) { + String param = orderTimeLineLog.params()[i]; + Object p = SpelUtil.parse(param, ctx); + params[i] = p; + } + } else { + params = new String[0]; + } + + List paramsList = new ArrayList<>(); + //循环format + if (orderTimeLineLog.loopFormat() && Arrays.stream(params) + .anyMatch(t -> t instanceof Collection)) { + String[] strParams = new String[params.length]; + //collectionIndex的索引 + List collectionIndexes = new ArrayList<>(); + for (int i = 0; i < params.length; i++) { + //先处理不是Collection的元素 + if (params[i] instanceof Collection) { + collectionIndexes.add(i); + continue; + } + strParams[i] = params[i] == null ? null : params[i].toString(); + } + + paramsList.add(strParams); + + if (!CollectionUtil.isEmpty(collectionIndexes)) { + //将所有的collection组合,例:collection1的size是2 collection2的size是3 则组合后的条数为2*3=6 + for (Integer collectionIndex : collectionIndexes) { + List tmpParamsList = new ArrayList<>(); + for (String[] paramsArr : paramsList) { + + Collection collection = (Collection) params[collectionIndex]; + for (Object o : collection) { + String[] tmp = new String[paramsArr.length]; + for (int j = 0; j < paramsArr.length; j++) { + if (j == collectionIndex) { + tmp[j] = o == null ? null : o.toString(); + } else { + tmp[j] = paramsArr[j]; + } + } + + tmpParamsList.add(tmp); + } + } + + paramsList.clear(); + paramsList.addAll(tmpParamsList); + } + } else { + paramsList.add(strParams); + } + } else { + String[] strParams = new String[params.length]; + for (int i = 0; i < params.length; i++) { + strParams[i] = params[i] == null ? null : params[i].toString(); + } + paramsList.add(strParams); + } + + Object[] orderIds; + if (!ArrayUtil.isEmpty(orderTimeLineLog.orderId())) { + orderIds = new Object[orderTimeLineLog.orderId().length]; + for (int i = 0; i < orderTimeLineLog.orderId().length; i++) { + String orderId = orderTimeLineLog.orderId()[i]; + Object p = SpelUtil.parse(orderId, ctx); + orderIds[i] = p; + } + } else { + orderIds = new String[0]; + } + + List orderIdList = new ArrayList<>(); + for (Object orderId : orderIds) { + if (orderId == null) { + continue; + } + + if (orderId instanceof Collection) { + Collection c = (Collection) orderId; + CollectionUtil.forEach(c, (item, index) -> orderIdList.add(item.toString())); + } + + orderIdList.add(orderId.toString()); + } + + if (orderTimeLineLog.delete()) { + for (String orderId : orderIdList) { + // 这里不异步,在同事务内执行 + OrderTimeLineService orderTimeLineService = ApplicationUtil.getBean( + OrderTimeLineService.class); + orderTimeLineService.deleteByOrder(orderId); + orderTimeLineService.cleanCacheByKey(orderId); + } + } else { + List records = new ArrayList<>(); + OrderTimeLineService orderTimeLineService = ApplicationUtil.getBean( + OrderTimeLineService.class); + for (String[] strArr : paramsList) { + for (String orderId : orderIdList) { + OrderTimeLine record = new OrderTimeLine(); + record.setId(IdUtil.getId()); + record.setOrderId(orderId); + record.setContent(StringUtil.format(orderTimeLineLog.name(), strArr)); + record.setCreateBy(curUserName); + record.setCreateById(curUserId); + record.setBizType(ApplicationUtil.getBean(orderTimeLineLog.type()).getCode()); + records.add(record); + } + } + if (CollectionUtil.isNotEmpty(records)) { + // 这里不异步,在同事务内执行 + orderTimeLineService.saveBatch(records); + orderTimeLineService.cleanCacheByKeys(orderIdList); + } + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } finally { + if (POOL.get() != null) { + POOL.set(POOL.get() - 1); + if (POOL.get() <= 0) { + POOL.remove(); + } + } + } + return value; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/aop/PermissionAspect.java b/web-starter/src/main/java/com/lframework/starter/web/core/aop/PermissionAspect.java similarity index 75% rename from web-starter/src/main/java/com/lframework/starter/web/aop/PermissionAspect.java rename to web-starter/src/main/java/com/lframework/starter/web/core/aop/PermissionAspect.java index 765fc29..589283c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/aop/PermissionAspect.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/aop/PermissionAspect.java @@ -1,15 +1,14 @@ -package com.lframework.starter.web.aop; +package com.lframework.starter.web.core.aop; import com.lframework.starter.common.exceptions.impl.AccessDeniedException; -import com.lframework.starter.web.annotations.security.HasPermission; -import com.lframework.starter.web.components.security.CheckPermissionHandler; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.components.security.CheckPermissionHandler; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; /** * 鉴权切面 @@ -22,7 +21,7 @@ public class PermissionAspect { @Autowired private CheckPermissionHandler checkPermissionHandler; - @Pointcut("@annotation(com.lframework.starter.web.annotations.security.HasPermission) && execution(public * *(..))") + @Pointcut("@annotation(com.lframework.starter.web.core.annotations.security.HasPermission) && execution(public * *(..))") public void permissionPointCut() { } diff --git a/web-starter/src/main/java/com/lframework/starter/web/bo/BaseBo.java b/web-starter/src/main/java/com/lframework/starter/web/core/bo/BaseBo.java similarity index 85% rename from web-starter/src/main/java/com/lframework/starter/web/bo/BaseBo.java rename to web-starter/src/main/java/com/lframework/starter/web/core/bo/BaseBo.java index 3b84fed..9257571 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/bo/BaseBo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/bo/BaseBo.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.bo; +package com.lframework.starter.web.core.bo; import com.lframework.starter.common.functions.SFunction; -import com.lframework.starter.web.dto.BaseDto; -import com.lframework.starter.web.utils.BoUtil; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.utils.BoUtil; import java.io.Serializable; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/bo/ExcelImportBo.java b/web-starter/src/main/java/com/lframework/starter/web/core/bo/ExcelImportBo.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/bo/ExcelImportBo.java rename to web-starter/src/main/java/com/lframework/starter/web/core/bo/ExcelImportBo.java index ee07c85..5f84181 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/bo/ExcelImportBo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/bo/ExcelImportBo.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.bo; +package com.lframework.starter.web.core.bo; -import com.lframework.starter.web.dto.VoidDto; +import com.lframework.starter.web.core.dto.VoidDto; import io.swagger.annotations.ApiModelProperty; import java.util.ArrayList; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/bo/SuperBo.java b/web-starter/src/main/java/com/lframework/starter/web/core/bo/SuperBo.java similarity index 77% rename from web-starter/src/main/java/com/lframework/starter/web/bo/SuperBo.java rename to web-starter/src/main/java/com/lframework/starter/web/core/bo/SuperBo.java index 7c981c8..3466d2e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/bo/SuperBo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/bo/SuperBo.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.bo; +package com.lframework.starter.web.core.bo; /** * SuperBo 所有基于Dto的Bo可以继承BaseBo,不基于Dto的Bo无法继承BaseBo可以直接实现SuperBo diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/cache/CacheVariables.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/cache/CacheVariables.java similarity index 70% rename from web-starter/src/main/java/com/lframework/starter/web/components/cache/CacheVariables.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/cache/CacheVariables.java index e7262cc..5c3d4ba 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/cache/CacheVariables.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/cache/CacheVariables.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.components.cache; +package com.lframework.starter.web.core.components.cache; import com.lframework.starter.common.constants.StringPool; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.TenantUtil; /** * 缓存变量 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/CaptchaValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/captcha/CaptchaValidator.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/components/CaptchaValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/captcha/CaptchaValidator.java index 27eaa93..11b6eae 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/CaptchaValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/captcha/CaptchaValidator.java @@ -1,12 +1,11 @@ -package com.lframework.starter.web.components; +package com.lframework.starter.web.core.components.captcha; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.impl.DefaultClientException; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.redis.RedisHandler; +import com.lframework.starter.web.core.components.redis.RedisHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; /** * 验证码校验 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelEventListener.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelEventListener.java similarity index 82% rename from web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelEventListener.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelEventListener.java index 89126cf..65c3ebf 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelEventListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelEventListener.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.excel; +package com.lframework.starter.web.core.components.excel; import com.alibaba.excel.event.AnalysisEventListener; import lombok.extern.slf4j.Slf4j; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelHorizontalCellStyleStrategy.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelHorizontalCellStyleStrategy.java similarity index 98% rename from web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelHorizontalCellStyleStrategy.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelHorizontalCellStyleStrategy.java index 9bb9fcc..5d1e6d4 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelHorizontalCellStyleStrategy.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelHorizontalCellStyleStrategy.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.excel; +package com.lframework.starter.web.core.components.excel; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.util.StyleUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelImportListener.java similarity index 95% rename from web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelImportListener.java index 3897514..0c4e91a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelImportListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelImportListener.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.excel; +package com.lframework.starter.web.core.components.excel; import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; @@ -8,11 +8,11 @@ import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.NumberUtil; import com.lframework.starter.common.utils.ReflectUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.annotations.excel.ExcelRequired; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.ApplicationUtil; -import com.lframework.starter.web.utils.ExcelImportUtil; -import com.lframework.starter.web.utils.TransactionUtil; +import com.lframework.starter.web.core.annotations.excel.ExcelRequired; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ExcelImportUtil; +import com.lframework.starter.web.core.utils.TransactionUtil; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelModel.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelModel.java similarity index 56% rename from web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelModel.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelModel.java index d3298fd..d5f9efd 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelModel.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelModel.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.excel; +package com.lframework.starter.web.core.components.excel; /** * Excel Bean diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelMultipartWriterBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelMultipartWriterBuilder.java similarity index 98% rename from web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelMultipartWriterBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelMultipartWriterBuilder.java index 5c3f6bc..8b5ecb2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelMultipartWriterBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelMultipartWriterBuilder.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.excel; +package com.lframework.starter.web.core.components.excel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.support.ExcelTypeEnum; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelMultipartWriterSheetBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelMultipartWriterSheetBuilder.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelMultipartWriterSheetBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelMultipartWriterSheetBuilder.java index 8a342d8..9e09417 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/excel/ExcelMultipartWriterSheetBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/excel/ExcelMultipartWriterSheetBuilder.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.excel; +package com.lframework.starter.web.core.components.excel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.exception.ExcelGenerateException; @@ -6,7 +6,7 @@ import com.alibaba.excel.write.builder.AbstractExcelWriterParameterBuilder; import com.alibaba.excel.write.metadata.WriteSheet; import com.lframework.starter.common.utils.BeanUtil; import com.lframework.starter.common.utils.CollectionUtil; -import com.lframework.starter.web.utils.ExcelUtil; +import com.lframework.starter.web.core.utils.ExcelUtil; import java.util.List; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/GenerateCodeFactory.java similarity index 89% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/GenerateCodeFactory.java index 7f6542e..e204eba 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/GenerateCodeFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/GenerateCodeFactory.java @@ -1,13 +1,13 @@ -package com.lframework.starter.web.components.generator; +package com.lframework.starter.web.core.components.generator; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.web.utils.ApplicationUtil; -import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.utils.JsonUtil; import java.util.ArrayList; import java.util.Collection; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/GenerateCodeRuleHandler.java similarity index 79% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/GenerateCodeRuleHandler.java index 4761f0f..ee880b2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/GenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/GenerateCodeRuleHandler.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.components.generator.handler; +package com.lframework.starter.web.core.components.generator.handler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; public interface GenerateCodeRuleHandler { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java similarity index 72% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java index 3701b28..17fd2b3 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/CurrentDateTimeRuleGenerateCodeHandler.java @@ -1,11 +1,11 @@ -package com.lframework.starter.web.components.generator.handler.impl; +package com.lframework.starter.web.core.components.generator.handler.impl; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.impl.CurrentDateTimeGenerateCodeRule; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.impl.CurrentDateTimeGenerateCodeRule; +import com.lframework.starter.web.core.utils.JsonUtil; import java.time.LocalDateTime; public class CurrentDateTimeRuleGenerateCodeHandler implements diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java similarity index 76% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java index 3bbe46d..057b819 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/CustomRandomStrGenerateCodeRuleHandler.java @@ -1,13 +1,13 @@ -package com.lframework.starter.web.components.generator.handler.impl; +package com.lframework.starter.web.core.components.generator.handler.impl; import cn.hutool.core.util.RandomUtil; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.impl.CustomRandomStrGenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.impl.RandomIntGenerateCodeRule; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.impl.CustomRandomStrGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.impl.RandomIntGenerateCodeRule; +import com.lframework.starter.web.core.utils.JsonUtil; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java similarity index 82% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java index 69f6abb..d9a394b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/FlowGenerateCodeRuleHandler.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.generator.handler.impl; +package com.lframework.starter.web.core.components.generator.handler.impl; import com.lframework.starter.common.exceptions.impl.DefaultClientException; import com.lframework.starter.common.exceptions.impl.DefaultSysException; @@ -6,14 +6,14 @@ import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.impl.FlowGenerateCodeRule; -import com.lframework.starter.web.components.redis.RedisHandler; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.IdUtil; -import com.lframework.starter.web.utils.JsonUtil; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.impl.FlowGenerateCodeRule; +import com.lframework.starter.web.core.components.redis.RedisHandler; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.core.utils.TenantUtil; import java.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java similarity index 70% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java index 4fa3509..bb1374c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/SnowFlakeGenerateCodeRuleHandler.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.components.generator.handler.impl; +package com.lframework.starter.web.core.components.generator.handler.impl; import com.lframework.starter.common.utils.IdWorker; -import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.impl.SnowFlakeGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.impl.SnowFlakeGenerateCodeRule; import org.springframework.beans.factory.annotation.Autowired; public class SnowFlakeGenerateCodeRuleHandler implements diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java similarity index 67% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java index c67c275..c8bd876 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/StaticStrGenerateCodeRuleHandler.java @@ -1,10 +1,10 @@ -package com.lframework.starter.web.components.generator.handler.impl; +package com.lframework.starter.web.core.components.generator.handler.impl; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.impl.StaticStrGenerateCodeRule; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.impl.StaticStrGenerateCodeRule; +import com.lframework.starter.web.core.utils.JsonUtil; public class StaticStrGenerateCodeRuleHandler implements GenerateCodeRuleHandler { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java similarity index 61% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java index 7eeb71d..4a49194 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/handler/impl/UUIDGenerateCodeRuleHandler.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.components.generator.handler.impl; +package com.lframework.starter.web.core.components.generator.handler.impl; -import com.lframework.starter.web.components.generator.handler.GenerateCodeRuleHandler; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.impl.UUIDGenerateCodeRule; -import com.lframework.starter.web.utils.IdUtil; +import com.lframework.starter.web.core.components.generator.handler.GenerateCodeRuleHandler; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.impl.UUIDGenerateCodeRule; +import com.lframework.starter.web.core.utils.IdUtil; public class UUIDGenerateCodeRuleHandler implements GenerateCodeRuleHandler { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/AbstractGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/AbstractGenerateCodeRule.java similarity index 78% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/AbstractGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/AbstractGenerateCodeRule.java index 6328e1f..13950dc 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/AbstractGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/AbstractGenerateCodeRule.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.generator.rule; +package com.lframework.starter.web.core.components.generator.rule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/GenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/GenerateCodeRule.java similarity index 37% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/GenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/GenerateCodeRule.java index 53bb71a..5850d53 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/GenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/GenerateCodeRule.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.generator.rule; +package com.lframework.starter.web.core.components.generator.rule; public interface GenerateCodeRule { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java similarity index 56% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java index 7fda020..18b84cd 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/CurrentDateTimeGenerateCodeRule.java @@ -1,7 +1,7 @@ -package com.lframework.starter.web.components.generator.rule.impl; +package com.lframework.starter.web.core.components.generator.rule.impl; -import com.lframework.starter.web.components.generator.rule.AbstractGenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.AbstractGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java similarity index 60% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java index 41445c4..3f73840 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/CustomRandomStrGenerateCodeRule.java @@ -1,7 +1,7 @@ -package com.lframework.starter.web.components.generator.rule.impl; +package com.lframework.starter.web.core.components.generator.rule.impl; -import com.lframework.starter.web.components.generator.rule.AbstractGenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.AbstractGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/FlowGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/FlowGenerateCodeRule.java similarity index 70% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/FlowGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/FlowGenerateCodeRule.java index 49fd548..2d5ad4c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/FlowGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/FlowGenerateCodeRule.java @@ -1,7 +1,7 @@ -package com.lframework.starter.web.components.generator.rule.impl; +package com.lframework.starter.web.core.components.generator.rule.impl; -import com.lframework.starter.web.components.generator.rule.AbstractGenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.AbstractGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/RandomIntGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/RandomIntGenerateCodeRule.java similarity index 71% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/RandomIntGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/RandomIntGenerateCodeRule.java index 65f5192..1fe311f 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/RandomIntGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/RandomIntGenerateCodeRule.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.components.generator.rule.impl; +package com.lframework.starter.web.core.components.generator.rule.impl; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java similarity index 51% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java index 0dfd209..82ce8e0 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/SnowFlakeGenerateCodeRule.java @@ -1,7 +1,7 @@ -package com.lframework.starter.web.components.generator.rule.impl; +package com.lframework.starter.web.core.components.generator.rule.impl; -import com.lframework.starter.web.components.generator.rule.AbstractGenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.AbstractGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/StaticStrGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/StaticStrGenerateCodeRule.java similarity index 56% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/StaticStrGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/StaticStrGenerateCodeRule.java index cc41619..e269bdf 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/StaticStrGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/StaticStrGenerateCodeRule.java @@ -1,7 +1,7 @@ -package com.lframework.starter.web.components.generator.rule.impl; +package com.lframework.starter.web.core.components.generator.rule.impl; -import com.lframework.starter.web.components.generator.rule.AbstractGenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.AbstractGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/UUIDGenerateCodeRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/UUIDGenerateCodeRule.java similarity index 50% rename from web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/UUIDGenerateCodeRule.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/UUIDGenerateCodeRule.java index f24f16a..8da2eb4 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/generator/rule/impl/UUIDGenerateCodeRule.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/generator/rule/impl/UUIDGenerateCodeRule.java @@ -1,7 +1,7 @@ -package com.lframework.starter.web.components.generator.rule.impl; +package com.lframework.starter.web.core.components.generator.rule.impl; -import com.lframework.starter.web.components.generator.rule.AbstractGenerateCodeRule; -import com.lframework.starter.web.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.AbstractGenerateCodeRule; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/locker/DefaultLockBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/locker/DefaultLockBuilder.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/components/locker/DefaultLockBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/locker/DefaultLockBuilder.java index e057626..21a524d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/locker/DefaultLockBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/locker/DefaultLockBuilder.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.locker; +package com.lframework.starter.web.core.components.locker; import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/locker/LockFactory.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/locker/LockFactory.java similarity index 88% rename from web-starter/src/main/java/com/lframework/starter/web/components/locker/LockFactory.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/locker/LockFactory.java index 7d4784d..5be0344 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/locker/LockFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/locker/LockFactory.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.components.locker; +package com.lframework.starter.web.core.components.locker; import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; public class LockFactory { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/locker/RedisLockBuilder.java similarity index 97% rename from web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/locker/RedisLockBuilder.java index 7b9ec45..dfbc50e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/redis/locker/RedisLockBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/locker/RedisLockBuilder.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.components.redis.locker; +package com.lframework.starter.web.core.components.locker; import com.lframework.starter.common.locker.LockBuilder; import com.lframework.starter.common.locker.Locker; -import com.lframework.starter.web.utils.IdUtil; +import com.lframework.starter.web.core.utils.IdUtil; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRule.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRule.java new file mode 100644 index 0000000..779687b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRule.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.core.components.notify; + +/** + * 消息通知规则 + */ +public interface SysNotifyRule { + + /** + * 根据业务类型匹配 + * + * @param bizType + * @return + */ + boolean match(Integer bizType); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleEmail.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleEmail.java new file mode 100644 index 0000000..b1b45d5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleEmail.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.core.components.notify; + +import com.lframework.starter.web.inner.dto.notify.SysNotifyParamsDto; + +/** + * 消息通知规则(邮件) + */ +public interface SysNotifyRuleEmail extends SysNotifyRule { + + /** + * 获取标题 + * + * @param params + * @return + */ + String getTitle(SysNotifyParamsDto params); + + /** + * 获取内容 + * + * @param params + * @return + */ + String getContent(SysNotifyParamsDto params); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleSys.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleSys.java new file mode 100644 index 0000000..364acdd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/notify/SysNotifyRuleSys.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.core.components.notify; + +import com.lframework.starter.web.inner.dto.notify.SysNotifyParamsDto; + +/** + * 消息通知规则(站内信) + */ +public interface SysNotifyRuleSys extends SysNotifyRule { + + /** + * 获取标题 + * + * @param params + * @return + */ + String getTitle(SysNotifyParamsDto params); + + /** + * 获取内容 + * + * @param params + * @return + */ + String getContent(SysNotifyParamsDto params); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/oplog/OpLogType.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/oplog/OpLogType.java new file mode 100644 index 0000000..c9ea223 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/oplog/OpLogType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.core.components.oplog; + +public interface OpLogType { + + /** + * 获取编号 + * + * @return + */ + Integer getCode(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/permission/DataPermissionHandlerImpl.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/permission/DataPermissionHandlerImpl.java new file mode 100644 index 0000000..a308f12 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/permission/DataPermissionHandlerImpl.java @@ -0,0 +1,187 @@ +package com.lframework.starter.web.core.components.permission; + +import cn.dev33.satoken.exception.SaTokenException; +import cn.dev33.satoken.session.SaSession; +import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.annotations.permission.DataPermission; +import com.lframework.starter.web.core.annotations.permission.DataPermissionGroup; +import com.lframework.starter.web.core.annotations.permission.DataPermissions; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; + +public class DataPermissionHandlerImpl implements DataPermissionHandler { + + private static final String EMPTY_SQL = "(1 = 1)"; + + @Override + public Expression getSqlSegment(Expression where, String mappedStatementId) { + try { + List sqlSegmentList = this.convertDataPermissionSql(mappedStatementId); + if (CollectionUtil.isEmpty(sqlSegmentList)) { + return null; + } + + List expressionList = new ArrayList<>(); + if (where != null) { + expressionList.add(where); + } + for (String sqlSegment : sqlSegmentList) { + Expression sqlSegmentExpression = CCJSqlParserUtil.parseCondExpression(sqlSegment); + expressionList.add(sqlSegmentExpression); + } + + Expression finalExpression = expressionList.get(0); + for (int i = 1; i < expressionList.size(); i++) { + finalExpression = new AndExpression(finalExpression, expressionList.get(i)); + } + return finalExpression; + } catch (JSQLParserException e) { + e.printStackTrace(); + } + return null; + } + + private String getDataPermission(Class permissionTypeClazz, + List keys, + List values) { + + Map dataPermissionMap = null; + Map dataPermissionVar = null; + try { + AbstractUserDetails currenUser = SecurityUtil.getCurrentUser(); + if (currenUser == null) { + return EMPTY_SQL; + } + + SaSession session = SecurityUtil.getSessionByLoginId(currenUser.getLoginId()); + if (session == null) { + return EMPTY_SQL; + } + + dataPermissionMap = (Map) session.get( + SecurityConstants.DATA_PERMISSION_SQL_MAP); + + dataPermissionVar = (Map) session.get( + SecurityConstants.DATA_PERMISSION_SQL_VAR); + if (CollectionUtil.isEmpty(dataPermissionMap)) { + return EMPTY_SQL; + } + } catch (SaTokenException e) { + return EMPTY_SQL; + } + + Assert.notNull(permissionTypeClazz); + Assert.notNull(keys); + Assert.notNull(values); + + + SysDataPermissionDataPermissionType permissionType = ApplicationUtil.getBean(permissionTypeClazz); + String sqlTemplate = dataPermissionMap.get(permissionType.getCode().toString()); + if (StringUtil.isBlank(sqlTemplate)) { + return EMPTY_SQL; + } + + if (keys.size() != values.size()) { + throw new DefaultSysException("keys和values长度不一致!"); + } + + Map sqlParams = new HashMap<>(); + for (int i = 0; i < keys.size(); i++) { + sqlParams.put(keys.get(i), values.get(i)); + } + + if (CollectionUtil.isNotEmpty(dataPermissionVar)) { + dataPermissionVar.forEach((k, v) -> { + sqlParams.put("__var#" + k, v); + }); + } + + return StringUtil.format(sqlTemplate, sqlParams); + } + + private List convertDataPermissionSql(String statementId) { + // 获取Mapper执行方法上的注解 + Method mapperMethod = null; + try { + mapperMethod = this.findMapperMethod(this.convertMsId(statementId)); + } catch (ClassNotFoundException e) { + return null; + } + if (mapperMethod == null) { + return null; + } + + List results = new ArrayList<>(); + DataPermissionGroup dataPermissionGroup = mapperMethod.getAnnotation(DataPermissionGroup.class); + if (dataPermissionGroup != null) { + DataPermissions[] dataPermissionsArr = dataPermissionGroup.value(); + + if (dataPermissionsArr != null && dataPermissionsArr.length > 0) { + for (DataPermissions dataPermissions : dataPermissionsArr) { + buildDataPermissionSql(results, dataPermissions); + } + } + } else { + DataPermissions dataPermissions = mapperMethod.getAnnotation(DataPermissions.class); + if (dataPermissions != null) { + buildDataPermissionSql(results, dataPermissions); + } + } + return results; + } + + private String convertMsId(String id) { + String pageHelperSuffix = "_COUNT"; + if (id.endsWith(pageHelperSuffix)) { + return id.substring(0, id.length() - pageHelperSuffix.length()); + } + + String mpSuffix = "_mpCount"; + if (id.endsWith(mpSuffix)) { + return id.substring(0, id.length() - mpSuffix.length()); + } + + return id; + } + + private Method findMapperMethod(String statementId) + throws ClassNotFoundException { + int lastDotIndex = statementId.lastIndexOf("."); + String className = statementId.substring(0, lastDotIndex); + String methodName = statementId.substring(lastDotIndex + 1); + + Class mapperInterface = Class.forName(className); + return Arrays.stream(mapperInterface.getDeclaredMethods()) + .filter(method -> method.getName().equals(methodName)) + .findFirst() + .orElse(null); + } + + private void buildDataPermissionSql(List results, DataPermissions dataPermissions) { + Class dataPermissionType = dataPermissions.type(); + DataPermission[] dataPermissionList = dataPermissions.value(); + String dataPermissionSql = this.getDataPermission(dataPermissionType, + Arrays.stream(dataPermissionList).map(DataPermission::template) + .collect(Collectors.toList()), + Arrays.stream(dataPermissionList).map(DataPermission::alias) + .collect(Collectors.toList())); + results.add(dataPermissionSql); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/permission/SysDataPermissionDataPermissionType.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/permission/SysDataPermissionDataPermissionType.java new file mode 100644 index 0000000..c3a893d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/permission/SysDataPermissionDataPermissionType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.core.components.permission; + +public interface SysDataPermissionDataPermissionType { + + /** + * 获取编号 + * + * @return + */ + Integer getCode(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/DynamicQrtzJob.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/DynamicQrtzJob.java new file mode 100644 index 0000000..9ee256a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/DynamicQrtzJob.java @@ -0,0 +1,58 @@ +package com.lframework.starter.web.core.components.qrtz; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ReflectUtil; +import com.lframework.starter.web.inner.enums.system.QrtzJobType; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.GroovyUtil; +import java.lang.reflect.Method; +import java.util.List; +import org.quartz.JobDataMap; +import org.quartz.JobDetail; +import org.quartz.JobExecutionContext; + +/** + * @author zmj + * @since 2022/8/20 + */ +public class DynamicQrtzJob extends QrtzJob { + + @Override + protected void onExecute(JobExecutionContext context) throws Exception { + + JobDetail jobDetail = context.getJobDetail(); + JobDataMap jobDataMap = jobDetail.getJobDataMap(); + QrtzJobType jobType = EnumUtil.getByCode(QrtzJobType.class, jobDataMap.getInt("jobType")); + if (jobType == QrtzJobType.EXCUTE_CLASS) { + String targetClassName = jobDataMap.getString("targetClassName"); + String targetMethodName = jobDataMap.getString("targetMethodName"); + List targetParamTypes = (List) jobDataMap.get("targetParamTypes"); + List targetParams = (List) jobDataMap.get("targetParams"); + + Class clazz = Class.forName(targetClassName); + Object target = ReflectUtil.newInstance(clazz); + Class[] paramTypes = null; + if (!CollectionUtil.isEmpty(targetParamTypes)) { + paramTypes = new Class[targetParamTypes.size()]; + for (int i = 0; i < targetParamTypes.size(); i++) { + String targetParamType = targetParamTypes.get(i); + paramTypes[i] = Class.forName(targetParamType); + } + } + Object[] params = null; + if (!CollectionUtil.isEmpty(targetParams)) { + params = new Object[targetParams.size()]; + for (int i = 0; i < targetParams.size(); i++) { + String targetParamType = targetParams.get(i); + params[i] = targetParamType; + } + } + + Method method = ReflectUtil.getMethod(clazz, targetMethodName, paramTypes); + ReflectUtil.invoke(target, method, params); + } else { + String script = jobDataMap.getString("script"); + GroovyUtil.excuteScript(script); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzHandler.java new file mode 100644 index 0000000..2bbfb0c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzHandler.java @@ -0,0 +1,321 @@ +package com.lframework.starter.web.core.components.qrtz; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; +import org.quartz.CronScheduleBuilder; +import org.quartz.CronTrigger; +import org.quartz.JobBuilder; +import org.quartz.JobDetail; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.Trigger; +import org.quartz.TriggerBuilder; +import org.quartz.TriggerKey; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; + +@Slf4j +public class QrtzHandler { + + private static final SchedulerFactoryBean SCHEDULER_FACTORY = ApplicationUtil.getBean( + SchedulerFactoryBean.class); + + public static void addJob(Class jobClass, String cron, + Map jobDatas) { + + addJob(null, null, jobClass, null, null, cron, jobDatas); + } + + public static void addJob(Class jobClass, String cron) { + + addJob(null, null, jobClass, null, null, cron, null); + } + + public static void addJob(String jobName, String jobGroupName, Class jobClass, + String triggerName, String triggerGroupName, String cron) { + + addJob(jobName, jobGroupName, jobClass, triggerName, triggerGroupName, cron, null); + } + + public static void addJob(String jobName, String jobGroupName, Class jobClass, + String triggerName, String triggerGroupName, String cron, Map jobDatas) { + + addJob(jobName, jobGroupName, jobClass, triggerName, triggerGroupName, cron, jobDatas, null); + } + + /** + * 添加任务 + * + * @param jobName 任务名 + * @param jobGroupName 任务组名 + * @param jobClass 任务类Class + * @param triggerName 触发器名 + * @param triggerGroupName 触发器组名 + * @param cron cron表达式 + * @param jobDatas 附加数据 + */ + public static void addJob(String jobName, String jobGroupName, Class jobClass, + String triggerName, String triggerGroupName, String cron, Map jobDatas, + String description) { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + JobBuilder jobBuilder = JobBuilder.newJob(jobClass); + if (!StringUtil.isBlank(jobName)) { + jobBuilder.withIdentity(jobName, jobGroupName); + } + + JobDetail jobDetail = jobBuilder.withDescription( + StringUtil.isBlank(description) ? StringPool.EMPTY_STR : description).build(); + if (!CollectionUtil.isEmpty(jobDatas)) { + jobDatas.forEach((k, v) -> jobDetail.getJobDataMap().put(k, v)); + } + + TriggerBuilder triggerBuilder = TriggerBuilder.newTrigger(); + if (!StringUtil.isBlank(triggerName)) { + triggerBuilder.withIdentity(triggerName, triggerGroupName); + } + + triggerBuilder.startNow(); + triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron)); + CronTrigger trigger = (CronTrigger) triggerBuilder.build(); + sched.scheduleJob(jobDetail, trigger); + + if (!sched.isShutdown()) { + sched.start(); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 查询触发器 + * + * @param triggerName 触发器名称 + * @param triggerGroupName 触发器组名称 + * @return + */ + public static CronTrigger getTrigger(String triggerName, String triggerGroupName) { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName); + CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey); + + return trigger; + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 查询任务 + * + * @param jobName + * @param jobGroupName + * @return + */ + public static JobDetail getJob(String jobName, String jobGroupName) { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName)); + return jobDetail; + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 修改任务Cron + * + * @param triggerName 触发器名称 + * @param triggerGroupName 触发器组名称 + * @param cron cron表达式 + */ + public static void updateJobCron(String triggerName, String triggerGroupName, String cron) { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + CronTrigger trigger = getTrigger(triggerName, triggerGroupName); + if (trigger == null) { + return; + } + + String oriCron = trigger.getCronExpression(); + if (!oriCron.equalsIgnoreCase(cron)) { + TriggerBuilder triggerBuilder = TriggerBuilder.newTrigger(); + triggerBuilder.withIdentity(triggerName, triggerGroupName); + triggerBuilder.startNow(); + triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron)); + trigger = (CronTrigger) triggerBuilder.build(); + sched.rescheduleJob(TriggerKey.triggerKey(triggerName, triggerGroupName), trigger); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 删除任务 + * + * @param jobName 任务名称 + * @param jobGroupName 任务组名称 + * @param triggerName 触发器名称 + * @param triggerGroupName 触发器组名称 + */ + public static void deleteJob(String jobName, String jobGroupName, String triggerName, + String triggerGroupName) { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + + TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName); + + sched.pauseTrigger(triggerKey); + sched.unscheduleJob(triggerKey); + sched.deleteJob(JobKey.jobKey(jobName, jobGroupName)); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 启动所有任务 + */ + public static void startJobs() { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + sched.start(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 关闭所有任务 + */ + public static void shutdownJobs() { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + if (!sched.isShutdown()) { + sched.shutdown(); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 安全关闭 + * + * @throws SchedulerException + */ + public static void safeShutdown() throws SchedulerException { + + try { + DynamicDataSourceContextHolder.push("master"); + int executingJobSize = SCHEDULER_FACTORY.getScheduler().getCurrentlyExecutingJobs().size(); + log.info("当前运行任务个数:{},等待完成后关闭", executingJobSize); + SCHEDULER_FACTORY.getScheduler().shutdown(true); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 恢复任务 + * + * @param jobName + * @param jobGroupName + */ + public static void resume(String jobName, String jobGroupName) { + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + sched.resumeJob(JobKey.jobKey(jobName, jobGroupName)); + } catch (SchedulerException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 暂停任务 + * + * @param jobName + * @param jobGroupName + */ + public static void pause(String jobName, String jobGroupName) { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + sched.pauseJob(JobKey.jobKey(jobName, jobGroupName)); + } catch (SchedulerException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } + + /** + * 触发任务 + * + * @param jobName + * @param jobGroupName + */ + public static void trigger(String jobName, String jobGroupName) { + + try { + DynamicDataSourceContextHolder.push("master"); + Scheduler sched = SCHEDULER_FACTORY.getScheduler(); + sched.triggerJob(JobKey.jobKey(jobName, jobGroupName)); + } catch (SchedulerException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } finally { + DynamicDataSourceContextHolder.poll(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzJob.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzJob.java new file mode 100644 index 0000000..d5095c5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/qrtz/QrtzJob.java @@ -0,0 +1,52 @@ +package com.lframework.starter.web.core.components.qrtz; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.ClientException; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import java.io.Serializable; +import lombok.extern.slf4j.Slf4j; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +/** + * 定时任务 + */ +@Slf4j +@DisallowConcurrentExecution +public abstract class QrtzJob implements Job, Serializable { + + private static final long serialVersionUID = 1L; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + + log.info("开始执行定时任务【{}】", this.getClass().getName()); + long begTime = System.currentTimeMillis(); + + try { + // 这里获取tenantId 如果为空则不设置租户ID + Integer tenantId = (Integer) context.getJobDetail().getJobDataMap().get(StringPool.TENANT_ID_QRTZ); + if (tenantId != null) { + TenantContextHolder.setTenantId(tenantId); + } + this.onExecute(context); + long endTime = System.currentTimeMillis(); + log.info("定时任务【{}】执行完毕,共耗时{}ms", this.getClass().getName(), endTime - begTime); + } catch (Exception e) { + if (e instanceof ClientException) { + log.warn("执行定时任务【{}】失败", this.getClass().getName()); + log.warn(e.getMessage(), e); + } else { + log.error("执行定时任务【{}】失败", this.getClass().getName()); + log.error(e.getMessage(), e); + } + throw new JobExecutionException(e); + } finally { + TenantContextHolder.clearTenantId(); + } + } + + protected abstract void onExecute(JobExecutionContext context) throws Exception; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/redis/RedisHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/redis/RedisHandler.java similarity index 99% rename from web-starter/src/main/java/com/lframework/starter/web/components/redis/RedisHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/redis/RedisHandler.java index 6c11679..eff932d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/redis/RedisHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/redis/RedisHandler.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.redis; +package com.lframework.starter.web.core.components.redis; import com.lframework.starter.common.utils.Assert; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResult.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResult.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResult.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResult.java index 26247f7..0bcfb5f 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResult.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResult.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.resp; +package com.lframework.starter.web.core.components.resp; import com.lframework.starter.common.constants.ResponseConstants; import io.swagger.annotations.ApiModelProperty; diff --git a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResultBuilder.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResultBuilder.java index 930c80b..06b2485 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResultBuilder.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.resp; +package com.lframework.starter.web.core.components.resp; import com.lframework.starter.common.constants.ResponseConstants; import com.lframework.starter.common.exceptions.BaseException; -import com.lframework.starter.web.components.trace.TraceBuilder; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.components.trace.TraceBuilder; +import com.lframework.starter.web.core.utils.ApplicationUtil; import lombok.extern.slf4j.Slf4j; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultErrorBuilderWrapper.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResultErrorBuilderWrapper.java similarity index 85% rename from web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultErrorBuilderWrapper.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResultErrorBuilderWrapper.java index 728a601..d201316 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/resp/InvokeResultErrorBuilderWrapper.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/InvokeResultErrorBuilderWrapper.java @@ -1,7 +1,7 @@ -package com.lframework.starter.web.resp; +package com.lframework.starter.web.core.components.resp; import com.lframework.starter.common.exceptions.BaseException; -import com.lframework.starter.web.controller.BaseController; +import com.lframework.starter.web.core.controller.BaseController; public class InvokeResultErrorBuilderWrapper implements ResponseErrorBuilder { diff --git a/web-starter/src/main/java/com/lframework/starter/web/resp/PageResult.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/PageResult.java similarity index 95% rename from web-starter/src/main/java/com/lframework/starter/web/resp/PageResult.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/resp/PageResult.java index 4878e96..dce430d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/resp/PageResult.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/PageResult.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.resp; +package com.lframework.starter.web.core.components.resp; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/resp/Response.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/Response.java similarity index 65% rename from web-starter/src/main/java/com/lframework/starter/web/resp/Response.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/resp/Response.java index b203d3f..a4fc864 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/resp/Response.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/Response.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.resp; +package com.lframework.starter.web.core.components.resp; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/resp/ResponseErrorBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/ResponseErrorBuilder.java similarity index 92% rename from web-starter/src/main/java/com/lframework/starter/web/resp/ResponseErrorBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/resp/ResponseErrorBuilder.java index bc5e39e..b987b9b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/resp/ResponseErrorBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/resp/ResponseErrorBuilder.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.resp; +package com.lframework.starter.web.core.components.resp; import com.lframework.starter.common.exceptions.BaseException; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/AbstractUserDetails.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/AbstractUserDetails.java index c635627..3b6adaf 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/AbstractUserDetails.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/AbstractUserDetails.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import java.io.Serializable; import java.util.Set; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/security/AbstractUserDetailsService.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/AbstractUserDetailsService.java new file mode 100644 index 0000000..3de46f6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/AbstractUserDetailsService.java @@ -0,0 +1,80 @@ +package com.lframework.starter.web.core.components.security; + +import com.lframework.starter.common.exceptions.impl.UserLoginException; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.RequestUtil; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.inner.service.SysModuleTenantService; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import java.util.List; +import java.util.Set; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +/** + * 所有UserDetailsService都需要继承此类 如果需要更改用户表,那么继承此类注册Bean即可 + * + * @author zmj + */ +@Slf4j +public abstract class AbstractUserDetailsService implements UserDetailsService { + + @Autowired + private SysMenuService sysMenuService; + + @Autowired + private SysModuleTenantService sysModuleTenantService; + + @Value("${remove-fixed-permissions:false}") + private Boolean removeFixedPermission; + + @Override + public AbstractUserDetails loadUserByUsername(String username) throws UserLoginException { + + //根据登录名查询 + AbstractUserDetails userDetails = this.findByUsername(username); + + if (ObjectUtil.isEmpty(userDetails)) { + log.debug("用户名 {} 不存在", username); + throw new UserLoginException("用户名或密码错误!"); + } + + userDetails.setTenantId(TenantContextHolder.getTenantId()); + + //获取登录IP + userDetails.setIp(RequestUtil.getRequestIp()); + + // 先查询当前租户使用的module + List moduleIds = null; + if (TenantUtil.enableTenant()) { + moduleIds = sysModuleTenantService.getAvailableModuleIdsByTenantId( + TenantContextHolder.getTenantId()); + } + + // 先取角色的权限 + userDetails.setPermissions(sysMenuService.getRolePermissionByUserId(userDetails.getId())); + userDetails.setIsAdmin( + userDetails.getPermissions().contains(SecurityConstants.PERMISSION_ADMIN_NAME)); + // 再取菜单的权限 + Set permissions = sysMenuService.getPermissionsByUserId(userDetails.getId(), + userDetails.isAdmin(), moduleIds); + // 合并权限 + permissions.addAll(userDetails.getPermissions()); + if (this.removeFixedPermission) { + permissions.remove(SecurityConstants.PERMISSION_ADMIN_NAME); + } + userDetails.setPermissions(permissions); + + return userDetails; + } + + /** + * 根据登录名查询 + * + * @param username + * @return + */ + public abstract AbstractUserDetails findByUsername(String username); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/CheckPermissionHandler.java similarity index 78% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/CheckPermissionHandler.java index b0ba05c..0259c95 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/CheckPermissionHandler.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; /** * 权限验证 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandlerImpl.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/CheckPermissionHandlerImpl.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandlerImpl.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/CheckPermissionHandlerImpl.java index 4e8b194..5171c66 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/CheckPermissionHandlerImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/CheckPermissionHandlerImpl.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/DefaultUserDetails.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/DefaultUserDetails.java similarity index 79% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/DefaultUserDetails.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/DefaultUserDetails.java index 07e94b7..6fa1772 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/DefaultUserDetails.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/DefaultUserDetails.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/PasswordEncoderWrapper.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/PasswordEncoderWrapper.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/PasswordEncoderWrapper.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/PasswordEncoderWrapper.java index 894a0f4..9a9793f 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/PasswordEncoderWrapper.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/PasswordEncoderWrapper.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/PermissionCalcType.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/PermissionCalcType.java similarity index 59% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/PermissionCalcType.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/PermissionCalcType.java index 4192029..016328c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/PermissionCalcType.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/PermissionCalcType.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; /** * 校验权限时的计算方式 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/PermitAllService.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/PermitAllService.java similarity index 97% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/PermitAllService.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/PermitAllService.java index 6180b1b..223d455 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/PermitAllService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/PermitAllService.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.web.config.properties.UploadProperties; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityConstants.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/SecurityConstants.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityConstants.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/SecurityConstants.java index 0dfb030..680e4d7 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityConstants.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/SecurityConstants.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; public interface SecurityConstants { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/SecurityUtil.java similarity index 97% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/SecurityUtil.java index b0331ed..f158c42 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/SecurityUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/SecurityUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.session.SaSession; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetails.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserDetails.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetails.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserDetails.java index c389191..e2604eb 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetails.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserDetails.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetailsService.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserDetailsService.java similarity index 84% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetailsService.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserDetailsService.java index d87c1a2..b898a06 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserDetailsService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserDetailsService.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import com.lframework.starter.common.exceptions.impl.UserLoginException; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/IUserTokenResolver.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserTokenResolver.java similarity index 78% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/IUserTokenResolver.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserTokenResolver.java index d5a115a..9da878c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/IUserTokenResolver.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserTokenResolver.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; /** * 用户Token解析器 */ -public interface IUserTokenResolver { +public interface UserTokenResolver { /** * 获取Token diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserTokenResolver.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserTokenResolverImpl.java similarity index 71% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/UserTokenResolver.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserTokenResolverImpl.java index c26b783..d251ccf 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/UserTokenResolver.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/security/UserTokenResolverImpl.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.components.security; import cn.dev33.satoken.stp.StpUtil; -public class UserTokenResolver implements IUserTokenResolver { +public class UserTokenResolverImpl implements UserTokenResolver { private String tokenKey = "X-Auth-Token"; diff --git a/web-starter/src/main/java/com/lframework/starter/web/sign/CheckSignFactory.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/CheckSignFactory.java similarity index 56% rename from web-starter/src/main/java/com/lframework/starter/web/sign/CheckSignFactory.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/sign/CheckSignFactory.java index 9b2b94d..da4e2c6 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/sign/CheckSignFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/CheckSignFactory.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.sign; +package com.lframework.starter.web.core.components.sign; public interface CheckSignFactory { diff --git a/web-starter/src/main/java/com/lframework/starter/web/sign/CheckSignHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/CheckSignHandler.java similarity index 48% rename from web-starter/src/main/java/com/lframework/starter/web/sign/CheckSignHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/sign/CheckSignHandler.java index a3ed07d..1622263 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/sign/CheckSignHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/CheckSignHandler.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.sign; +package com.lframework.starter.web.core.components.sign; -import com.lframework.starter.web.vo.OpenApiReqVo; +import com.lframework.starter.web.inner.vo.openapi.OpenApiReqVo; public interface CheckSignHandler { diff --git a/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignFactory.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignFactory.java similarity index 61% rename from web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignFactory.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignFactory.java index 29bc52d..62e6c4e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignFactory.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.sign; +package com.lframework.starter.web.core.components.sign; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; public class DefaultCheckSignFactory implements CheckSignFactory { diff --git a/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignHandler.java similarity index 60% rename from web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignHandler.java index 48776cc..6e96e72 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/sign/DefaultCheckSignHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignHandler.java @@ -1,7 +1,6 @@ -package com.lframework.starter.web.sign; +package com.lframework.starter.web.core.components.sign; -import com.lframework.starter.web.vo.OpenApiReqVo; -import javax.servlet.http.HttpServletRequest; +import com.lframework.starter.web.inner.vo.openapi.OpenApiReqVo; public class DefaultCheckSignHandler implements CheckSignHandler { diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java new file mode 100644 index 0000000..ae6a53c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java @@ -0,0 +1,80 @@ +package com.lframework.starter.web.core.components.sign.handler; + +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.RegUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.sign.util.SignUtil; +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.inner.service.system.SysOpenDomainService; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.components.sign.CheckSignHandler; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.inner.vo.openapi.OpenApiReqVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class DefaultCheckSignHandler implements CheckSignHandler { + + @Autowired + private SysOpenDomainService sysOpenDomainService; + + @Override + public boolean check(OpenApiReqVo req) { + Integer clientId = req.getClientId(); + if (clientId == null) { + return false; + } + + String timestamp = req.getTimestamp(); + if (StringUtil.isBlank(timestamp)) { + return false; + } + + // 校验一下timestamp + if (!RegUtil.isMatch(PatternPool.PATTERN_IS_INTEGER, timestamp)) { + return false; + } + + if (System.currentTimeMillis() - Long.parseLong(timestamp) > 1000 * 60 * 5) { // 最多差异五分钟 + return false; + } + + String nonceStr = req.getNonceStr(); + if (StringUtil.isBlank(nonceStr)) { + return false; + } + + String params = req.getParams(); + if (StringUtil.isBlank(params)) { + return false; + } + + String sign = req.getSign(); + if (StringUtil.isBlank(sign)) { + return false; + } + + SysOpenDomain domain = sysOpenDomainService.findById(clientId); + if (domain == null || !domain.getAvailable()) { + return false; + } + + return SignUtil + .validate(clientId.toString(), domain.getApiSecret(), timestamp, nonceStr, params, sign); + } + + @Override + public void setTenantId(OpenApiReqVo req) { + if (TenantUtil.enableTenant()) { + SysOpenDomain domain = sysOpenDomainService.findById(req.getClientId()); + Integer tenantId = domain.getTenantId(); + if (tenantId == null) { + throw new DefaultSysException("开放域没有设置租户ID"); + } else { + TenantContextHolder.setTenantId(domain.getTenantId()); + } + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/util/SignUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/util/SignUtil.java new file mode 100644 index 0000000..06cb458 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/util/SignUtil.java @@ -0,0 +1,97 @@ +package com.lframework.starter.web.core.components.sign.util; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Api加签、验签工具类 + */ +public class SignUtil { + + private static final Logger log = LoggerFactory.getLogger(SignUtil.class); + + /** + * 加签 + * + * @param clientId 客户端ID + * @param apiSecret Api密钥 + * @param timestamp 时间戳 + * @param nonceStr 随机字符串 + * @param json 请求参数 + * @return + */ + public static String sign(String clientId, String apiSecret, String timestamp, String nonceStr, + String json) { + String str = new StringBuilder().append("clientId=").append(clientId).append("&") + .append("apiSecret=").append(apiSecret) + .append("&").append("timestamp=").append(timestamp).append("&").append("nonceStr=") + .append(nonceStr).append("&").append("params=") + .append(json).toString(); + MessageDigest digest = null; + try { + digest = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + log.error(e.getMessage(), e); + throw new RuntimeException(e); + } + byte[] bs = digest.digest(str.getBytes(StandardCharsets.UTF_8)); + StringBuilder builder = new StringBuilder(); + for (byte b : bs) { + int x = b & 255; + String s = Integer.toHexString(x); + if (x > 0 && x < 16) { + builder.append("0"); + builder.append(s); + } else { + builder.append(s); + } + } + + return builder.toString(); + } + + /** + * 验签 + * + * @param clientId 客户端ID + * @param apiSecret Api密钥 + * @param timestamp 时间戳 + * @param nonceStr 随机字符串 + * @param json 请求参数 + * @param oriSign 原始签值 + * @return + */ + public static boolean validate(String clientId, String apiSecret, String timestamp, + String nonceStr, String json, + String oriSign) { + return sign(clientId, apiSecret, timestamp, nonceStr, json).equals(oriSign); + } + + // 以下为示例 + /* + public static void main(String[] args) { + String clientId = ""; + String apiSecret = ""; + String ts = String.valueOf(System.currentTimeMillis()); + + //此处为示例的获取字符串算法,此处可以自行替换算法 + String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + Random random = new Random(); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < 20; i++) { + int number = random.nextInt(62); + builder.append(str.charAt(number)); + } + + String nonceStr = builder.toString(); + + String json = "{\"key1\":\"value1\", \"key2\":\"value2\"}"; + String sign = SignUtil.sign(clientId, apiSecret, ts, nonceStr, json); // 这里是加签 + + boolean isValidate = SignUtil.validate(clientId, apiSecret, ts, nonceStr, json, sign); // 这里是验签 + } + */ +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/tenant/DefaultTenantInterceptor.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/DefaultTenantInterceptor.java similarity index 62% rename from web-starter/src/main/java/com/lframework/starter/web/components/tenant/DefaultTenantInterceptor.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/DefaultTenantInterceptor.java index 5dcc284..975ae52 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/tenant/DefaultTenantInterceptor.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/DefaultTenantInterceptor.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.tenant; +package com.lframework.starter.web.core.components.tenant; /** * 默认空实现 diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantContextHolder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/TenantContextHolder.java similarity index 54% rename from web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantContextHolder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/TenantContextHolder.java index 9336612..a89b4ef 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantContextHolder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/TenantContextHolder.java @@ -1,8 +1,9 @@ -package com.lframework.starter.web.components.tenant; +package com.lframework.starter.web.core.components.tenant; -import com.lframework.starter.web.event.ClearTenantEvent; -import com.lframework.starter.web.event.SetTenantEvent; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.event.ClearTenantEvent; +import com.lframework.starter.web.core.event.SetTenantEvent; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.TenantUtil; public class TenantContextHolder { @@ -19,7 +20,16 @@ public class TenantContextHolder { } public static Integer getTenantId() { - return TENANT_ID.get(); + return TenantUtil.enableTenant() ? TENANT_ID.get() : null; + } + + public static String getTenantIdStr() { + Integer tenantId = getTenantId(); + if (tenantId == null) { + return null; + } else { + return String.valueOf(tenantId); + } } public static void clearTenantId() { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantInterceptor.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/TenantInterceptor.java similarity index 77% rename from web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantInterceptor.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/TenantInterceptor.java index 8b1db8e..59f8a47 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/tenant/TenantInterceptor.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/tenant/TenantInterceptor.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.tenant; +package com.lframework.starter.web.core.components.tenant; import org.springframework.web.servlet.HandlerInterceptor; diff --git a/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultCallable.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/threads/DefaultCallable.java similarity index 80% rename from web-starter/src/main/java/com/lframework/starter/web/threads/DefaultCallable.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/threads/DefaultCallable.java index aea2004..122b8e4 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultCallable.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/threads/DefaultCallable.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.threads; +package com.lframework.starter.web.core.components.threads; -import com.lframework.starter.web.components.security.AbstractUserDetails; -import com.lframework.starter.web.components.security.SecurityUtil; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.TenantUtil; import java.util.concurrent.Callable; /** diff --git a/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultRunnable.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/threads/DefaultRunnable.java similarity index 79% rename from web-starter/src/main/java/com/lframework/starter/web/threads/DefaultRunnable.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/threads/DefaultRunnable.java index e8a27f2..319a6c0 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/threads/DefaultRunnable.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/threads/DefaultRunnable.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.threads; +package com.lframework.starter.web.core.components.threads; -import com.lframework.starter.web.components.security.AbstractUserDetails; -import com.lframework.starter.web.components.security.SecurityUtil; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.TenantUtil; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.TenantUtil; /** * 默认的Runnable 可传递当前登录人信息 diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/timeline/OrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/timeline/OrderTimeLineBizType.java new file mode 100644 index 0000000..3f6d83b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/timeline/OrderTimeLineBizType.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.core.components.timeline; + +/** + * @author zmj + * @since 2022/8/10 + */ +public interface OrderTimeLineBizType { + + /** + * 获取编号 + * + * @return + */ + Integer getCode(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/trace/DefaultTraceBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/trace/DefaultTraceBuilder.java similarity index 84% rename from web-starter/src/main/java/com/lframework/starter/web/components/trace/DefaultTraceBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/trace/DefaultTraceBuilder.java index 5198895..10ec1b3 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/trace/DefaultTraceBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/trace/DefaultTraceBuilder.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.trace; +package com.lframework.starter.web.core.components.trace; import org.slf4j.MDC; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/trace/TraceBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/trace/TraceBuilder.java similarity index 82% rename from web-starter/src/main/java/com/lframework/starter/web/components/trace/TraceBuilder.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/trace/TraceBuilder.java index a3c5b94..907ba63 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/trace/TraceBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/trace/TraceBuilder.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.trace; +package com.lframework.starter.web.core.components.trace; public interface TraceBuilder { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/UploadHandlerFactory.java similarity index 79% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/UploadHandlerFactory.java index d27a3ca..b58f3d9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/UploadHandlerFactory.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/UploadHandlerFactory.java @@ -1,10 +1,10 @@ -package com.lframework.starter.web.components.upload; +package com.lframework.starter.web.core.components.upload; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; -import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.UploadHandler; +import com.lframework.starter.web.core.utils.ApplicationUtil; import java.util.Map; public class UploadHandlerFactory { diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/UploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/UploadClient.java similarity index 81% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/UploadClient.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/UploadClient.java index d79a49a..89e6be7 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/UploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/UploadClient.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.components.upload.client; +package com.lframework.starter.web.core.components.upload.client; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; import java.io.InputStream; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/CosUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/CosUploadConfig.java similarity index 82% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/CosUploadConfig.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/CosUploadConfig.java index 6bd4135..b04cffb 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/CosUploadConfig.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/CosUploadConfig.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.upload.client.config; +package com.lframework.starter.web.core.components.upload.client.config; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/LocalUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/LocalUploadConfig.java similarity index 77% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/LocalUploadConfig.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/LocalUploadConfig.java index abd00e8..bbddb6a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/LocalUploadConfig.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/LocalUploadConfig.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.upload.client.config; +package com.lframework.starter.web.core.components.upload.client.config; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/ObsUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/ObsUploadConfig.java similarity index 80% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/ObsUploadConfig.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/ObsUploadConfig.java index 2b05e4e..e7ed89b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/ObsUploadConfig.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/ObsUploadConfig.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.upload.client.config; +package com.lframework.starter.web.core.components.upload.client.config; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/OssUploadConfig.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/OssUploadConfig.java similarity index 82% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/OssUploadConfig.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/OssUploadConfig.java index a041606..0a0abe5 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/config/OssUploadConfig.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/config/OssUploadConfig.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.upload.client.config; +package com.lframework.starter.web.core.components.upload.client.config; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/dto/UploadDto.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/dto/UploadDto.java similarity index 46% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/dto/UploadDto.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/dto/UploadDto.java index 745e5ab..9a266bc 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/dto/UploadDto.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/dto/UploadDto.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.components.upload.client.dto; +package com.lframework.starter.web.core.components.upload.client.dto; -import com.lframework.starter.web.dto.BaseDto; +import com.lframework.starter.web.core.dto.BaseDto; import lombok.Data; @Data @@ -8,6 +8,13 @@ public class UploadDto implements BaseDto { private static final long serialVersionUID = 1L; + /** + * 安全上传记录ID + * + * 只有安全上传时有值 + */ + private String securityUploadRecordId; + private String url; private String objectName; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/CosUploadClient.java similarity index 94% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/CosUploadClient.java index 6157b5e..03cfc0d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/CosUploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/CosUploadClient.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.upload.client.impl; +package com.lframework.starter.web.core.components.upload.client.impl; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.impl.DefaultSysException; @@ -6,9 +6,9 @@ import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.CosUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.CosUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.Headers; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/LocalUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/LocalUploadClient.java similarity index 81% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/LocalUploadClient.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/LocalUploadClient.java index b52fccc..0e8c285 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/LocalUploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/LocalUploadClient.java @@ -1,17 +1,17 @@ -package com.lframework.starter.web.components.upload.client.impl; +package com.lframework.starter.web.core.components.upload.client.impl; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.FileUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.redis.RedisHandler; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.LocalUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.ApplicationUtil; -import com.lframework.starter.web.utils.IdUtil; +import com.lframework.starter.web.core.components.redis.RedisHandler; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.LocalUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.IdUtil; import java.io.File; import java.io.InputStream; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/ObsUploadClient.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/ObsUploadClient.java index f6c0ea2..a780bf2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/ObsUploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/ObsUploadClient.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.upload.client.impl; +package com.lframework.starter.web.core.components.upload.client.impl; import cn.hutool.core.util.URLUtil; import com.lframework.starter.common.constants.StringPool; @@ -6,9 +6,9 @@ import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.ObsUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.ObsUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; import com.obs.services.ObsClient; import com.obs.services.model.HttpMethodEnum; import com.obs.services.model.PutObjectResult; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/OssUploadClient.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/OssUploadClient.java index fa7cf68..53bb583 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/client/impl/OssUploadClient.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/client/impl/OssUploadClient.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.upload.client.impl; +package com.lframework.starter.web.core.components.upload.client.impl; import com.aliyun.oss.ClientBuilderConfiguration; import com.aliyun.oss.HttpMethod; @@ -12,9 +12,9 @@ import com.lframework.starter.common.utils.Assert; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.OssUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.OssUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/SecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/SecurityUploadHandler.java similarity index 48% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/SecurityUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/SecurityUploadHandler.java index 855d0da..ddc3ce9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/SecurityUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/SecurityUploadHandler.java @@ -1,6 +1,8 @@ -package com.lframework.starter.web.components.upload.handler; +package com.lframework.starter.web.core.components.upload.handler; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.service.SecurityUploadRecordService; import java.io.InputStream; import java.util.List; @@ -23,6 +25,13 @@ public interface SecurityUploadHandler { */ UploadDto upload(InputStream is, List locations, String fileName); + default UploadDto createSecurityRecord(UploadDto dto) { + SecurityUploadRecordService securityUploadRecordService = ApplicationUtil.getBean(SecurityUploadRecordService.class); + String id = securityUploadRecordService.create(dto.getUploadType(), dto.getObjectName()); + dto.setSecurityUploadRecordId(id); + return dto; + } + /** * 获取预签名URL * diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/UploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/UploadHandler.java similarity index 71% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/UploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/UploadHandler.java index e1225bd..2177c51 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/UploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/UploadHandler.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.components.upload.handler; +package com.lframework.starter.web.core.components.upload.handler; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; import java.io.InputStream; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/CosSecurityUploadHandler.java similarity index 65% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosSecurityUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/CosSecurityUploadHandler.java index 0c0d80d..422f0c3 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosSecurityUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/CosSecurityUploadHandler.java @@ -1,13 +1,13 @@ -package com.lframework.starter.web.components.upload.handler.impl; +package com.lframework.starter.web.core.components.upload.handler.impl; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.CosUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.CosUploadClient; -import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.CosUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.CosUploadClient; +import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.JsonUtil; import java.io.InputStream; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -37,7 +37,9 @@ public class CosSecurityUploadHandler implements SecurityUploadHandler { UploadClient uploadClient = new CosUploadClient(config); - return uploadClient.upload(is, locations, fileName); + UploadDto dto = uploadClient.upload(is, locations, fileName); + + return createSecurityRecord(dto); } @Override diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/CosUploadHandler.java similarity index 62% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/CosUploadHandler.java index cf901b8..f6e76fc 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/CosUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/CosUploadHandler.java @@ -1,13 +1,13 @@ -package com.lframework.starter.web.components.upload.handler.impl; +package com.lframework.starter.web.core.components.upload.handler.impl; import com.lframework.starter.common.utils.Assert; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.CosUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.CosUploadClient; -import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.CosUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.CosUploadClient; +import com.lframework.starter.web.core.components.upload.handler.UploadHandler; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.JsonUtil; import java.io.InputStream; import java.util.List; import lombok.extern.slf4j.Slf4j; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/LocalSecurityUploadHandler.java similarity index 68% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalSecurityUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/LocalSecurityUploadHandler.java index 20d97c4..4dd2926 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalSecurityUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/LocalSecurityUploadHandler.java @@ -1,14 +1,12 @@ -package com.lframework.starter.web.components.upload.handler.impl; - -import com.lframework.starter.web.components.redis.RedisHandler; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.LocalUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.LocalUploadClient; -import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; +package com.lframework.starter.web.core.components.upload.handler.impl; + +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.LocalUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.LocalUploadClient; +import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; import com.lframework.starter.web.config.properties.SecurityUploadProperties; import com.lframework.starter.web.config.properties.UploadProperties; -import com.lframework.starter.web.service.SysConfService; import java.io.InputStream; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -37,7 +35,9 @@ public class LocalSecurityUploadHandler implements SecurityUploadHandler { config.setLocation(securityUploadProperties.getLocation()); UploadClient uploadClient = new LocalUploadClient(config); - return uploadClient.upload(is, locations, fileName); + UploadDto dto = uploadClient.upload(is, locations, fileName); + + return createSecurityRecord(dto); } @Override diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/LocalUploadHandler.java similarity index 63% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/LocalUploadHandler.java index 1a10fd4..48670e9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/LocalUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/LocalUploadHandler.java @@ -1,10 +1,10 @@ -package com.lframework.starter.web.components.upload.handler.impl; +package com.lframework.starter.web.core.components.upload.handler.impl; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.LocalUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.LocalUploadClient; -import com.lframework.starter.web.components.upload.handler.UploadHandler; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.LocalUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.LocalUploadClient; +import com.lframework.starter.web.core.components.upload.handler.UploadHandler; import com.lframework.starter.web.config.properties.UploadProperties; import java.io.InputStream; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/ObsSecurityUploadHandler.java similarity index 60% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsSecurityUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/ObsSecurityUploadHandler.java index baecba1..48cbef2 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsSecurityUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/ObsSecurityUploadHandler.java @@ -1,12 +1,12 @@ -package com.lframework.starter.web.components.upload.handler.impl; - -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.config.ObsUploadConfig; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.ObsUploadClient; -import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.JsonUtil; +package com.lframework.starter.web.core.components.upload.handler.impl; + +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.config.ObsUploadConfig; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.ObsUploadClient; +import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.JsonUtil; import java.io.InputStream; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -29,7 +29,9 @@ public class ObsSecurityUploadHandler implements SecurityUploadHandler { ObsUploadConfig config = JsonUtil.parseObject(configStr, ObsUploadConfig.class); UploadClient uploadClient = new ObsUploadClient(config); - return uploadClient.upload(is, locations, fileName); + UploadDto dto = uploadClient.upload(is, locations, fileName); + + return createSecurityRecord(dto); } @Override diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/ObsUploadHandler.java similarity index 54% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/ObsUploadHandler.java index 157199b..e3c3781 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/ObsUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/ObsUploadHandler.java @@ -1,12 +1,12 @@ -package com.lframework.starter.web.components.upload.handler.impl; +package com.lframework.starter.web.core.components.upload.handler.impl; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.ObsUploadClient; -import com.lframework.starter.web.components.upload.client.config.ObsUploadConfig; -import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.ObsUploadClient; +import com.lframework.starter.web.core.components.upload.client.config.ObsUploadConfig; +import com.lframework.starter.web.core.components.upload.handler.UploadHandler; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.JsonUtil; import java.io.InputStream; import java.util.List; import lombok.extern.slf4j.Slf4j; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssSecurityUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/OssSecurityUploadHandler.java similarity index 59% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssSecurityUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/OssSecurityUploadHandler.java index ea4e496..db86129 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssSecurityUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/OssSecurityUploadHandler.java @@ -1,12 +1,12 @@ -package com.lframework.starter.web.components.upload.handler.impl; - -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.OssUploadClient; -import com.lframework.starter.web.components.upload.client.config.OssUploadConfig; -import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.JsonUtil; +package com.lframework.starter.web.core.components.upload.handler.impl; + +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.OssUploadClient; +import com.lframework.starter.web.core.components.upload.client.config.OssUploadConfig; +import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.JsonUtil; import java.io.InputStream; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +28,9 @@ public class OssSecurityUploadHandler implements SecurityUploadHandler { UploadClient uploadClient = new OssUploadClient(config); - return uploadClient.upload(is, locations, fileName); + UploadDto dto = uploadClient.upload(is, locations, fileName); + + return createSecurityRecord(dto); } @Override diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/OssUploadHandler.java similarity index 52% rename from web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/OssUploadHandler.java index b8d8231..7eb8c5d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/upload/handler/impl/OssUploadHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/upload/handler/impl/OssUploadHandler.java @@ -1,12 +1,12 @@ -package com.lframework.starter.web.components.upload.handler.impl; +package com.lframework.starter.web.core.components.upload.handler.impl; -import com.lframework.starter.web.components.upload.client.UploadClient; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.client.impl.OssUploadClient; -import com.lframework.starter.web.components.upload.client.config.OssUploadConfig; -import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysConfService; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.components.upload.client.UploadClient; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.client.impl.OssUploadClient; +import com.lframework.starter.web.core.components.upload.client.config.OssUploadConfig; +import com.lframework.starter.web.core.components.upload.handler.UploadHandler; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.JsonUtil; import java.io.InputStream; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/CodeValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/CodeValidator.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/CodeValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/CodeValidator.java index 30b34f9..246e14c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/CodeValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/CodeValidator.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import com.lframework.starter.common.constants.PatternPool; import com.lframework.starter.common.utils.RegUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/EnumValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/EnumValidator.java similarity index 83% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/EnumValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/EnumValidator.java index 07a02d6..10e581a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/EnumValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/EnumValidator.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import com.lframework.starter.common.utils.ObjectUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.enums.BaseEnum; -import com.lframework.starter.web.utils.EnumUtil; +import com.lframework.starter.web.core.enums.BaseEnum; +import com.lframework.starter.web.core.utils.EnumUtil; import java.io.Serializable; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsCode.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsCode.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/IsCode.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsCode.java index ae78b81..50c8042 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsCode.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsCode.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsEnum.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsEnum.java similarity index 85% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/IsEnum.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsEnum.java index 8d01223..f092bd4 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsEnum.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsEnum.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; -import com.lframework.starter.web.enums.BaseEnum; +import com.lframework.starter.web.core.enums.BaseEnum; import java.io.Serializable; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJson.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJson.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJson.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJson.java index a04b088..4d9774a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJson.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJson.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonArray.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJsonArray.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonArray.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJsonArray.java index db0c045..4f293fe 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonArray.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJsonArray.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonObject.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJsonObject.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonObject.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJsonObject.java index d92ae81..fd7d984 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsJsonObject.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsJsonObject.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsNumberPrecision.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsNumberPrecision.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/IsNumberPrecision.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsNumberPrecision.java index a26b1df..338184d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/IsNumberPrecision.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/IsNumberPrecision.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonArrayValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonArrayValidator.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonArrayValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonArrayValidator.java index df9cf61..1442c82 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonArrayValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonArrayValidator.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import cn.hutool.json.JSONUtil; import javax.validation.ConstraintValidator; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonObjectValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonObjectValidator.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonObjectValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonObjectValidator.java index 612e103..1d7b229 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonObjectValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonObjectValidator.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import cn.hutool.json.JSONUtil; import javax.validation.ConstraintValidator; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonValidator.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonValidator.java index 6c18219..a511f3a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/JsonValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/JsonValidator.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import cn.hutool.json.JSONUtil; import javax.validation.ConstraintValidator; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/NumberPrecisionValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/NumberPrecisionValidator.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/NumberPrecisionValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/NumberPrecisionValidator.java index 89003aa..b9005d6 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/NumberPrecisionValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/NumberPrecisionValidator.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import com.lframework.starter.common.utils.NumberUtil; import javax.validation.ConstraintValidator; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/Pattern.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/Pattern.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/Pattern.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/Pattern.java index 61fc505..01d9675 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/Pattern.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/Pattern.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.CONSTRUCTOR; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/PatternValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/PatternValidator.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/PatternValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/PatternValidator.java index aa8b7e7..95fc675 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/PatternValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/PatternValidator.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import com.lframework.starter.common.utils.RegUtil; import com.lframework.starter.common.utils.StringUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/TypeMismatch.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/TypeMismatch.java similarity index 86% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/TypeMismatch.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/TypeMismatch.java index 2b536a1..3b209de 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/TypeMismatch.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/TypeMismatch.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/UploadUrl.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/UploadUrl.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/UploadUrl.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/UploadUrl.java index a07c5fe..dd2ff58 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/UploadUrl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/UploadUrl.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.CONSTRUCTOR; diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/validation/UploadUrlValidator.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/UploadUrlValidator.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/components/validation/UploadUrlValidator.java rename to web-starter/src/main/java/com/lframework/starter/web/core/components/validation/UploadUrlValidator.java index f8c8a23..0cd4b3d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/validation/UploadUrlValidator.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/validation/UploadUrlValidator.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.components.validation; +package com.lframework.starter.web.core.components.validation; import com.lframework.starter.common.constants.PatternPool; import com.lframework.starter.common.utils.RegUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/constants/MyBatisStringPool.java b/web-starter/src/main/java/com/lframework/starter/web/core/constants/MyBatisStringPool.java similarity index 78% rename from web-starter/src/main/java/com/lframework/starter/web/constants/MyBatisStringPool.java rename to web-starter/src/main/java/com/lframework/starter/web/core/constants/MyBatisStringPool.java index 863c92b..33b83f1 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/constants/MyBatisStringPool.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/constants/MyBatisStringPool.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.constants; +package com.lframework.starter.web.core.constants; /** * Mybatis常量 @@ -36,4 +36,9 @@ public interface MyBatisStringPool { * 修改时间 */ String COLUMN_UPDATE_TIME = "updateTime"; + + /** + * 切换当前租户数据源的Key + */ + String DS_KEY_CUR_TENANT = "#curTenant"; } diff --git a/web-starter/src/main/java/com/lframework/starter/web/constants/MybatisConstants.java b/web-starter/src/main/java/com/lframework/starter/web/core/constants/MybatisConstants.java similarity index 78% rename from web-starter/src/main/java/com/lframework/starter/web/constants/MybatisConstants.java rename to web-starter/src/main/java/com/lframework/starter/web/core/constants/MybatisConstants.java index 4c309f5..5349e6e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/constants/MybatisConstants.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/constants/MybatisConstants.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.constants; +package com.lframework.starter.web.core.constants; public interface MybatisConstants { diff --git a/web-starter/src/main/java/com/lframework/starter/web/constants/SqlMethodConstants.java b/web-starter/src/main/java/com/lframework/starter/web/core/constants/SqlMethodConstants.java similarity index 81% rename from web-starter/src/main/java/com/lframework/starter/web/constants/SqlMethodConstants.java rename to web-starter/src/main/java/com/lframework/starter/web/core/constants/SqlMethodConstants.java index bb3a142..927302c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/constants/SqlMethodConstants.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/constants/SqlMethodConstants.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.constants; +package com.lframework.starter.web.core.constants; public interface SqlMethodConstants { diff --git a/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java b/web-starter/src/main/java/com/lframework/starter/web/core/controller/BaseController.java similarity index 77% rename from web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java rename to web-starter/src/main/java/com/lframework/starter/web/core/controller/BaseController.java index 6bcea16..d0fb3ee 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/controller/BaseController.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/controller/BaseController.java @@ -1,10 +1,10 @@ -package com.lframework.starter.web.controller; +package com.lframework.starter.web.core.controller; import com.lframework.starter.common.utils.ObjectUtil; -import com.lframework.starter.web.constants.MybatisConstants; -import com.lframework.starter.web.vo.PageVo; -import com.lframework.starter.web.components.security.AbstractUserDetails; -import com.lframework.starter.web.components.security.SecurityUtil; +import com.lframework.starter.web.core.constants.MybatisConstants; +import com.lframework.starter.web.core.vo.PageVo; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; /** * BaseController diff --git a/web-starter/src/main/java/com/lframework/starter/web/controller/DefaultBaseController.java b/web-starter/src/main/java/com/lframework/starter/web/core/controller/DefaultBaseController.java similarity index 64% rename from web-starter/src/main/java/com/lframework/starter/web/controller/DefaultBaseController.java rename to web-starter/src/main/java/com/lframework/starter/web/core/controller/DefaultBaseController.java index 2faf01b..9513e02 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/controller/DefaultBaseController.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/controller/DefaultBaseController.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.controller; +package com.lframework.starter.web.core.controller; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.utils.JsonUtil; -import com.lframework.starter.web.vo.BaseVo; -import com.lframework.starter.web.vo.OpenApiReqVo; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.inner.vo.openapi.OpenApiReqVo; /** * 具有Security能力的BaseController diff --git a/web-starter/src/main/java/com/lframework/starter/web/dto/BaseDto.java b/web-starter/src/main/java/com/lframework/starter/web/core/dto/BaseDto.java similarity index 60% rename from web-starter/src/main/java/com/lframework/starter/web/dto/BaseDto.java rename to web-starter/src/main/java/com/lframework/starter/web/core/dto/BaseDto.java index 8d8b5bb..6e77ce9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/dto/BaseDto.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/dto/BaseDto.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.dto; +package com.lframework.starter.web.core.dto; /** * Dto基类 diff --git a/web-starter/src/main/java/com/lframework/starter/web/dto/GenerateCaptchaDto.java b/web-starter/src/main/java/com/lframework/starter/web/core/dto/GenerateCaptchaDto.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/dto/GenerateCaptchaDto.java rename to web-starter/src/main/java/com/lframework/starter/web/core/dto/GenerateCaptchaDto.java index c017220..87a898d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/dto/GenerateCaptchaDto.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/dto/GenerateCaptchaDto.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.dto; +package com.lframework.starter.web.core.dto; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/dto/GenerateCodeDto.java b/web-starter/src/main/java/com/lframework/starter/web/core/dto/GenerateCodeDto.java new file mode 100644 index 0000000..5755242 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/dto/GenerateCodeDto.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.core.dto; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenerateCodeDto implements BaseDto, Serializable { + + public static final String CACHE_NAME = "GenerateCodeDto"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private Integer id; + + /** + * 规则配置 + */ + private String configStr; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/dto/VoidDto.java b/web-starter/src/main/java/com/lframework/starter/web/core/dto/VoidDto.java similarity index 63% rename from web-starter/src/main/java/com/lframework/starter/web/dto/VoidDto.java rename to web-starter/src/main/java/com/lframework/starter/web/core/dto/VoidDto.java index 1c216a4..d4fcb14 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/dto/VoidDto.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/dto/VoidDto.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.dto; +package com.lframework.starter.web.core.dto; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/entity/BaseEntity.java b/web-starter/src/main/java/com/lframework/starter/web/core/entity/BaseEntity.java similarity index 86% rename from web-starter/src/main/java/com/lframework/starter/web/entity/BaseEntity.java rename to web-starter/src/main/java/com/lframework/starter/web/core/entity/BaseEntity.java index 7947a1e..541dab9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/entity/BaseEntity.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/entity/BaseEntity.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.entity; +package com.lframework.starter.web.core.entity; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/enums/BaseEnum.java b/web-starter/src/main/java/com/lframework/starter/web/core/enums/BaseEnum.java similarity index 86% rename from web-starter/src/main/java/com/lframework/starter/web/enums/BaseEnum.java rename to web-starter/src/main/java/com/lframework/starter/web/core/enums/BaseEnum.java index 05f4e38..798daab 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/enums/BaseEnum.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/enums/BaseEnum.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.enums; +package com.lframework.starter.web.core.enums; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/event/ClearTenantEvent.java b/web-starter/src/main/java/com/lframework/starter/web/core/event/ClearTenantEvent.java similarity index 89% rename from web-starter/src/main/java/com/lframework/starter/web/event/ClearTenantEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/core/event/ClearTenantEvent.java index 33ba2e7..78a962b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/event/ClearTenantEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/event/ClearTenantEvent.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.event; +package com.lframework.starter.web.core.event; import org.springframework.context.ApplicationEvent; diff --git a/web-starter/src/main/java/com/lframework/starter/web/event/ReloadTenantEvent.java b/web-starter/src/main/java/com/lframework/starter/web/core/event/ReloadTenantEvent.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/event/ReloadTenantEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/core/event/ReloadTenantEvent.java index 779dcce..6b8c039 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/event/ReloadTenantEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/event/ReloadTenantEvent.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.event; +package com.lframework.starter.web.core.event; import org.springframework.context.ApplicationEvent; diff --git a/web-starter/src/main/java/com/lframework/starter/web/event/SetTenantEvent.java b/web-starter/src/main/java/com/lframework/starter/web/core/event/SetTenantEvent.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/event/SetTenantEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/core/event/SetTenantEvent.java index 5f488b5..46edbac 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/event/SetTenantEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/event/SetTenantEvent.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.event; +package com.lframework.starter.web.core.event; import org.springframework.context.ApplicationEvent; diff --git a/web-starter/src/main/java/com/lframework/starter/web/handlers/DefaultBaseEntityFillHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/handlers/DefaultBaseEntityFillHandler.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/handlers/DefaultBaseEntityFillHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/core/handlers/DefaultBaseEntityFillHandler.java index 4ec3eab..f9f3368 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/handlers/DefaultBaseEntityFillHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/handlers/DefaultBaseEntityFillHandler.java @@ -1,11 +1,11 @@ -package com.lframework.starter.web.handlers; +package com.lframework.starter.web.core.handlers; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.lframework.starter.common.utils.ObjectUtil; -import com.lframework.starter.web.components.security.AbstractUserDetails; -import com.lframework.starter.web.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; import com.lframework.starter.web.config.properties.DefaultSettingProperties; -import com.lframework.starter.web.constants.MyBatisStringPool; +import com.lframework.starter.web.core.constants.MyBatisStringPool; import java.time.LocalDateTime; import java.util.Objects; import java.util.function.Supplier; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionConverter.java new file mode 100644 index 0000000..5193777 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionConverter.java @@ -0,0 +1,52 @@ +package com.lframework.starter.web.core.handlers.exception; + +import com.lframework.starter.common.exceptions.BaseException; + +public interface WebExceptionConverter { + + /** + * 最高优先级,用于处理没有子类的异常 + */ + int FIRST_ORDER = Integer.MIN_VALUE; + + /** + * 次高优先级,用于处理系统内定义的异常,如:ClientException、SysException。 + */ + int SECOND_ORDER = FIRST_ORDER + 100; + + /** + * 第三优先级,用于处理系统之外的框架定义的并且需要特定处理的异常,如:BindException。 + */ + int THIRD_ORDER = SECOND_ORDER + 100; + /** + * 最低优先级,用于处理范围最大的异常,如:Exception。 + *

+ * 当本层都没有处理的异常,会统一处理,如:Throwable。 + */ + int LAST_ORDER = Integer.MAX_VALUE; + + /** + * 是否匹配 + * + * @param e + * @return + */ + boolean isMatch(Throwable e); + + /** + * 转换异常 + * + * @param e + * @return + */ + BaseException convert(Throwable e); + + /** + * 优先级 值越小越靠前 + * + * @return + */ + default int getOrder() { + return FIRST_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionHandler.java new file mode 100644 index 0000000..a7cd554 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/handlers/exception/WebExceptionHandler.java @@ -0,0 +1,104 @@ +package com.lframework.starter.web.core.handlers.exception; + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.ClientException; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.web.core.components.resp.Response; +import com.lframework.starter.web.core.components.resp.ResponseErrorBuilder; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.ResponseUtil; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.HandlerMethod; + +/** + * 异常处理器 + * + * @author zmj + */ +@Slf4j +@RestControllerAdvice +public class WebExceptionHandler { + + /** + * 处理Throwable + * + * @param e + * @param method + * @return + */ + @ExceptionHandler(Throwable.class) + public Response throwableHandle(Throwable e, HandlerMethod method) { + + this.logException(e, method); + + Collection converters = ApplicationUtil.getBeansOfType( + WebExceptionConverter.class).values(); + + BaseException ex = null; + converters = converters.stream().sorted(Comparator.comparingInt(WebExceptionConverter::getOrder)).collect( + Collectors.toList()); + + for (WebExceptionConverter converter : converters) { + if (converter.isMatch(e)) { + log.debug("WebExceptionConverter = {}", converter.getClass().getName()); + ex = converter.convert(e); + break; + } + } + if (ex == null) { + ex = new DefaultSysException("无法匹配WebExceptionConverter"); + } + this.setResponseCode(ex); + + return getBuilder(method.getBean()).fail(ex); + } + + protected void logException(Throwable e, HandlerMethod method) { + + if (e instanceof ClientException) { + if (log.isDebugEnabled()) { + String className = method.getBeanType().getName(); + String methodName = method.getMethod().getName(); + log.debug("className={}, methodName={}, 有异常产生", className, methodName, e); + } + } else { + String className = method.getBeanType().getName(); + String methodName = method.getMethod().getName(); + log.error("className={}, methodName={}, 有异常产生", className, methodName, e); + } + } + + protected void setResponseCode(BaseException e) { + + ResponseUtil.getResponse().setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); + } + + protected ResponseErrorBuilder getBuilder(Object bean) { + + Map builders = ApplicationUtil.getBeansOfType( + ResponseErrorBuilder.class); + ResponseErrorBuilder builder = null; + for (ResponseErrorBuilder value : builders.values()) { + if (value.isDefault()) { + builder = value; + break; + } + } + + for (ResponseErrorBuilder value : builders.values()) { + if (value.isMatch(bean)) { + builder = value; + break; + } + } + + return builder; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/impl/BaseMpServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/core/impl/BaseMpServiceImpl.java similarity index 95% rename from web-starter/src/main/java/com/lframework/starter/web/impl/BaseMpServiceImpl.java rename to web-starter/src/main/java/com/lframework/starter/web/core/impl/BaseMpServiceImpl.java index b2a8e46..1b19b2e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/impl/BaseMpServiceImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/impl/BaseMpServiceImpl.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.impl; +package com.lframework.starter.web.core.impl; import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -16,9 +16,9 @@ import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.ReflectUtil; -import com.lframework.starter.web.constants.SqlMethodConstants; -import com.lframework.starter.web.mapper.BaseMapper; -import com.lframework.starter.web.service.BaseMpService; +import com.lframework.starter.web.core.constants.SqlMethodConstants; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.core.service.BaseMpService; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Modifier; diff --git a/web-starter/src/main/java/com/lframework/starter/web/injectors/MybatisPlusUpdateAllColumnInjector.java b/web-starter/src/main/java/com/lframework/starter/web/core/injectors/MybatisPlusUpdateAllColumnInjector.java similarity index 97% rename from web-starter/src/main/java/com/lframework/starter/web/injectors/MybatisPlusUpdateAllColumnInjector.java rename to web-starter/src/main/java/com/lframework/starter/web/core/injectors/MybatisPlusUpdateAllColumnInjector.java index c3aa5e8..242e3b9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/injectors/MybatisPlusUpdateAllColumnInjector.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/injectors/MybatisPlusUpdateAllColumnInjector.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.injectors; +package com.lframework.starter.web.core.injectors; import static java.util.stream.Collectors.joining; @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; -import com.lframework.starter.web.constants.SqlMethodConstants; +import com.lframework.starter.web.core.constants.SqlMethodConstants; import java.util.List; import java.util.Objects; import java.util.function.Predicate; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/interceptors/CustomSortInterceptor.java b/web-starter/src/main/java/com/lframework/starter/web/core/interceptors/CustomSortInterceptor.java new file mode 100644 index 0000000..d07fb47 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/interceptors/CustomSortInterceptor.java @@ -0,0 +1,132 @@ +package com.lframework.starter.web.core.interceptors; + +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.vo.SortPageVo; +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import java.lang.reflect.Method; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.parser.CCJSqlParser; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.parser.ParseException; +import net.sf.jsqlparser.statement.Statement; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.Select; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +@Slf4j +public class CustomSortInterceptor extends JsqlParserSupport implements InnerInterceptor { + + @Override + public void beforeQuery( + Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, + ResultHandler resultHandler, BoundSql boundSql) throws SQLException { + if (parameter instanceof Map) { + Map map = (Map) parameter; + List sortPageVos = map.values().stream() + .filter(t -> t instanceof SortPageVo).map(t -> (SortPageVo) t) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(sortPageVos)) { + return; + } + Map sortMap = this.convertSortMap(ms.getId()); + if (CollectionUtil.isEmpty(sortMap)) { + return; + } + + StringBuilder sqlBuilder = new StringBuilder("ORDER BY "); + + List orderBySqlElements = sortPageVos.stream() + .filter(t -> sortMap.containsKey(t.getSortField())).map( + t -> sortMap.get(t.getSortField()) + " " + ( + "asc".equalsIgnoreCase(t.getSortOrder()) ? "ASC" : "DESC")).distinct() + .collect( + Collectors.toList()); + + if (CollectionUtil.isEmpty(orderBySqlElements)) { + return; + } + + // order by code asc, name desc + String sqlProvider = sqlBuilder.append(StringUtil.join(",", orderBySqlElements)) + .toString(); + + CCJSqlParser parser = CCJSqlParserUtil.newParser(sqlProvider); + + PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql); + + String sql = mpBs.sql(); + try { + Statement statement = CCJSqlParserUtil.parse(sql); + PlainSelect plainSelect = (PlainSelect) ((Select) statement).getSelectBody(); + plainSelect.setOrderByElements(parser.OrderByElements()); + mpBs.sql(statement.toString()); + } catch (JSQLParserException | ParseException e) { + log.error("Failed to process, Error SQL: {}", sql); + log.error(e.getMessage(), e); + } + } + } + + private Map convertSortMap(String statementId) { + // 获取Mapper执行方法上的注解 + Method mapperMethod = null; + try { + mapperMethod = this.findMapperMethod(this.convertMsId(statementId)); + } catch (ClassNotFoundException e) { + return null; + } + if (mapperMethod == null) { + return null; + } + Sorts sorts = mapperMethod.getAnnotation(Sorts.class); + + if (sorts != null) { + Sort[] sortList = sorts.value(); + Map sortKeyMap = new HashMap<>(sortList.length); + for (Sort sort : sortList) { + if (sort.autoParse()) { + sortKeyMap.put(sort.value(), (StringUtil.isEmpty(sort.alias()) ? "" : (sort.alias() + ".")) + StringUtil.toUnderlineCase(sort.value())); + } else { + sortKeyMap.put(sort.value(), StringUtil.isEmpty(sort.alias()) ? "" : sort.alias()); + } + } + + return sortKeyMap; + } + + return null; + } + + private String convertMsId(String id) { + return id; + } + + private Method findMapperMethod(String statementId) + throws ClassNotFoundException { + int lastDotIndex = statementId.lastIndexOf("."); + String className = statementId.substring(0, lastDotIndex); + String methodName = statementId.substring(lastDotIndex + 1); + + Class mapperInterface = Class.forName(className); + return Arrays.stream(mapperInterface.getDeclaredMethods()) + .filter(method -> method.getName().equals(methodName)) + .findFirst() + .orElse(null); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/components/security/LoginInterceptor.java b/web-starter/src/main/java/com/lframework/starter/web/core/interceptors/LoginInterceptor.java similarity index 89% rename from web-starter/src/main/java/com/lframework/starter/web/components/security/LoginInterceptor.java rename to web-starter/src/main/java/com/lframework/starter/web/core/interceptors/LoginInterceptor.java index 6b1d195..93b61a9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/components/security/LoginInterceptor.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/interceptors/LoginInterceptor.java @@ -1,10 +1,11 @@ -package com.lframework.starter.web.components.security; +package com.lframework.starter.web.core.interceptors; import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.annotation.AnnotationUtil; import com.lframework.starter.common.exceptions.impl.AuthExpiredException; -import com.lframework.starter.web.annotations.OpenApi; +import com.lframework.starter.web.core.annotations.openapi.OpenApi; +import com.lframework.starter.web.core.components.security.PermitAllService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; diff --git a/web-starter/src/main/java/com/lframework/starter/web/interceptors/TenantInterceptorImpl.java b/web-starter/src/main/java/com/lframework/starter/web/core/interceptors/TenantInterceptorImpl.java similarity index 70% rename from web-starter/src/main/java/com/lframework/starter/web/interceptors/TenantInterceptorImpl.java rename to web-starter/src/main/java/com/lframework/starter/web/core/interceptors/TenantInterceptorImpl.java index 40168ec..6486dab 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/interceptors/TenantInterceptorImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/interceptors/TenantInterceptorImpl.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.interceptors; +package com.lframework.starter.web.core.interceptors; -import com.lframework.starter.web.components.tenant.TenantInterceptor; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.tenant.TenantInterceptor; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.components.security.SecurityUtil; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; diff --git a/web-starter/src/main/java/com/lframework/starter/web/listeners/TenantListener.java b/web-starter/src/main/java/com/lframework/starter/web/core/listeners/TenantListener.java similarity index 86% rename from web-starter/src/main/java/com/lframework/starter/web/listeners/TenantListener.java rename to web-starter/src/main/java/com/lframework/starter/web/core/listeners/TenantListener.java index db8ad0a..35a1eb9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/listeners/TenantListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/listeners/TenantListener.java @@ -1,13 +1,13 @@ -package com.lframework.starter.web.listeners; +package com.lframework.starter.web.core.listeners; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; -import com.lframework.starter.web.utils.DataSourceUtil; -import com.lframework.starter.web.event.ClearTenantEvent; -import com.lframework.starter.web.event.ReloadTenantEvent; -import com.lframework.starter.web.event.SetTenantEvent; +import com.lframework.starter.web.core.utils.DataSourceUtil; +import com.lframework.starter.web.core.event.ClearTenantEvent; +import com.lframework.starter.web.core.event.ReloadTenantEvent; +import com.lframework.starter.web.core.event.SetTenantEvent; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; diff --git a/web-starter/src/main/java/com/lframework/starter/web/mapper/BaseMapper.java b/web-starter/src/main/java/com/lframework/starter/web/core/mapper/BaseMapper.java similarity index 97% rename from web-starter/src/main/java/com/lframework/starter/web/mapper/BaseMapper.java rename to web-starter/src/main/java/com/lframework/starter/web/core/mapper/BaseMapper.java index 31a9de3..b881953 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/mapper/BaseMapper.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/mapper/BaseMapper.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.mapper; +package com.lframework.starter.web.core.mapper; import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/BaseMpService.java b/web-starter/src/main/java/com/lframework/starter/web/core/service/BaseMpService.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/service/BaseMpService.java rename to web-starter/src/main/java/com/lframework/starter/web/core/service/BaseMpService.java index 133f198..a84b477 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/BaseMpService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/service/BaseMpService.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.service; +package com.lframework.starter.web.core.service; import cn.hutool.core.bean.copier.CopyOptions; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.lframework.starter.common.utils.BeanUtil; import com.lframework.starter.common.utils.CollectionUtil; -import com.lframework.starter.web.constants.MyBatisStringPool; -import com.lframework.starter.web.mapper.BaseMapper; -import com.lframework.starter.web.utils.ApplicationUtil; +import com.lframework.starter.web.core.constants.MyBatisStringPool; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.core.utils.ApplicationUtil; import java.io.Serializable; import java.util.Collection; import org.springframework.transaction.annotation.Transactional; diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/BaseService.java b/web-starter/src/main/java/com/lframework/starter/web/core/service/BaseService.java similarity index 78% rename from web-starter/src/main/java/com/lframework/starter/web/service/BaseService.java rename to web-starter/src/main/java/com/lframework/starter/web/core/service/BaseService.java index e9f8625..201b4c6 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/BaseService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/service/BaseService.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.service; +package com.lframework.starter.web.core.service; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/ApplicationUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ApplicationUtil.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/utils/ApplicationUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/ApplicationUtil.java index 6c962ba..11ea724 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/ApplicationUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ApplicationUtil.java @@ -1,5 +1,6 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; +import java.util.Collections; import java.util.Map; import java.util.Set; import javax.validation.ConstraintViolation; @@ -51,7 +52,11 @@ public class ApplicationUtil implements ApplicationContextAware { public static Map getBeansOfType(Class clazz) { - return APPLICATION_CONTEXT.getBeansOfType(clazz); + try { + return APPLICATION_CONTEXT.getBeansOfType(clazz); + } catch (BeansException e) { + return Collections.EMPTY_MAP; + } } public static void publishEvent(ApplicationEvent event) { diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/BoUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/BoUtil.java similarity index 90% rename from web-starter/src/main/java/com/lframework/starter/web/utils/BoUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/BoUtil.java index 0fdafb0..813d22e 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/BoUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/BoUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.util.ClassUtil; @@ -7,13 +7,13 @@ import com.lframework.starter.common.functions.SFunction; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.BeanUtil; import com.lframework.starter.common.utils.ReflectUtil; -import com.lframework.starter.web.annotations.constants.EncryType; -import com.lframework.starter.web.annotations.convert.EncryptConvert; -import com.lframework.starter.web.annotations.convert.EnumConvert; -import com.lframework.starter.web.annotations.convert.IgnoreConvert; -import com.lframework.starter.web.bo.BaseBo; -import com.lframework.starter.web.dto.BaseDto; -import com.lframework.starter.web.enums.BaseEnum; +import com.lframework.starter.web.core.annotations.constants.EncryType; +import com.lframework.starter.web.core.annotations.convert.EncryptConvert; +import com.lframework.starter.web.core.annotations.convert.EnumConvert; +import com.lframework.starter.web.core.annotations.convert.IgnoreConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.enums.BaseEnum; import java.io.Serializable; import java.lang.reflect.Field; import java.util.ArrayList; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/CacheUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/CacheUtil.java similarity index 94% rename from web-starter/src/main/java/com/lframework/starter/web/utils/CacheUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/CacheUtil.java index 6d40c9e..86cb01b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/CacheUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/CacheUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import org.springframework.cache.CacheManager; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/CronUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/CronUtil.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/utils/CronUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/CronUtil.java index 04c8e61..d11f171 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/CronUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/CronUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.StringUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/DataSourceUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/DataSourceUtil.java similarity index 98% rename from web-starter/src/main/java/com/lframework/starter/web/utils/DataSourceUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/DataSourceUtil.java index 5e976a1..e7e9887 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/DataSourceUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/DataSourceUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.baomidou.dynamic.datasource.creator.BasicDataSourceCreator; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/EncryptUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/EncryptUtil.java similarity index 97% rename from web-starter/src/main/java/com/lframework/starter/web/utils/EncryptUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/EncryptUtil.java index d063dc0..69dc57a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/EncryptUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/EncryptUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import cn.hutool.core.codec.Base64; import cn.hutool.crypto.SecureUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/EnumUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/EnumUtil.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/utils/EnumUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/EnumUtil.java index 0cbb80c..8750de9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/EnumUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/EnumUtil.java @@ -1,11 +1,11 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.ObjectUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.enums.BaseEnum; +import com.lframework.starter.web.core.enums.BaseEnum; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelImportUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ExcelImportUtil.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/utils/ExcelImportUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/ExcelImportUtil.java index 25036b0..8ab86a8 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelImportUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ExcelImportUtil.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import cn.dev33.satoken.stp.StpUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.bo.ExcelImportBo; +import com.lframework.starter.web.core.bo.ExcelImportBo; public class ExcelImportUtil { diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ExcelUtil.java similarity index 97% rename from web-starter/src/main/java/com/lframework/starter/web/utils/ExcelUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/ExcelUtil.java index 67df914..edddbb0 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/ExcelUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ExcelUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read.builder.ExcelReaderBuilder; @@ -14,11 +14,11 @@ import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.FileUtil; import com.lframework.starter.common.utils.ReflectUtil; -import com.lframework.starter.web.annotations.excel.ExcelRequired; -import com.lframework.starter.web.components.excel.ExcelHorizontalCellStyleStrategy; -import com.lframework.starter.web.components.excel.ExcelModel; -import com.lframework.starter.web.components.excel.ExcelMultipartWriterBuilder; -import com.lframework.starter.web.components.excel.ExcelMultipartWriterSheetBuilder; +import com.lframework.starter.web.core.annotations.excel.ExcelRequired; +import com.lframework.starter.web.core.components.excel.ExcelHorizontalCellStyleStrategy; +import com.lframework.starter.web.core.components.excel.ExcelModel; +import com.lframework.starter.web.core.components.excel.ExcelMultipartWriterBuilder; +import com.lframework.starter.web.core.components.excel.ExcelMultipartWriterSheetBuilder; import java.io.File; import java.io.IOException; import java.io.OutputStream; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/FieldEncryptUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/FieldEncryptUtil.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/utils/FieldEncryptUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/FieldEncryptUtil.java index 92107d6..3fe1913 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/FieldEncryptUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/FieldEncryptUtil.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import cn.hutool.core.util.DesensitizedUtil; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.annotations.constants.EncryType; +import com.lframework.starter.web.core.annotations.constants.EncryType; public class FieldEncryptUtil { diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/GroovyUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/GroovyUtil.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/utils/GroovyUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/GroovyUtil.java index cbc49eb..bac963b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/GroovyUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/GroovyUtil.java @@ -1,6 +1,6 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; -import com.lframework.starter.web.service.GroovySupportService; +import com.lframework.starter.web.inner.service.GroovySupportService; import groovy.lang.Binding; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyShell; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/HttpUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/HttpUtil.java similarity index 99% rename from web-starter/src/main/java/com/lframework/starter/web/utils/HttpUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/HttpUtil.java index d0adac8..dcfb7af 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/HttpUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/HttpUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.StringUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/IdUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/IdUtil.java similarity index 71% rename from web-starter/src/main/java/com/lframework/starter/web/utils/IdUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/IdUtil.java index 8712ab9..1b3b7f1 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/IdUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/IdUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.utils.IdWorker; @@ -20,6 +20,11 @@ public class IdUtil { return idWorker.nextIdStr(); } + public static long getIdLong() { + IdWorker idWorker = ApplicationUtil.getBean(IdWorker.class); + return idWorker.nextId(); + } + /** * 获取UUID * diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/JsonUtil.java similarity index 98% rename from web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/JsonUtil.java index da82ad2..5144b0a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/JsonUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/JsonUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import cn.hutool.json.JSONUtil; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/utils/OpLogUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/OpLogUtil.java new file mode 100644 index 0000000..056bf5c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/OpLogUtil.java @@ -0,0 +1,144 @@ +package com.lframework.starter.web.core.utils; + +import com.lframework.starter.common.utils.ThreadUtil; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.threads.DefaultRunnable; +import com.lframework.starter.web.inner.service.OpLogsService; +import com.lframework.starter.web.inner.vo.oplogs.CreateOpLogsVo; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import lombok.extern.slf4j.Slf4j; + +/** + * 操作日志Util + * + * @author zmj + */ +@Slf4j +public class OpLogUtil { + + private static final ThreadLocal>> VARIABLE_POOL = new InheritableThreadLocal<>(); + + private static final ThreadLocal> LOG_ID_POOL = new InheritableThreadLocal<>(); + + private static final ThreadLocal> EXTRA_POOL = new InheritableThreadLocal<>(); + + private static final ThreadLocal> OP_LOG_POOL = new InheritableThreadLocal<>(); + + private static final ExecutorService OP_LOG_EXECUTOR = ThreadUtil.newExecutorByBlockingCoefficient( + 0); + + public static void init(String logId) { + + initPool(); + + LOG_ID_POOL.get().add(logId); + + VARIABLE_POOL.get().putIfAbsent(logId, new HashMap<>()); + } + + public static void addLogs(Collection list) { + + try { + OP_LOG_POOL.get().addAll(list); + } catch (Exception e) { + // 这里异常不抛出 + log.error(e.getMessage(), e); + } + } + + public static void setVariable(String key, Object value) { + + VARIABLE_POOL.get().get(getCurrentLogId()).put(key, value); + } + + public static Map getVariables() { + + return VARIABLE_POOL.get().get(getCurrentLogId()); + } + + public static String getExtra() { + + Object value = EXTRA_POOL.get().get(getCurrentLogId()); + + return value == null ? null : JsonUtil.toJsonString(value); + } + + public static void setExtra(Object value) { + + EXTRA_POOL.get().put(getCurrentLogId(), value); + } + + public static void submitLog() { + submitLog(SecurityUtil.getCurrentUser()); + } + + public static void submitLog(AbstractUserDetails currentUser) { + if (LOG_ID_POOL.get() == null || LOG_ID_POOL.get().size() != 1) { + return; + } + List logs = OP_LOG_POOL.get(); + OpLogsService opLogsService = ApplicationUtil.getBean(OpLogsService.class); + OP_LOG_EXECUTOR.submit(new DefaultRunnable(() -> { + if (SecurityUtil.getCurrentUser() != null) { + opLogsService.create(logs); + } else { + if (currentUser != null) { + try { + SecurityUtil.setCurrentUser(currentUser); + opLogsService.create(logs); + } finally { + SecurityUtil.removeCurrentUser(); + } + } + } + })); + } + + public static void clear() { + boolean allClear = false; + if (LOG_ID_POOL.get().size() == 1) { + allClear = true; + } + + VARIABLE_POOL.get().remove(getCurrentLogId()); + EXTRA_POOL.get().remove(getCurrentLogId()); + LOG_ID_POOL.get().remove(LOG_ID_POOL.get().size() - 1); + + if (allClear) { + VARIABLE_POOL.remove(); + EXTRA_POOL.remove(); + LOG_ID_POOL.remove(); + OP_LOG_POOL.remove(); + } + } + + private static void initPool() { + + if (VARIABLE_POOL.get() == null) { + VARIABLE_POOL.set(new HashMap<>()); + } + + if (LOG_ID_POOL.get() == null) { + LOG_ID_POOL.set(new ArrayList<>()); + } + + if (EXTRA_POOL.get() == null) { + EXTRA_POOL.set(new HashMap<>()); + } + + if (OP_LOG_POOL.get() == null) { + OP_LOG_POOL.set(new ArrayList<>()); + } + } + + private static String getCurrentLogId() { + + return LOG_ID_POOL.get().get(LOG_ID_POOL.get().size() - 1); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/PageHelperUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/PageHelperUtil.java similarity index 86% rename from web-starter/src/main/java/com/lframework/starter/web/utils/PageHelperUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/PageHelperUtil.java index 19901e8..7831130 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/PageHelperUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/PageHelperUtil.java @@ -1,9 +1,9 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.github.pagehelper.PageHelper; import com.lframework.starter.common.utils.ObjectUtil; -import com.lframework.starter.web.constants.MybatisConstants; -import com.lframework.starter.web.vo.PageVo; +import com.lframework.starter.web.core.constants.MybatisConstants; +import com.lframework.starter.web.core.vo.PageVo; /** * 分页插件Util diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/PageResultUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/PageResultUtil.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/utils/PageResultUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/PageResultUtil.java index 2421657..9275e32 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/PageResultUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/PageResultUtil.java @@ -1,11 +1,11 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.pagehelper.PageInfo; import com.lframework.starter.common.utils.BeanUtil; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.ObjectUtil; -import com.lframework.starter.web.resp.PageResult; +import com.lframework.starter.web.core.components.resp.PageResult; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/RequestUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/RequestUtil.java similarity index 99% rename from web-starter/src/main/java/com/lframework/starter/web/utils/RequestUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/RequestUtil.java index aabc4e1..8b99cc7 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/RequestUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/RequestUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/ResponseUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ResponseUtil.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/utils/ResponseUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/ResponseUtil.java index a39f925..755c92b 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/ResponseUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ResponseUtil.java @@ -1,10 +1,10 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.BaseException; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.FileUtil; -import com.lframework.starter.web.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; import java.io.File; import java.io.IOException; import java.io.OutputStream; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/SimpleMap.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/SimpleMap.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/utils/SimpleMap.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/SimpleMap.java index a7262f2..e595b51 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/SimpleMap.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/SimpleMap.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.utils.StringUtil; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/SpelUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/SpelUtil.java similarity index 94% rename from web-starter/src/main/java/com/lframework/starter/web/utils/SpelUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/SpelUtil.java index dcf2da6..efaf35d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/SpelUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/SpelUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import java.util.Map; import org.springframework.expression.EvaluationContext; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/TenantUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/TenantUtil.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/utils/TenantUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/TenantUtil.java index 307caee..a076236 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/TenantUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/TenantUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.web.config.properties.TenantProperties; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/TransactionUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/TransactionUtil.java similarity index 96% rename from web-starter/src/main/java/com/lframework/starter/web/utils/TransactionUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/TransactionUtil.java index a8da38c..0701863 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/TransactionUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/TransactionUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/UploadUtil.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/UploadUtil.java index ef6f1f4..c8fdc6d 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/UploadUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/UploadUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.constants.StringPool; import com.lframework.starter.common.exceptions.impl.DefaultSysException; @@ -7,11 +7,11 @@ import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.DateUtil; import com.lframework.starter.common.utils.FileUtil; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.web.components.upload.UploadHandlerFactory; -import com.lframework.starter.web.components.upload.client.dto.UploadDto; -import com.lframework.starter.web.components.upload.handler.SecurityUploadHandler; -import com.lframework.starter.web.components.upload.handler.UploadHandler; -import com.lframework.starter.web.service.SysConfService; +import com.lframework.starter.web.core.components.upload.UploadHandlerFactory; +import com.lframework.starter.web.core.components.upload.client.dto.UploadDto; +import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; +import com.lframework.starter.web.core.components.upload.handler.UploadHandler; +import com.lframework.starter.web.inner.service.SysConfService; import java.io.File; import java.io.IOException; import java.io.InputStream; diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/ValidateUtil.java b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ValidateUtil.java similarity index 94% rename from web-starter/src/main/java/com/lframework/starter/web/utils/ValidateUtil.java rename to web-starter/src/main/java/com/lframework/starter/web/core/utils/ValidateUtil.java index 573d96a..a3ae1d1 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/ValidateUtil.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/utils/ValidateUtil.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.utils; +package com.lframework.starter.web.core.utils; import com.lframework.starter.common.utils.ArrayUtil; import com.lframework.starter.common.utils.CollectionUtil; diff --git a/web-starter/src/main/java/com/lframework/starter/web/vo/BaseVo.java b/web-starter/src/main/java/com/lframework/starter/web/core/vo/BaseVo.java similarity index 60% rename from web-starter/src/main/java/com/lframework/starter/web/vo/BaseVo.java rename to web-starter/src/main/java/com/lframework/starter/web/core/vo/BaseVo.java index a45d1d7..0fee954 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/vo/BaseVo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/vo/BaseVo.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.vo; +package com.lframework.starter.web.core.vo; /** * Vo基类 diff --git a/web-starter/src/main/java/com/lframework/starter/web/vo/PageVo.java b/web-starter/src/main/java/com/lframework/starter/web/core/vo/PageVo.java similarity index 91% rename from web-starter/src/main/java/com/lframework/starter/web/vo/PageVo.java rename to web-starter/src/main/java/com/lframework/starter/web/core/vo/PageVo.java index a365eab..ec8a0be 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/vo/PageVo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/vo/PageVo.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.vo; +package com.lframework.starter.web.core.vo; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; diff --git a/web-starter/src/main/java/com/lframework/starter/web/vo/SortPageVo.java b/web-starter/src/main/java/com/lframework/starter/web/core/vo/SortPageVo.java similarity index 89% rename from web-starter/src/main/java/com/lframework/starter/web/vo/SortPageVo.java rename to web-starter/src/main/java/com/lframework/starter/web/core/vo/SortPageVo.java index 3d76643..c0ef036 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/vo/SortPageVo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/vo/SortPageVo.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.vo; +package com.lframework.starter.web.core.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GenCustomListSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GenCustomListSelectorBo.java new file mode 100644 index 0000000..dea47fc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GenCustomListSelectorBo.java @@ -0,0 +1,55 @@ +package com.lframework.starter.web.gen.bo.custom.list; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.gen.service.GenCustomListCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomListSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 数据对象ID + */ + @ApiModelProperty("数据对象ID") + private String dataObjId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + public GenCustomListSelectorBo() { + } + + public GenCustomListSelectorBo(GenCustomList dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomList dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomListCategoryService genCustomListCategoryService = ApplicationUtil.getBean( + GenCustomListCategoryService.class); + GenCustomListCategory category = genCustomListCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GetGenCustomListBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GetGenCustomListBo.java new file mode 100644 index 0000000..42529dd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/GetGenCustomListBo.java @@ -0,0 +1,500 @@ +package com.lframework.starter.web.gen.bo.custom.list; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.bo.SuperBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.gen.entity.GenCustomListDetail; +import com.lframework.starter.web.gen.entity.GenCustomListHandleColumn; +import com.lframework.starter.web.gen.entity.GenCustomListQueryParams; +import com.lframework.starter.web.gen.entity.GenCustomListToolbar; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.gen.service.GenCustomListCategoryService; +import com.lframework.starter.web.gen.service.GenCustomListDetailService; +import com.lframework.starter.web.gen.service.GenCustomListHandleColumnService; +import com.lframework.starter.web.gen.service.GenCustomListQueryParamsService; +import com.lframework.starter.web.gen.service.GenCustomListToolbarService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import java.util.stream.Collectors; +import lombok.Data; + +@Data +public class GetGenCustomListBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 数据对象ID + */ + @ApiModelProperty("数据对象ID") + private String dataObjId; + + /** + * 列表类型 + */ + @ApiModelProperty("列表类型") + private Integer listType; + + /** + * 数据对象名称 + */ + @ApiModelProperty("数据对象名称") + private String dataObjName; + + /** + * 表单Label宽度 + */ + @ApiModelProperty("表单Label宽度") + private Integer labelWidth; + + /** + * 是否分页 + */ + @ApiModelProperty("是否分页") + private Boolean hasPage; + + /** + * 是否树形列表 + */ + @ApiModelProperty("是否树形列表") + private Boolean treeData; + + /** + * ID字段 + */ + @ApiModelProperty("ID字段") + private String idColumn; + + /** + * 父级ID字段 + */ + @ApiModelProperty("父级ID字段") + private String treePidColumn; + + /** + * 树形节点字段 + */ + @ApiModelProperty("树形节点字段") + private String treeNodeColumn; + + /** + * 子节点Key值 + */ + @ApiModelProperty("子节点Key值") + private String treeChildrenKey; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 查询前置SQL + */ + @ApiModelProperty("查询前置SQL") + private String queryPrefixSql; + + /** + * 查询后置SQL + */ + @ApiModelProperty("查询后置SQL") + private String querySuffixSql; + + /** + * 后置SQL + */ + @ApiModelProperty("后置SQL") + private String suffixSql; + + /** + * 是否允许导出 + */ + @ApiModelProperty("是否允许导出") + private Boolean allowExport; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 工具栏 + */ + @ApiModelProperty("工具栏") + private List toolbars; + + /** + * 操作列 + */ + @ApiModelProperty("操作列") + private List handleColumns; + + /** + * 查询条件 + */ + @ApiModelProperty("查询条件") + private List queryParams; + + /** + * 详情 + */ + @ApiModelProperty("详情") + private List details; + + public GetGenCustomListBo() { + } + + public GetGenCustomListBo(GenCustomList dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomList dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomListCategoryService genCustomListCategoryService = ApplicationUtil.getBean( + GenCustomListCategoryService.class); + GenCustomListCategory category = genCustomListCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + + this.listType = dto.getListType().getCode(); + + GenDataEntityDetailService genDataEntityDetailService = ApplicationUtil + .getBean(GenDataEntityDetailService.class); + GenDataObjService genDataObjService = ApplicationUtil.getBean(GenDataObjService.class); + GenDataObj dataObj = genDataObjService.findById(dto.getDataObjId()); + this.dataObjName = dataObj.getName(); + + GenCustomListQueryParamsService genCustomListQueryParamsService = ApplicationUtil.getBean( + GenCustomListQueryParamsService.class); + List queryParams = genCustomListQueryParamsService.getByCustomListId( + dto.getId()); + if (!CollectionUtil.isEmpty(queryParams)) { + this.queryParams = queryParams.stream().map(t -> { + GenDataEntityDetail entityDetail = genDataEntityDetailService.getById(t.getDataEntityId()); + QueryParamsBo bo = new QueryParamsBo(); + bo.setId(t.getDataEntityId()); + bo.setRelaId(t.getRelaId()); + bo.setFrontShow(t.getFrontShow()); + bo.setQueryType(t.getQueryType().getCode()); + bo.setFormWidth(t.getFormWidth()); + bo.setDefaultValue(t.getDefaultValue()); + bo.setType(t.getType().getCode()); + bo.setDataType(entityDetail.getDataType().getCode()); + bo.setViewType(entityDetail.getViewType().getCode()); + + return bo; + }).collect(Collectors.toList()); + } + + GenCustomListDetailService genCustomListDetailService = ApplicationUtil.getBean( + GenCustomListDetailService.class); + List details = genCustomListDetailService.getByCustomListId(dto.getId()); + this.details = details.stream().map(t -> { + DetailBo bo = new DetailBo(); + bo.setId(t.getDataEntityId()); + bo.setRelaId(t.getRelaId()); + bo.setWidthType(t.getWidthType().getCode()); + bo.setSortable(t.getSortable()); + bo.setWidth(t.getWidth()); + bo.setType(t.getType().getCode()); + if (t.getType() == GenCustomListDetailType.CUSTOM) { + bo.setId(t.getRelaId()); + } + bo.setFormatter(t.getFormatter()); + + return bo; + }).collect(Collectors.toList()); + + GenCustomListToolbarService genCustomListToolbarService = ApplicationUtil + .getBean(GenCustomListToolbarService.class); + List toolbars = genCustomListToolbarService + .getByCustomListId(dto.getId()); + + this.toolbars = toolbars.stream().map(t -> { + ToolbarBo toolbar = new ToolbarBo(); + toolbar.setId(t.getId()); + toolbar.setName(t.getName()); + toolbar.setViewType(t.getViewType().getCode()); + toolbar.setBtnType(t.getBtnType().getCode()); + toolbar.setBtnConfig(t.getBtnConfig()); + toolbar.setIcon(t.getIcon()); + return toolbar; + }).collect(Collectors.toList()); + + GenCustomListHandleColumnService genCustomListHandleColumnService = ApplicationUtil + .getBean(GenCustomListHandleColumnService.class); + List handleColumns = genCustomListHandleColumnService + .getByCustomListId(dto.getId()); + + this.handleColumns = handleColumns.stream().map(t -> { + HandleColumnBo handleColumn = new HandleColumnBo(); + handleColumn.setId(t.getId()); + handleColumn.setName(t.getName()); + handleColumn.setViewType(t.getViewType().getCode()); + handleColumn.setBtnType(t.getBtnType().getCode()); + handleColumn.setBtnConfig(t.getBtnConfig()); + handleColumn.setWidth(t.getWidth()); + handleColumn.setIcon(t.getIcon()); + return handleColumn; + }).collect(Collectors.toList()); + } + + @Data + public static class ToolbarBo implements SuperBo { + + /** + * ID + */ + @ApiModelProperty(value = "ID") + private String id; + + /** + * 显示名称 + */ + @ApiModelProperty(value = "显示名称") + private String name; + + /** + * 显示类型 + */ + @ApiModelProperty(value = "显示类型") + private String viewType; + + /** + * 按钮类型 + */ + @ApiModelProperty(value = "按钮类型") + private Integer btnType; + + /** + * 按钮配置 + */ + @ApiModelProperty(value = "按钮配置") + private String btnConfig; + + /** + * 图标 + */ + @ApiModelProperty(value = "图标") + private String icon; + + /** + * 请求参数 + */ + @ApiModelProperty(value = "请求参数") + private String requestParam; + + /** + * 自定义表单ID + */ + @ApiModelProperty(value = "自定义表单ID") + private String customFormId; + + /** + * 自定义表单名称 + */ + @ApiModelProperty(value = "自定义表单名称") + private String customFormName; + } + + @Data + public static class QueryParamsBo implements SuperBo { + + /** + * ID + */ + @ApiModelProperty(value = "ID") + private String id; + + /** + * 关联ID + */ + @ApiModelProperty(value = "关联ID") + private String relaId; + + /** + * 前端显示 + */ + @ApiModelProperty(value = "前端显示") + private Boolean frontShow; + + /** + * 查询类型 + */ + @ApiModelProperty(value = "查询类型") + private Integer queryType; + + /** + * 表单宽度 + */ + @ApiModelProperty(value = "表单宽度") + private Integer formWidth; + + /** + * 默认值 + */ + @ApiModelProperty(value = "默认值") + private String defaultValue; + + /** + * 类型 + */ + @ApiModelProperty(value = "类型") + private Integer type; + + /** + * 数据类型 + */ + @ApiModelProperty("数据对象") + private Integer dataType; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + private Integer viewType; + } + + @Data + public static class DetailBo implements SuperBo { + + /** + * ID + */ + @ApiModelProperty(value = "ID") + private String id; + + /** + * 关联ID + */ + @ApiModelProperty("关联ID") + private String relaId; + + /** + * 宽度类型 + */ + @ApiModelProperty(value = "宽度类型") + private Integer widthType; + + /** + * 是否页面排序 + */ + @ApiModelProperty(value = "是否页面排序") + private Boolean sortable; + + /** + * 宽度 + */ + @ApiModelProperty(value = "宽度") + private Integer width; + + /** + * 类型 + */ + @ApiModelProperty(value = "类型") + private Integer type; + + /** + * 格式化脚本 + */ + @ApiModelProperty("格式化脚本") + private String formatter; + } + + @Data + public static class HandleColumnBo implements SuperBo { + + /** + * ID + */ + @ApiModelProperty(value = "ID") + private String id; + + /** + * 显示名称 + */ + @ApiModelProperty(value = "显示名称") + private String name; + + /** + * 显示类型 + */ + @ApiModelProperty(value = "显示类型") + private String viewType; + + /** + * 按钮类型 + */ + @ApiModelProperty(value = "按钮类型") + private Integer btnType; + + /** + * 按钮配置 + */ + @ApiModelProperty(value = "按钮配置") + private String btnConfig; + + /** + * 图标 + */ + @ApiModelProperty(value = "图标") + private String icon; + + /** + * 请求参数 + */ + @ApiModelProperty(value = "请求参数") + private String requestParam; + + /** + * 宽度 + */ + @ApiModelProperty(value = "宽度") + private Integer width; + + /** + * 自定义表单ID + */ + @ApiModelProperty(value = "自定义表单ID") + private String customFormId; + + /** + * 自定义表单名称 + */ + @ApiModelProperty(value = "自定义表单名称") + private String customFormName; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/QueryGenCustomListBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/QueryGenCustomListBo.java new file mode 100644 index 0000000..40e8cab --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/QueryGenCustomListBo.java @@ -0,0 +1,97 @@ +package com.lframework.starter.web.gen.bo.custom.list; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.gen.service.GenCustomListCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryGenCustomListBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人ID + */ + @ApiModelProperty("创建人ID") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 修改人ID + */ + @ApiModelProperty("修改人ID") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime updateTime; + + public QueryGenCustomListBo() { + } + + public QueryGenCustomListBo(GenCustomList dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomList dto) { + + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomListCategoryService genDataObjCategoryService = ApplicationUtil.getBean( + GenCustomListCategoryService.class); + GenCustomListCategory category = genDataObjCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GenCustomListCategorySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GenCustomListCategorySelectorBo.java new file mode 100644 index 0000000..5c2167d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GenCustomListCategorySelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.bo.custom.list.category; + +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomListCategorySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public GenCustomListCategorySelectorBo() { + } + + public GenCustomListCategorySelectorBo(GenCustomListCategory dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GetGenCustomListCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GetGenCustomListCategoryBo.java new file mode 100644 index 0000000..8d6d420 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/GetGenCustomListCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.custom.list.category; + +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetGenCustomListCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public GetGenCustomListCategoryBo() { + + } + + public GetGenCustomListCategoryBo(GenCustomListCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/QueryGenCustomListCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/QueryGenCustomListCategoryBo.java new file mode 100644 index 0000000..ab6b8da --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/list/category/QueryGenCustomListCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.custom.list.category; + +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryGenCustomListCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public QueryGenCustomListCategoryBo() { + + } + + public QueryGenCustomListCategoryBo(GenCustomListCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GenCustomPageSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GenCustomPageSelectorBo.java new file mode 100644 index 0000000..4470565 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GenCustomPageSelectorBo.java @@ -0,0 +1,50 @@ +package com.lframework.starter.web.gen.bo.custom.page; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.gen.service.GenCustomPageCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomPageSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + public GenCustomPageSelectorBo() { + } + + public GenCustomPageSelectorBo(GenCustomPage dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomPage dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomPageCategoryService genCustomPageCategoryService = ApplicationUtil.getBean( + GenCustomPageCategoryService.class); + GenCustomPageCategory category = genCustomPageCategoryService + .findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GetGenCustomPageBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GetGenCustomPageBo.java new file mode 100644 index 0000000..c672bd6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/GetGenCustomPageBo.java @@ -0,0 +1,74 @@ +package com.lframework.starter.web.gen.bo.custom.page; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.gen.service.GenCustomPageCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetGenCustomPageBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 页面代码 + */ + @ApiModelProperty("页面代码") + private String pageCode; + + /** + * 脚本代码 + */ + @ApiModelProperty("脚本代码") + private String scriptCode; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetGenCustomPageBo() { + } + + public GetGenCustomPageBo(GenCustomPage dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomPage dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomPageCategoryService genCustomPageCategoryService = ApplicationUtil.getBean( + GenCustomPageCategoryService.class); + GenCustomPageCategory category = genCustomPageCategoryService + .findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/QueryGenCustomPageBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/QueryGenCustomPageBo.java new file mode 100644 index 0000000..6cb62e6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/QueryGenCustomPageBo.java @@ -0,0 +1,92 @@ +package com.lframework.starter.web.gen.bo.custom.page; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.gen.service.GenCustomPageCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryGenCustomPageBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人ID + */ + @ApiModelProperty("创建人ID") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 修改人ID + */ + @ApiModelProperty("修改人ID") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime updateTime; + + public QueryGenCustomPageBo() { + } + + public QueryGenCustomPageBo(GenCustomPage dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomPage dto) { + + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomPageCategoryService genCustomPageCategoryService = ApplicationUtil.getBean( + GenCustomPageCategoryService.class); + GenCustomPageCategory category = genCustomPageCategoryService + .findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GenCustomPageCategorySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GenCustomPageCategorySelectorBo.java new file mode 100644 index 0000000..c09712d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GenCustomPageCategorySelectorBo.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.gen.bo.custom.page.category; + +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomPageCategorySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + public GenCustomPageCategorySelectorBo() { + } + + public GenCustomPageCategorySelectorBo(GenCustomPageCategory dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GetGenCustomPageCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GetGenCustomPageCategoryBo.java new file mode 100644 index 0000000..d4c9210 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/GetGenCustomPageCategoryBo.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.gen.bo.custom.page.category; + +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetGenCustomPageCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + + public GetGenCustomPageCategoryBo() { + + } + + public GetGenCustomPageCategoryBo(GenCustomPageCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/QueryGenCustomPageCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/QueryGenCustomPageCategoryBo.java new file mode 100644 index 0000000..47615cb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/page/category/QueryGenCustomPageCategoryBo.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.gen.bo.custom.page.category; + +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryGenCustomPageCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + + public QueryGenCustomPageCategoryBo() { + + } + + public QueryGenCustomPageCategoryBo(GenCustomPageCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GenCustomSelectorSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GenCustomSelectorSelectorBo.java new file mode 100644 index 0000000..0ad209d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GenCustomSelectorSelectorBo.java @@ -0,0 +1,50 @@ +package com.lframework.starter.web.gen.bo.custom.selector; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.gen.service.GenCustomSelectorCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomSelectorSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + public GenCustomSelectorSelectorBo() { + } + + public GenCustomSelectorSelectorBo(GenCustomSelector dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomSelector dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomSelectorCategoryService genCustomListCategoryService = ApplicationUtil.getBean( + GenCustomSelectorCategoryService.class); + GenCustomSelectorCategory category = genCustomListCategoryService + .findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GetGenCustomSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GetGenCustomSelectorBo.java new file mode 100644 index 0000000..263c6f9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/GetGenCustomSelectorBo.java @@ -0,0 +1,125 @@ +package com.lframework.starter.web.gen.bo.custom.selector; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.service.GenCustomSelectorCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetGenCustomSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 数据对象ID + */ + @ApiModelProperty("数据对象ID") + private String dataObjId; + + /** + * 自定义列表ID + */ + @ApiModelProperty("自定义列表ID") + private String customListId; + + /** + * 自定义列表名称 + */ + @ApiModelProperty("自定义列表名称") + private String customListName; + + /** + * 对话框标题 + */ + @ApiModelProperty("对话框标题") + private String dialogTittle; + + /** + * 对话框宽度 + */ + @ApiModelProperty("对话框宽度") + private String dialogWidth; + + /** + * 占位符 + */ + @ApiModelProperty("占位符") + private String placeholder; + + /** + * ID字段 + */ + @ApiModelProperty("ID字段") + private String idColumn; + + /** + * 名称字段 + */ + @ApiModelProperty("名称字段") + private String nameColumn; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetGenCustomSelectorBo() { + } + + public GetGenCustomSelectorBo(GenCustomSelector dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomSelector dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomSelectorCategoryService genCustomListCategoryService = ApplicationUtil.getBean( + GenCustomSelectorCategoryService.class); + GenCustomSelectorCategory category = genCustomListCategoryService + .findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + + GenCustomListService genCustomListService = ApplicationUtil + .getBean(GenCustomListService.class); + GenCustomList customList = genCustomListService.findById(dto.getCustomListId()); + this.customListName = customList.getName(); + + this.dataObjId = customList.getDataObjId(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/QueryGenCustomSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/QueryGenCustomSelectorBo.java new file mode 100644 index 0000000..4b8a7e5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/QueryGenCustomSelectorBo.java @@ -0,0 +1,98 @@ +package com.lframework.starter.web.gen.bo.custom.selector; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.gen.service.GenCustomSelectorCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryGenCustomSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人ID + */ + @ApiModelProperty("创建人ID") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 修改人ID + */ + @ApiModelProperty("修改人ID") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime updateTime; + + public QueryGenCustomSelectorBo() { + } + + public QueryGenCustomSelectorBo(GenCustomSelector dto) { + super(dto); + } + + @Override + protected void afterInit(GenCustomSelector dto) { + + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenCustomSelectorCategoryService customSelectorCategoryService = ApplicationUtil.getBean( + GenCustomSelectorCategoryService.class); + GenCustomSelectorCategory category = customSelectorCategoryService + .findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GenCustomSelectorCategorySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GenCustomSelectorCategorySelectorBo.java new file mode 100644 index 0000000..73cb880 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GenCustomSelectorCategorySelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.bo.custom.selector.category; + +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomSelectorCategorySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public GenCustomSelectorCategorySelectorBo() { + } + + public GenCustomSelectorCategorySelectorBo(GenCustomSelectorCategory dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GetGenCustomSelectorCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GetGenCustomSelectorCategoryBo.java new file mode 100644 index 0000000..d12231b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/GetGenCustomSelectorCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.custom.selector.category; + +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetGenCustomSelectorCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public GetGenCustomSelectorCategoryBo() { + + } + + public GetGenCustomSelectorCategoryBo(GenCustomSelectorCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/QueryGenCustomSelectorCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/QueryGenCustomSelectorCategoryBo.java new file mode 100644 index 0000000..e2519f5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/custom/selector/category/QueryGenCustomSelectorCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.custom.selector.category; + +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryGenCustomSelectorCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public QueryGenCustomSelectorCategoryBo() { + + } + + public QueryGenCustomSelectorCategoryBo(GenCustomSelectorCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/DataEntityGenerateBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/DataEntityGenerateBo.java new file mode 100644 index 0000000..45d1a4e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/DataEntityGenerateBo.java @@ -0,0 +1,114 @@ +package com.lframework.starter.web.gen.bo.data.entity; + +import com.lframework.starter.common.functions.SFunction; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.bo.gen.GenCreateColumnConfigBo; +import com.lframework.starter.web.gen.bo.gen.GenDetailColumnConfigBo; +import com.lframework.starter.web.gen.bo.gen.GenGenerateInfoBo; +import com.lframework.starter.web.gen.bo.gen.GenQueryColumnConfigBo; +import com.lframework.starter.web.gen.bo.gen.GenQueryParamsColumnConfigBo; +import com.lframework.starter.web.gen.bo.gen.GenUpdateColumnConfigBo; +import com.lframework.starter.web.gen.dto.data.entity.DataEntityGenerateDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import java.util.stream.Collectors; +import lombok.Data; + +@Data +public class DataEntityGenerateBo extends BaseBo { + + /** + * 字段信息 + */ + @ApiModelProperty("字段信息") + private List columns; + + /** + * 基本设置 + */ + @ApiModelProperty("基本设置") + private GenGenerateInfoBo generateInfo; + + /** + * 新增配置 + */ + @ApiModelProperty("新增配置") + private List createConfigs; + + /** + * 修改配置 + */ + @ApiModelProperty("修改配置") + private List updateConfigs; + + /** + * 查询配置 + */ + @ApiModelProperty("查询配置") + private List queryConfigs; + + /** + * 查询参数配置 + */ + @ApiModelProperty("查询参数配置") + private List queryParamsConfigs; + + /** + * 详情配置 + */ + @ApiModelProperty("详情配置") + private List detailConfigs; + + public DataEntityGenerateBo(DataEntityGenerateDto dto) { + + super(dto); + } + + @Override + public BaseBo convert(DataEntityGenerateDto dto) { + + return this; + } + + @Override + public BaseBo convert(DataEntityGenerateDto dto, + SFunction... columns) { + + return this; + } + + @Override + protected void afterInit(DataEntityGenerateDto dto) { + + this.columns = dto.getColumns().stream().map(GenDataEntityDetailGenerateBo::new) + .collect(Collectors.toList()); + this.generateInfo = + dto.getGenerateInfo() == null ? null : new GenGenerateInfoBo(dto.getGenerateInfo()); + if (!CollectionUtil.isEmpty(dto.getCreateConfigs())) { + this.createConfigs = dto.getCreateConfigs().stream().map(GenCreateColumnConfigBo::new) + .collect(Collectors.toList()); + } + + if (!CollectionUtil.isEmpty(dto.getUpdateConfigs())) { + this.updateConfigs = dto.getUpdateConfigs().stream().map(GenUpdateColumnConfigBo::new) + .collect(Collectors.toList()); + } + + if (!CollectionUtil.isEmpty(dto.getQueryConfigs())) { + this.queryConfigs = dto.getQueryConfigs().stream().map(GenQueryColumnConfigBo::new) + .collect(Collectors.toList()); + } + + if (!CollectionUtil.isEmpty(dto.getQueryParamsConfigs())) { + this.queryParamsConfigs = dto.getQueryParamsConfigs().stream() + .map(GenQueryParamsColumnConfigBo::new) + .collect(Collectors.toList()); + } + + if (!CollectionUtil.isEmpty(dto.getDetailConfigs())) { + this.detailConfigs = dto.getDetailConfigs().stream().map(GenDetailColumnConfigBo::new) + .collect(Collectors.toList()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailBo.java new file mode 100644 index 0000000..a84a2b0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailBo.java @@ -0,0 +1,169 @@ +package com.lframework.starter.web.gen.bo.data.entity; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataEntityDetailBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 字段显示名称 + */ + @ApiModelProperty("字段显示名称") + private String name; + + /** + * 字段名称 + */ + @ApiModelProperty("字段名称") + private String columnName; + + /** + * 是否主键 + */ + @ApiModelProperty("是否主键") + private Boolean isKey; + + /** + * 数据类型 + */ + @ApiModelProperty("数据类型") + private Integer dataType; + + /** + * 排序编号 + */ + @ApiModelProperty("排序编号") + private Integer columnOrder; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + private Integer viewType; + + /** + * 是否内置枚举 + */ + @ApiModelProperty("是否内置枚举") + private Boolean fixEnum; + + /** + * 后端枚举名 + */ + @ApiModelProperty("后端枚举名") + private String enumBack; + + /** + * 前端枚举名 + */ + @ApiModelProperty("前端枚举名") + private String enumFront; + + /** + * 正则表达式 + */ + @ApiModelProperty("正则表达式") + private String regularExpression; + + /** + * 是否排序字段 + */ + @ApiModelProperty("是否排序字段") + private Boolean isOrder; + + /** + * 排序类型 + */ + @ApiModelProperty("排序类型") + private String orderType; + + /** + * 数据字典ID + */ + private String dataDicId; + + /** + * 数据字典名称 + */ + private String dataDicName; + + /** + * 自定义选择器ID + */ + private String customSelectorId; + + /** + * 自定义选择器名称 + */ + private String customSelectorName; + + /** + * 长度 + */ + @ApiModelProperty("长度") + private Long len; + + /** + * 小数位数 + */ + @ApiModelProperty("小数位数") + private Integer decimals; + + public GenDataEntityDetailBo() { + + } + + public GenDataEntityDetailBo(GenDataEntityDetail dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenDataEntityDetail dto) { + + return super.convert(dto, GenDataEntityDetailBo::getDataType, + GenDataEntityDetailBo::getViewType, GenDataEntityDetailBo::getOrderType); + } + + @Override + protected void afterInit(GenDataEntityDetail dto) { + + this.dataType = dto.getDataType().getCode(); + this.viewType = dto.getViewType().getCode(); + this.orderType = dto.getOrderType() == null ? null : dto.getOrderType().getCode(); + + if (!StringUtil.isBlank(dto.getDataDicId())) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dic = sysDataDicService.findById(dto.getDataDicId()); + this.dataDicName = dic.getName(); + } + + if (!StringUtil.isBlank(dto.getCustomSelectorId())) { + GenCustomSelectorService genCustomSelectorService = ApplicationUtil + .getBean(GenCustomSelectorService.class); + GenCustomSelector selector = genCustomSelectorService.findById(dto.getCustomSelectorId()); + this.customSelectorName = selector.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailGenerateBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailGenerateBo.java new file mode 100644 index 0000000..11afbd6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailGenerateBo.java @@ -0,0 +1,119 @@ +package com.lframework.starter.web.gen.bo.data.entity; + +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataEntityDetailGenerateBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 字段显示名称 + */ + @ApiModelProperty("字段显示名称") + private String name; + + /** + * 字段名称 + */ + @ApiModelProperty("字段名称") + private String columnName; + + /** + * 是否主键 + */ + @ApiModelProperty("是否主键") + private Boolean isKey; + + /** + * 数据类型 + */ + @ApiModelProperty("数据类型") + private Integer dataType; + + /** + * 排序编号 + */ + @ApiModelProperty("排序编号") + private Integer columnOrder; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + private Integer viewType; + + /** + * 是否内置枚举 + */ + @ApiModelProperty("是否内置枚举") + private Boolean fixEnum; + + /** + * 后端枚举名 + */ + @ApiModelProperty("后端枚举名") + private String enumBack; + + /** + * 前端枚举名 + */ + @ApiModelProperty("前端枚举名") + private String enumFront; + + /** + * 正则表达式 + */ + @ApiModelProperty("正则表达式") + private String regularExpression; + + /** + * 是否排序字段 + */ + @ApiModelProperty("是否排序字段") + private Boolean isOrder; + + /** + * 排序类型 + */ + @ApiModelProperty("排序类型") + private String orderType; + + public GenDataEntityDetailGenerateBo() { + + } + + public GenDataEntityDetailGenerateBo(GenDataEntityDetail dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenDataEntityDetail dto) { + + return super.convert(dto, GenDataEntityDetailGenerateBo::getDataType, + GenDataEntityDetailGenerateBo::getViewType, + GenDataEntityDetailGenerateBo::getOrderType); + } + + @Override + protected void afterInit(GenDataEntityDetail dto) { + + this.dataType = dto.getDataType().getCode(); + this.viewType = dto.getViewType().getCode(); + this.orderType = dto.getOrderType() == null ? null : dto.getOrderType().getCode(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailSelectorBo.java new file mode 100644 index 0000000..8f5317d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntityDetailSelectorBo.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.gen.bo.data.entity; + +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataEntityDetailSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public GenDataEntityDetailSelectorBo() { + } + + public GenDataEntityDetailSelectorBo(GenDataEntityDetail dto) { + super(dto); + } + + @Override + protected void afterInit(GenDataEntityDetail dto) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntitySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntitySelectorBo.java new file mode 100644 index 0000000..b800da7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GenDataEntitySelectorBo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.gen.bo.data.entity; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.service.GenDataEntityCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataEntitySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + public GenDataEntitySelectorBo() { + } + + public GenDataEntitySelectorBo(GenDataEntity dto) { + super(dto); + } + + @Override + protected void afterInit(GenDataEntity dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenDataEntityCategoryService genDataEntityCategoryService = ApplicationUtil.getBean( + GenDataEntityCategoryService.class); + GenDataEntityCategory category = genDataEntityCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GetDataEntityBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GetDataEntityBo.java new file mode 100644 index 0000000..8c5c2a8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/GetDataEntityBo.java @@ -0,0 +1,95 @@ +package com.lframework.starter.web.gen.bo.data.entity; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.service.GenDataEntityCategoryService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import java.util.stream.Collectors; +import lombok.Data; + +@Data +public class GetDataEntityBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 数据表 + */ + @ApiModelProperty("数据表") + private String tableName; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 字段信息 + */ + @ApiModelProperty("字段信息") + private List columns; + + public GetDataEntityBo() { + + } + + public GetDataEntityBo(GenDataEntity dto) { + + super(dto); + } + + @Override + protected void afterInit(GenDataEntity dto) { + + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenDataEntityCategoryService genDataEntityCategoryService = ApplicationUtil.getBean( + GenDataEntityCategoryService.class); + GenDataEntityCategory category = genDataEntityCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + + this.tableName = dto.getTableName(); + + GenDataEntityDetailService genDataEntityDetailService = ApplicationUtil.getBean( + GenDataEntityDetailService.class); + List details = genDataEntityDetailService.getByEntityId(dto.getId()); + this.columns = details.stream().map(GenDataEntityDetailBo::new).collect(Collectors.toList()); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/QueryDataEntityBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/QueryDataEntityBo.java new file mode 100644 index 0000000..6865a16 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/QueryDataEntityBo.java @@ -0,0 +1,104 @@ +package com.lframework.starter.web.gen.bo.data.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.service.GenDataEntityCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryDataEntityBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 生成状态 + */ + @ApiModelProperty("生成状态") + private Integer genStatus; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人ID + */ + @ApiModelProperty("创建人ID") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 修改人ID + */ + @ApiModelProperty("修改人ID") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime updateTime; + + public QueryDataEntityBo() { + } + + public QueryDataEntityBo(GenDataEntity dto) { + super(dto); + } + + @Override + protected void afterInit(GenDataEntity dto) { + + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenDataEntityCategoryService genDataEntityCategoryService = ApplicationUtil.getBean( + GenDataEntityCategoryService.class); + GenDataEntityCategory category = genDataEntityCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + this.genStatus = dto.getGenStatus().getCode(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GenDataEntityCategorySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GenDataEntityCategorySelectorBo.java new file mode 100644 index 0000000..4026fe7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GenDataEntityCategorySelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.bo.data.entity.category; + +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataEntityCategorySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public GenDataEntityCategorySelectorBo() { + } + + public GenDataEntityCategorySelectorBo(GenDataEntityCategory dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GetGenDataEntityCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GetGenDataEntityCategoryBo.java new file mode 100644 index 0000000..8ea2baf --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/GetGenDataEntityCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.data.entity.category; + +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetGenDataEntityCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public GetGenDataEntityCategoryBo() { + + } + + public GetGenDataEntityCategoryBo(GenDataEntityCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/QueryGenDataEntityCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/QueryGenDataEntityCategoryBo.java new file mode 100644 index 0000000..c0c2d1b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/entity/category/QueryGenDataEntityCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.data.entity.category; + +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryGenDataEntityCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public QueryGenDataEntityCategoryBo() { + + } + + public QueryGenDataEntityCategoryBo(GenDataEntityCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjColumnBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjColumnBo.java new file mode 100644 index 0000000..5f8ad49 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjColumnBo.java @@ -0,0 +1,68 @@ +package com.lframework.starter.web.gen.bo.data.obj; + +import com.lframework.starter.web.core.bo.SuperBo; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +@Data +public class GenDataObjColumnBo implements SuperBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 数据对象名称 + */ + @ApiModelProperty("数据对象名称") + private String name; + + /** + * 列 + */ + @ApiModelProperty("列") + private List columns; + + @Data + public static class ColumnBo implements SuperBo { + + /** + * 数据实体明细ID + */ + @ApiModelProperty("数据实体明细ID") + private String id; + + /** + * 关联ID + */ + @ApiModelProperty("关联ID") + private String relaId; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + private String name; + + /** + * 类型 + */ + @ApiModelProperty("类型") + private Integer type; + + /** + * 数据类型 + */ + @ApiModelProperty("数据对象") + private Integer dataType; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + private Integer viewType; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjDetailBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjDetailBo.java new file mode 100644 index 0000000..9d38b69 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjDetailBo.java @@ -0,0 +1,92 @@ +package com.lframework.starter.web.gen.bo.data.obj; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataObjDetailBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 主表字段 + */ + @ApiModelProperty("主表字段") + private String[] mainTableDetailIds; + + /** + * 关联类型 + */ + @ApiModelProperty("关联类型") + private Integer relaType; + + /** + * 关联方式 + */ + @ApiModelProperty("关联方式") + private Integer relaMode; + + /** + * 子表ID + */ + @ApiModelProperty("子表ID") + private String subTableId; + + /** + * 子表名称 + */ + @ApiModelProperty("子表名称") + private String subTableName; + + /** + * 子表别名 + */ + @ApiModelProperty("子表别名") + private String subTableAlias; + + /** + * 子表字段 + */ + @ApiModelProperty("子表字段") + private String[] subTableDetailIds; + + public GenDataObjDetailBo() { + + } + + public GenDataObjDetailBo(GenDataObjDetail dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenDataObjDetail dto) { + + return super.convert(dto, GenDataObjDetailBo::getRelaType, GenDataObjDetailBo::getRelaMode, + GenDataObjDetailBo::getMainTableDetailIds, GenDataObjDetailBo::getSubTableDetailIds); + } + + @Override + protected void afterInit(GenDataObjDetail dto) { + + this.relaType = dto.getRelaType().getCode(); + this.relaMode = dto.getRelaMode().getCode(); + this.mainTableDetailIds = dto.getMainTableDetailIds().split(StringPool.STR_SPLIT); + this.subTableDetailIds = dto.getSubTableDetailIds().split(StringPool.STR_SPLIT); + + GenDataEntityService genDataEntityService = ApplicationUtil.getBean( + GenDataEntityService.class); + GenDataEntity entity = genDataEntityService.findById(dto.getSubTableId()); + this.subTableName = entity.getName(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjQueryDetailBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjQueryDetailBo.java new file mode 100644 index 0000000..c45f711 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjQueryDetailBo.java @@ -0,0 +1,60 @@ +package com.lframework.starter.web.gen.bo.data.obj; + +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataObjQueryDetailBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + private String customName; + + /** + * 自定义SQL + */ + @ApiModelProperty("自定义SQL") + private String customSql; + + /** + * 别名 + */ + @ApiModelProperty("别名") + private String customAlias; + + /** + * 数据类型 + */ + @ApiModelProperty("数据类型") + private Integer dataType; + + public GenDataObjQueryDetailBo() { + + } + + public GenDataObjQueryDetailBo(GenDataObjQueryDetail dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenDataObjQueryDetail dto) { + + return super.convert(dto); + } + + @Override + protected void afterInit(GenDataObjQueryDetail dto) { + this.dataType = dto.getDataType().getCode(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjSelectorBo.java new file mode 100644 index 0000000..1aabd4c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GenDataObjSelectorBo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.gen.bo.data.obj; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.service.GenDataObjCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataObjSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + public GenDataObjSelectorBo() { + } + + public GenDataObjSelectorBo(GenDataObj dto) { + super(dto); + } + + @Override + protected void afterInit(GenDataObj dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenDataObjCategoryService genDataObjCategoryService = ApplicationUtil.getBean( + GenDataObjCategoryService.class); + GenDataObjCategory category = genDataObjCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GetGenDataObjBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GetGenDataObjBo.java new file mode 100644 index 0000000..c2bea6f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/GetGenDataObjBo.java @@ -0,0 +1,131 @@ +package com.lframework.starter.web.gen.bo.data.obj; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.service.GenDataObjCategoryService; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.gen.service.GenDataObjQueryDetailService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import java.util.stream.Collectors; +import lombok.Data; + +@Data +public class GetGenDataObjBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 主表ID + */ + @ApiModelProperty("主表ID") + private String mainTableId; + + /** + * 主表名称 + */ + @ApiModelProperty("主表名称") + private String mainTableName; + + /** + * 主表别名 + */ + @ApiModelProperty("主表别名") + private String mainTableAlias; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 关联字段 + */ + @ApiModelProperty("关联字段") + private List columns; + + /** + * 自定义查询 + */ + @ApiModelProperty("自定义查询") + private List queryColumns; + + public GetGenDataObjBo() { + + } + + public GetGenDataObjBo(GenDataObj dto) { + + super(dto); + } + + @Override + protected void afterInit(GenDataObj dto) { + + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenDataObjCategoryService genDataObjCategoryService = ApplicationUtil.getBean( + GenDataObjCategoryService.class); + GenDataObjCategory category = genDataObjCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + + GenDataEntityService genDataEntityService = ApplicationUtil.getBean( + GenDataEntityService.class); + GenDataEntity entity = genDataEntityService.findById(dto.getMainTableId()); + this.mainTableName = entity.getName(); + + GenDataObjDetailService genDataObjDetailService = ApplicationUtil.getBean( + GenDataObjDetailService.class); + List details = genDataObjDetailService.getByObjId(dto.getId()); + if (!CollectionUtil.isEmpty(details)) { + this.columns = details.stream().map(GenDataObjDetailBo::new).collect(Collectors.toList()); + } + + GenDataObjQueryDetailService genDataObjQueryDetailService = ApplicationUtil.getBean( + GenDataObjQueryDetailService.class); + List queryDetails = genDataObjQueryDetailService.getByObjId(dto.getId()); + if (!CollectionUtil.isEmpty(queryDetails)) { + this.queryColumns = queryDetails.stream().map(GenDataObjQueryDetailBo::new) + .collect(Collectors.toList()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/QueryGenDataObjBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/QueryGenDataObjBo.java new file mode 100644 index 0000000..29bfed6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/QueryGenDataObjBo.java @@ -0,0 +1,97 @@ +package com.lframework.starter.web.gen.bo.data.obj; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.service.GenDataObjCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryGenDataObjBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人ID + */ + @ApiModelProperty("创建人ID") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 修改人ID + */ + @ApiModelProperty("修改人ID") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime updateTime; + + public QueryGenDataObjBo() { + } + + public QueryGenDataObjBo(GenDataObj dto) { + super(dto); + } + + @Override + protected void afterInit(GenDataObj dto) { + + if (!StringUtil.isBlank(dto.getCategoryId())) { + GenDataObjCategoryService genDataObjCategoryService = ApplicationUtil.getBean( + GenDataObjCategoryService.class); + GenDataObjCategory category = genDataObjCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GenDataObjCategorySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GenDataObjCategorySelectorBo.java new file mode 100644 index 0000000..357abd2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GenDataObjCategorySelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.bo.data.obj.category; + +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataObjCategorySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public GenDataObjCategorySelectorBo() { + } + + public GenDataObjCategorySelectorBo(GenDataObjCategory dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GetGenDataObjCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GetGenDataObjCategoryBo.java new file mode 100644 index 0000000..dead302 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/GetGenDataObjCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.data.obj.category; + +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetGenDataObjCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public GetGenDataObjCategoryBo() { + + } + + public GetGenDataObjCategoryBo(GenDataObjCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/QueryGenDataObjCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/QueryGenDataObjCategoryBo.java new file mode 100644 index 0000000..f0c8e28 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/data/obj/category/QueryGenDataObjCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.bo.data.obj.category; + +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryGenDataObjCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public QueryGenDataObjCategoryBo() { + + } + + public QueryGenDataObjCategoryBo(GenDataObjCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenCreateColumnConfigBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenCreateColumnConfigBo.java new file mode 100644 index 0000000..1e330e7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenCreateColumnConfigBo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.gen.bo.gen; + +import com.lframework.starter.web.gen.dto.gen.GenCreateColumnConfigDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCreateColumnConfigBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 是否必填 + */ + @ApiModelProperty("是否必填") + private Boolean required; + + /** + * 排序编号 + */ + @ApiModelProperty("排序编号") + private Integer orderNo; + + public GenCreateColumnConfigBo() { + + } + + public GenCreateColumnConfigBo(GenCreateColumnConfigDto dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenCreateColumnConfigDto dto) { + + return super.convert(dto); + } + + @Override + protected void afterInit(GenCreateColumnConfigDto dto) { + + super.afterInit(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenDetailColumnConfigBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenDetailColumnConfigBo.java new file mode 100644 index 0000000..2a131c4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenDetailColumnConfigBo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.gen.bo.gen; + +import com.lframework.starter.web.gen.dto.gen.GenDetailColumnConfigDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDetailColumnConfigBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 列宽 + */ + @ApiModelProperty("列宽") + private Integer span; + + /** + * 排序编号 + */ + @ApiModelProperty("排序编号") + private Integer orderNo; + + public GenDetailColumnConfigBo() { + + } + + public GenDetailColumnConfigBo(GenDetailColumnConfigDto dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenDetailColumnConfigDto dto) { + + return super.convert(dto); + } + + @Override + protected void afterInit(GenDetailColumnConfigDto dto) { + + super.afterInit(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenGenerateInfoBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenGenerateInfoBo.java new file mode 100644 index 0000000..a6bcd4b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenGenerateInfoBo.java @@ -0,0 +1,121 @@ +package com.lframework.starter.web.gen.bo.gen; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import lombok.Data; + +@Data +public class GenGenerateInfoBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 生成模板类型 + */ + private Integer templateType; + + /** + * 包名 + */ + private String packageName; + + /** + * 模块名 + */ + private String moduleName; + + /** + * 业务名 + */ + private String bizName; + + /** + * 类名 + */ + private String className; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 父级菜单ID + */ + private String parentMenuId; + + /** + * 父级菜单名称 + */ + private String parentMenuName; + + /** + * 主键类型 + */ + private Integer keyType; + + /** + * 作者 + */ + private String author; + + /** + * 本级菜单编号 + */ + private String menuCode; + + /** + * 本级菜单名称 + */ + private String menuName; + + /** + * 详情页Span总数量 + */ + private Integer detailSpan; + + /** + * 是否应用缓存 + */ + private Boolean isCache; + + /** + * 是否内置删除功能 + */ + private Boolean hasDelete; + + public GenGenerateInfoBo() { + + } + + public GenGenerateInfoBo(GenGenerateInfoDto dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenGenerateInfoDto dto) { + + return super.convert(dto, GenGenerateInfoBo::getTemplateType, GenGenerateInfoBo::getKeyType); + } + + @Override + protected void afterInit(GenGenerateInfoDto dto) { + + this.templateType = dto.getTemplateType().getCode(); + this.keyType = dto.getKeyType().getCode(); + + if (!StringUtil.isBlank(dto.getParentMenuId())) { + SysMenuService sysMenuService = ApplicationUtil.getBean(SysMenuService.class); + this.parentMenuName = sysMenuService.findById(dto.getParentMenuId()).getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryColumnConfigBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryColumnConfigBo.java new file mode 100644 index 0000000..d22a849 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryColumnConfigBo.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.gen.bo.gen; + +import com.lframework.starter.web.gen.dto.gen.GenQueryColumnConfigDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenQueryColumnConfigBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 宽度类型 + */ + @ApiModelProperty("宽度类型") + private Integer widthType; + + /** + * 宽度 + */ + @ApiModelProperty("宽度") + private Integer width; + + /** + * 是否页面排序 + */ + @ApiModelProperty("是否页面排序") + private Boolean sortable; + + /** + * 排序编号 + */ + @ApiModelProperty("排序编号") + private Integer orderNo; + + public GenQueryColumnConfigBo() { + + } + + public GenQueryColumnConfigBo(GenQueryColumnConfigDto dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenQueryColumnConfigDto dto) { + + return super.convert(dto, GenQueryColumnConfigBo::getWidthType); + } + + @Override + protected void afterInit(GenQueryColumnConfigDto dto) { + + this.widthType = dto.getWidthType().getCode(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryParamsColumnConfigBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryParamsColumnConfigBo.java new file mode 100644 index 0000000..1340ce1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenQueryParamsColumnConfigBo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.gen.bo.gen; + +import com.lframework.starter.web.gen.dto.gen.GenQueryParamsColumnConfigDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenQueryParamsColumnConfigBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 查询类型 + */ + @ApiModelProperty("查询类型") + private Integer queryType; + + /** + * 排序编号 + */ + @ApiModelProperty("排序编号") + private Integer orderNo; + + public GenQueryParamsColumnConfigBo() { + + } + + public GenQueryParamsColumnConfigBo(GenQueryParamsColumnConfigDto dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenQueryParamsColumnConfigDto dto) { + + return super.convert(dto, GenQueryParamsColumnConfigBo::getQueryType); + } + + @Override + protected void afterInit(GenQueryParamsColumnConfigDto dto) { + + this.queryType = dto.getQueryType().getCode(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenUpdateColumnConfigBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenUpdateColumnConfigBo.java new file mode 100644 index 0000000..04c8485 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/gen/GenUpdateColumnConfigBo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.gen.bo.gen; + +import com.lframework.starter.web.gen.dto.gen.GenUpdateColumnConfigDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenUpdateColumnConfigBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 是否必填 + */ + @ApiModelProperty("是否必填") + private Boolean required; + + /** + * 排序编号 + */ + @ApiModelProperty("排序编号") + private Integer orderNo; + + public GenUpdateColumnConfigBo() { + + } + + public GenUpdateColumnConfigBo(GenUpdateColumnConfigDto dto) { + + super(dto); + } + + @Override + public BaseBo convert(GenUpdateColumnConfigDto dto) { + + return super.convert(dto); + } + + @Override + protected void afterInit(GenUpdateColumnConfigDto dto) { + + super.afterInit(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/bo/simpledb/SimpleDBSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/simpledb/SimpleDBSelectorBo.java new file mode 100644 index 0000000..6559689 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/bo/simpledb/SimpleDBSelectorBo.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.gen.bo.simpledb; + +import com.lframework.starter.web.gen.dto.simpledb.SimpleDBDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SimpleDBSelectorBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * 库名 + */ + @ApiModelProperty("库名") + private String tableSchema; + + /** + * 表名 + */ + @ApiModelProperty("表名") + private String tableName; + + public SimpleDBSelectorBo() { + + } + + public SimpleDBSelectorBo(SimpleDBDto dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java new file mode 100644 index 0000000..42de3db --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java @@ -0,0 +1,370 @@ +package com.lframework.starter.web.gen.builders; + +import cn.hutool.core.convert.Convert; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig.FieldConfig; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig.HandleColumn; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig.ListConfig; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig.QueryParam; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig.Toolbar; +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryObj; +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryParamObj; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListDetail; +import com.lframework.starter.web.gen.entity.GenCustomListHandleColumn; +import com.lframework.starter.web.gen.entity.GenCustomListQueryParams; +import com.lframework.starter.web.gen.entity.GenCustomListToolbar; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.gen.enums.GenViewType; +import com.lframework.starter.web.gen.service.GenCustomListDetailService; +import com.lframework.starter.web.gen.service.GenCustomListHandleColumnService; +import com.lframework.starter.web.gen.service.GenCustomListQueryParamsService; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.service.GenCustomListToolbarService; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.gen.service.GenDataObjQueryDetailService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.EnumUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +@Component +public class CustomListBuilder { + + @Autowired + private GenCustomListService genCustomListService; + + @Autowired + private GenCustomListDetailService genCustomListDetailService; + + @Autowired + private GenCustomListQueryParamsService genCustomListQueryParamsService; + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Autowired + private GenDataObjService genDataObjService; + + @Autowired + private GenDataObjDetailService genDataObjDetailService; + + @Autowired + private GenDataObjQueryDetailService genDataObjQueryDetailService; + + @Autowired + private DataObjectBuilder dataObjectBuilder; + + @Autowired + private GenCustomListToolbarService genCustomListToolbarService; + + @Autowired + private GenCustomListHandleColumnService genCustomListHandleColumnService; + + public DataObjectQueryObj buildQueryObj(String id, DataObjectQueryParamObj queryParamObj) { + GenCustomList customList = genCustomListService.findById(id); + if (customList == null) { + throw new DefaultClientException("自定义列表不存在!"); + } + + CustomListBuilder customListBuilder = ApplicationUtil.getBean(CustomListBuilder.class); + CustomListConfig config = customListBuilder.buildConfig(id); + + DataObjectQueryObj obj = dataObjectBuilder.buildQueryObj(customList.getDataObjId()); + obj.setQueryParamObj(this.buildQueryParamObj(queryParamObj, config)); + obj.setSuffixSql(customList.getSuffixSql()); + obj.setQueryPrefixSql(customList.getQueryPrefixSql()); + obj.setQuerySuffixSql(customList.getQuerySuffixSql()); + + return obj; + } + + @Cacheable(value = CustomListConfig.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + public CustomListConfig buildConfig(String id) { + + // 先查询配置信息 + GenCustomList data = genCustomListService.findById(id); + + if (data == null) { + throw new DefaultClientException("自定义列表不存在!"); + } + + CustomListConfig result = new CustomListConfig(); + + List toolbars = genCustomListToolbarService + .getByCustomListId(data.getId()); + if (!CollectionUtil.isEmpty(toolbars)) { + result.setToolbars(toolbars.stream().map(t -> { + Toolbar toolbar = new Toolbar(); + toolbar.setId(t.getId()); + toolbar.setName(t.getName()); + toolbar.setViewType(t.getViewType().getCode()); + toolbar.setBtnType(t.getBtnType().getCode()); + toolbar.setBtnConfig(t.getBtnConfig()); + toolbar.setRequestParam(t.getRequestParam()); + toolbar.setIcon(t.getIcon()); + + return toolbar; + }).collect(Collectors.toList())); + } + + List handleColumns = genCustomListHandleColumnService + .getByCustomListId(data.getId()); + if (!CollectionUtil.isEmpty(handleColumns)) { + result.setHandleColumns(handleColumns.stream().map(t -> { + HandleColumn handleColumn = new HandleColumn(); + handleColumn.setId(t.getId()); + handleColumn.setName(t.getName()); + handleColumn.setViewType(t.getViewType().getCode()); + handleColumn.setBtnType(t.getBtnType().getCode()); + handleColumn.setBtnConfig(t.getBtnConfig()); + handleColumn.setRequestParam(t.getRequestParam()); + handleColumn.setIcon(t.getIcon()); + handleColumn.setWidth(t.getWidth()); + + return handleColumn; + }).collect(Collectors.toList())); + } + + List genCustomListQueryParamsList = genCustomListQueryParamsService + .getByCustomListId( + data.getId()); + List genCustomListDetailList = genCustomListDetailService + .getByCustomListId( + data.getId()); + + List queryParams = new ArrayList<>(); + + if (CollectionUtil.isNotEmpty(genCustomListQueryParamsList)) { + for (GenCustomListQueryParams genCustomListQueryParams : genCustomListQueryParamsList) { + GenDataEntityDetail entityDetail = genDataEntityDetailService.getById( + genCustomListQueryParams.getDataEntityId()); + + String relaId = genCustomListQueryParams.getRelaId(); + GenDataObj dataObj = null; + GenDataObjDetail dataObjDetail = null; + if (genCustomListQueryParams.getType() == GenCustomListDetailType.MAIN_TABLE) { + dataObj = genDataObjService.findById(relaId); + } else if (genCustomListQueryParams.getType() == GenCustomListDetailType.SUB_TALBE) { + dataObjDetail = genDataObjDetailService.getById(relaId); + } else { + throw new DefaultSysException("不支持的类型!"); + } + + QueryParam queryParam = new QueryParam(); + queryParam.setTableAlias( + genCustomListQueryParams.getType() == GenCustomListDetailType.SUB_TALBE + ? dataObjDetail.getSubTableAlias() : dataObj.getMainTableAlias()); + queryParam.setColumnName(entityDetail.getDbColumnName()); + queryParam.setName(entityDetail.getName()); + queryParam.setFrontShow(genCustomListQueryParams.getFrontShow()); + queryParam.setQueryType(genCustomListQueryParams.getQueryType().getCode()); + queryParam.setFormWidth(genCustomListQueryParams.getFormWidth()); + queryParam.setViewType(entityDetail.getViewType().getCode()); + queryParam.setDataType(entityDetail.getDataType().getCode()); + queryParam.setFixEnum(entityDetail.getFixEnum()); + queryParam.setFrontType(entityDetail.getEnumFront()); + if (StringUtil.isNotEmpty(genCustomListQueryParams.getDefaultValue())) { + queryParam.setDefaultValue(Convert.convert( + entityDetail.getViewType() == GenViewType.DATE_RANGE ? String.class + : entityDetail.getDataType().getClazz(), + genCustomListQueryParams.getDefaultValue())); + } + queryParam.setHasAvailableTag( + entityDetail.getViewType() == GenViewType.SELECT + && entityDetail.getDataType() == GenDataType.BOOLEAN + && "available".equals(entityDetail.getColumnName())); + + if (entityDetail.getViewType() == GenViewType.DATA_DIC) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dic = sysDataDicService.findById(entityDetail.getDataDicId()); + queryParam.setDataDicCode(dic.getCode()); + } else if (entityDetail.getViewType() == GenViewType.CUSTOM_SELECTOR) { + GenCustomSelectorService genCustomSelectorService = ApplicationUtil + .getBean(GenCustomSelectorService.class); + GenCustomSelector selector = genCustomSelectorService + .findById(entityDetail.getCustomSelectorId()); + queryParam.setCustomSelectorId(selector.getId()); + } + + queryParams.add(queryParam); + } + } + + result.setQueryParams(queryParams); + + ListConfig listConfig = new ListConfig(); + listConfig.setId(data.getId()); + listConfig.setListType(data.getListType().getCode()); + listConfig.setLabelWidth(data.getLabelWidth()); + listConfig.setHasPage(data.getHasPage()); + listConfig.setTreeData(data.getTreeData()); + GenDataEntityDetail idColumnEntityDetail = genDataEntityDetailService + .getById(data.getIdColumn()); + GenDataObj idColumnDataObj = genDataObjService.findById(data.getIdColumnRelaId()); + GenDataObjDetail idColumnDataObjDetail = genDataObjDetailService + .getById(data.getIdColumnRelaId()); + + listConfig.setIdColumn( + (idColumnDataObj == null ? idColumnDataObjDetail.getSubTableAlias() + : idColumnDataObj.getMainTableAlias()) + "_" + + idColumnEntityDetail.getDbColumnName()); + listConfig.setAllowExport(data.getAllowExport()); + + if (data.getTreeData()) { + GenDataEntityDetail entityDetail = genDataEntityDetailService + .getById(data.getTreePidColumn()); + GenDataObj dataObj = genDataObjService.findById(data.getTreePidColumnRelaId()); + GenDataObjDetail dataObjDetail = genDataObjDetailService + .getById(data.getTreePidColumnRelaId()); + + listConfig.setTreePidColumn( + (dataObj == null ? dataObjDetail.getSubTableAlias() : dataObj.getMainTableAlias()) + "_" + + entityDetail.getDbColumnName()); + + entityDetail = genDataEntityDetailService.getById(data.getTreeNodeColumn()); + dataObj = genDataObjService.findById(data.getTreeNodeColumnRelaId()); + dataObjDetail = genDataObjDetailService + .getById(data.getTreeNodeColumnRelaId()); + + listConfig.setTreeNodeColumn( + (dataObj == null ? dataObjDetail.getSubTableAlias() : dataObj.getMainTableAlias()) + "_" + + entityDetail.getDbColumnName()); + + listConfig.setTreeChildrenKey(data.getTreeChildrenKey()); + } + + List fieldConfigs = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(genCustomListDetailList)) { + for (GenCustomListDetail genCustomListDetail : genCustomListDetailList) { + String relaId = genCustomListDetail.getRelaId(); + GenDataEntityDetail entityDetail = null; + GenDataObjQueryDetail dataObjQueryDetail = null; + + GenDataObj dataObj = null; + GenDataObjDetail dataObjDetail = null; + if (genCustomListDetail.getType() == GenCustomListDetailType.MAIN_TABLE) { + entityDetail = genDataEntityDetailService.getById(genCustomListDetail.getDataEntityId()); + dataObj = genDataObjService.findById(relaId); + } else if (genCustomListDetail.getType() == GenCustomListDetailType.SUB_TALBE) { + entityDetail = genDataEntityDetailService.getById(genCustomListDetail.getDataEntityId()); + dataObjDetail = genDataObjDetailService.getById(relaId); + } else { + dataObjQueryDetail = genDataObjQueryDetailService.getById( + genCustomListDetail.getRelaId()); + } + FieldConfig fieldConfig = new FieldConfig(); + fieldConfig.setName((genCustomListDetail.getType() == GenCustomListDetailType.MAIN_TABLE + || genCustomListDetail.getType() == GenCustomListDetailType.SUB_TALBE) + ? entityDetail.getName() : dataObjQueryDetail.getCustomName()); + + if (genCustomListDetail.getType() == GenCustomListDetailType.MAIN_TABLE) { + fieldConfig.setColumnName( + dataObj.getMainTableAlias() + "_" + entityDetail.getDbColumnName()); + } else if (genCustomListDetail.getType() == GenCustomListDetailType.SUB_TALBE) { + fieldConfig.setColumnName( + dataObjDetail.getSubTableAlias() + "_" + entityDetail.getDbColumnName()); + } else { + fieldConfig.setColumnName("custom_" + dataObjQueryDetail.getCustomAlias()); + } + + fieldConfig.setWidthType(genCustomListDetail.getWidthType().getCode()); + fieldConfig.setWidth(genCustomListDetail.getWidth()); + fieldConfig.setSortable(genCustomListDetail.getSortable()); + fieldConfig.setFormatter(genCustomListDetail.getFormatter()); + if (genCustomListDetail.getType() == GenCustomListDetailType.MAIN_TABLE + || genCustomListDetail.getType() == GenCustomListDetailType.SUB_TALBE) { + fieldConfig.setIsNumberType(GenDataType.isNumberType(entityDetail.getDataType())); + fieldConfig.setHasAvailableTag( + entityDetail.getViewType() == GenViewType.SELECT + && entityDetail.getDataType() == GenDataType.BOOLEAN + && "available".equals(entityDetail.getColumnName())); + fieldConfig.setFrontType(entityDetail.getEnumFront()); + fieldConfig.setFixEnum(entityDetail.getFixEnum()); + fieldConfig.setDataType(entityDetail.getDataType().getCode()); + } else { + fieldConfig.setIsNumberType(GenDataType.isNumberType(dataObjQueryDetail.getDataType())); + fieldConfig.setHasAvailableTag(false); + fieldConfig.setFrontType(StringPool.EMPTY_STR); + fieldConfig.setFixEnum(false); + fieldConfig.setDataType(dataObjQueryDetail.getDataType().getCode()); + } + + fieldConfigs.add(fieldConfig); + } + } + + listConfig.setFields(fieldConfigs); + result.setListConfig(listConfig); + + return result; + } + + private DataObjectQueryParamObj buildQueryParamObj(DataObjectQueryParamObj queryParamObj, + CustomListConfig config) { + if (queryParamObj == null) { + return null; + } + + if (CollectionUtil.isNotEmpty(queryParamObj.getConditions())) { + for (DataObjectQueryParamObj.Condition condition : queryParamObj.getConditions()) { + FieldConfig fieldConfig = config.getListConfig().getFields().stream().filter( + t -> (condition.getTableAlias() + "_" + condition.getColumnName()) + .equals(t.getColumnName())).findFirst().orElse(null); + if (fieldConfig != null) { + if (condition.getValue() != null) { + condition.setValue(Convert.convert( + EnumUtil.getByCode(GenDataType.class, fieldConfig.getDataType()).getClazz(), + condition.getValue())); + } else if (CollectionUtil.isNotEmpty(condition.getValues())) { + condition.setValues(condition.getValues().stream().map(t -> Convert.convert( + EnumUtil.getByCode(GenDataType.class, fieldConfig.getDataType()).getClazz(), t)) + .collect(Collectors.toList())); + } + } + GenQueryType queryType = EnumUtil.getByCode(GenQueryType.class, condition.getQueryType()); + if (queryType == GenQueryType.IN) { + condition.setValuePrefix("("); + condition.setValueSuffix(")"); + } else if (queryType == GenQueryType.NOT_IN) { + condition.setValuePrefix("("); + condition.setValueSuffix(")"); + } else if (queryType == GenQueryType.LEFT_LIKE) { + condition.setValuePrefix("CONCAT('%',"); + condition.setValueSuffix(")"); + } else if (queryType == GenQueryType.RIGHT_LIKE) { + condition.setValuePrefix("CONCAT("); + condition.setValueSuffix(", '%')"); + } else if (queryType == GenQueryType.AROUND_LIKE) { + condition.setValuePrefix("CONCAT('%',"); + condition.setValueSuffix(", '%')"); + } else { + condition.setValuePrefix(StringPool.EMPTY_STR); + condition.setValueSuffix(StringPool.EMPTY_STR); + } + } + } + return queryParamObj; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java new file mode 100644 index 0000000..5f4604d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.builders; + +import cn.hutool.json.JSONObject; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.gen.components.custom.page.CustomPageConfig; +import com.lframework.starter.web.gen.service.GenCustomPageService; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.core.utils.JsonUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class CustomPageBuilder { + + @Autowired + private GenCustomPageService genCustomPageService; + + //@Cacheable(value = CustomPageConfig.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + public CustomPageConfig buildConfig(Integer id) { + + GenCustomPage page = genCustomPageService.findById(id); + if (page == null) { + throw new DefaultClientException("自定义页面不存在!"); + } + + CustomPageConfig config = new CustomPageConfig(); + config.setId(page.getId()); + JSONObject obj = new JSONObject(); + obj.set("template", page.getPageCode()); + String templateStr = JsonUtil.toJsonStr(obj); + templateStr = templateStr.substring("{\"template\":".length(), templateStr.length() - 1); + + String scriptStr = page.getScriptCode(); + String componentConfig = scriptStr.substring(0, scriptStr.indexOf("{") + 1) + "template:" + templateStr + "," + scriptStr.substring(scriptStr.indexOf("{") + 1); + componentConfig = "return " + componentConfig.substring("export default".length()); + config.setComponentConfig(componentConfig); + + return config; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java new file mode 100644 index 0000000..a7502d7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java @@ -0,0 +1,65 @@ +package com.lframework.starter.web.gen.builders; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.gen.components.custom.selector.CustomSelectorConfig; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +@Component +public class CustomSelectorBuilder { + + @Autowired + private GenCustomSelectorService genCustomSelectorService; + + @Autowired + private GenDataObjService genDataObjService; + + @Autowired + private GenDataObjDetailService genDataObjDetailService; + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Cacheable(value = CustomSelectorConfig.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + public CustomSelectorConfig buildConfig(String id) { + + // 先查询配置信息 + GenCustomSelector data = genCustomSelectorService.findById(id); + + if (data == null) { + throw new DefaultClientException("自定义选择器不存在!"); + } + + GenDataObj dataObj = genDataObjService.findById(data.getIdColumnRelaId()); + GenDataObjDetail dataObjDetail = genDataObjDetailService.getById(data.getIdColumnRelaId()); + GenDataEntityDetail entityDetail = genDataEntityDetailService.getById(data.getIdColumn()); + + CustomSelectorConfig result = new CustomSelectorConfig(); + result.setCustomListId(data.getCustomListId()); + result.setIdColumn( + (dataObj == null ? dataObjDetail.getSubTableAlias() : dataObj.getMainTableAlias()) + "_" + + entityDetail.getDbColumnName()); + + dataObj = genDataObjService.findById(data.getNameColumnRelaId()); + dataObjDetail = genDataObjDetailService.getById(data.getNameColumnRelaId()); + entityDetail = genDataEntityDetailService.getById(data.getNameColumn()); + + result.setNameColumn( + (dataObj == null ? dataObjDetail.getSubTableAlias() : dataObj.getMainTableAlias()) + "_" + + entityDetail.getDbColumnName()); + result.setPlaceholder(data.getPlaceholder()); + result.setDialogTittle(data.getDialogTittle()); + result.setDialogWidth(data.getDialogWidth()); + + return result; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java new file mode 100644 index 0000000..77895c8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java @@ -0,0 +1,117 @@ +package com.lframework.starter.web.gen.builders; + +import com.lframework.starter.web.gen.components.DataEntity; +import com.lframework.starter.web.gen.components.DataEntityColumn; +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.service.GenCreateColumnConfigService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.service.GenDetailColumnConfigService; +import com.lframework.starter.web.gen.service.GenQueryColumnConfigService; +import com.lframework.starter.web.gen.service.GenQueryParamsColumnConfigService; +import com.lframework.starter.web.gen.service.GenUpdateColumnConfigService; +import com.lframework.starter.web.gen.service.GenerateInfoService; +import java.util.ArrayList; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 数据实体Builder + */ +@Component +public class DataEntityBuilder { + + @Autowired + private GenDataEntityService genDataEntityService; + + @Autowired + private GenerateInfoService generateInfoService; + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Autowired + private GenCreateColumnConfigService genCreateColumnConfigService; + + @Autowired + private GenUpdateColumnConfigService genUpdateColumnConfigService; + + @Autowired + private GenQueryColumnConfigService genQueryColumnConfigService; + + @Autowired + private GenQueryParamsColumnConfigService genQueryParamsColumnConfigService; + + @Autowired + private GenDetailColumnConfigService genDetailColumnConfigService; + + /** + * 根据数据对象ID构建 + * + * @param id + * @return + */ + public DataEntity build(String id) { + + // 根据ID查询数据对象 + GenDataEntity dataEntity = genDataEntityService.findById(id); + DataEntity result = new DataEntity(); + result.setId(dataEntity.getId()); + result.setName(dataEntity.getName()); + result.setDescription(dataEntity.getDescription()); + result.setTable(dataEntity); + result.setColumns(this.buildColumns(dataEntity.getId())); + result.setGenerateInfo(this.buildGenerateInfo(dataEntity.getId())); + + return result; + } + + private GenGenerateInfoDto buildGenerateInfo(String dataObjId) { + + return generateInfoService.getByEntityId(dataObjId); + } + + private List buildColumns(String entityId) { + + List results = new ArrayList<>(); + + List columns = genDataEntityDetailService.getByEntityId(entityId); + for (GenDataEntityDetail column : columns) { + DataEntityColumn result = new DataEntityColumn(); + result.setId(column.getId()); + result.setName(column.getName()); + result.setColumnName(column.getColumnName()); + result.setIsKey(column.getIsKey()); + result.setDataType(column.getDataType()); + result.setColumnOrder(column.getColumnOrder()); + result.setDescription(column.getDescription()); + result.setViewType(column.getViewType()); + result.setTableColumn(column); + result.setFixEnum(column.getFixEnum()); + result.setEnumBack(column.getEnumBack()); + result.setEnumFront(column.getEnumFront()); + result.setRegularExpression(column.getRegularExpression()); + result.setIsOrder(column.getIsOrder()); + if (result.getIsOrder()) { + result.setOrderType(column.getOrderType()); + } + + result.setCreateConfig(genCreateColumnConfigService.findById(column.getId())); + result.setUpdateConfig(genUpdateColumnConfigService.findById(column.getId())); + result.setQueryConfig(genQueryColumnConfigService.findById(column.getId())); + result.setQueryParamsConfig(genQueryParamsColumnConfigService.findById(column.getId())); + result.setDetailConfig(genDetailColumnConfigService.findById(column.getId())); + result.setLen(column.getLen()); + result.setDataDicId(column.getDataDicId()); + result.setCustomSelectorId(column.getCustomSelectorId()); + result.setDecimals(column.getDecimals()); + + results.add(result); + } + + return results; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java new file mode 100644 index 0000000..0891e6d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java @@ -0,0 +1,151 @@ +package com.lframework.starter.web.gen.builders; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryObj; +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryObj.QuerySubTableCondition; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.gen.service.GenDataObjQueryDetailService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import java.util.ArrayList; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +/** + * 数据对象Builder + */ +@Component +public class DataObjectBuilder { + + @Autowired + private GenDataObjService genDataObjService; + + @Autowired + private GenDataObjDetailService genDataObjDetailService; + + @Autowired + private GenDataObjQueryDetailService genDataObjQueryDetailService; + + @Autowired + private GenDataEntityService genDataEntityService; + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Cacheable(value = DataObjectQueryObj.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + public DataObjectQueryObj buildQueryObj(String id) { + // 先查询配置信息 + GenDataObj data = genDataObjService.findById(id); + + if (data == null) { + throw new DefaultClientException("数据对象不存在!"); + } + + List details = genDataObjDetailService.getByObjId(data.getId()); + List queryDetails = genDataObjQueryDetailService.getByObjId(data.getId()); + + String mainTableId = data.getMainTableId(); + GenDataEntity dataEntity = genDataEntityService.findById(mainTableId); + if (dataEntity == null) { + throw new DefaultClientException("数据实体不存在!"); + } + + List entityDetails = genDataEntityDetailService.getByEntityId(dataEntity.getId()); + + DataObjectQueryObj queryObj = new DataObjectQueryObj(); + List fields = new ArrayList<>(); + + // 主表字段 + if (CollectionUtil.isNotEmpty(entityDetails)) { + for (GenDataEntityDetail entityDetail : entityDetails) { + DataObjectQueryObj.QueryField field = new DataObjectQueryObj.QueryField(); + field.setTableAlias(data.getMainTableAlias()); + field.setColumnName(entityDetail.getDbColumnName()); + field.setColumnAlias(data.getMainTableAlias() + "_" + entityDetail.getDbColumnName()); + field.setDataType(entityDetail.getDataType()); + + fields.add(field); + } + } + + // 子表字段 + if (CollectionUtil.isNotEmpty(details)) { + for (GenDataObjDetail detail : details) { + GenDataEntity subTable = genDataEntityService.findById(detail.getSubTableId()); + List subTableDetails = genDataEntityDetailService.getByEntityId(subTable.getId()); + for (GenDataEntityDetail subTableDetail : subTableDetails) { + DataObjectQueryObj.QueryField field = new DataObjectQueryObj.QueryField(); + field.setTableAlias(detail.getSubTableAlias()); + field.setColumnName(subTableDetail.getDbColumnName()); + field.setColumnAlias(detail.getSubTableAlias() + "_" + subTableDetail.getDbColumnName()); + field.setDataType(subTableDetail.getDataType()); + + fields.add(field); + } + } + } + + // 自定义查询字段 + if (CollectionUtil.isNotEmpty(queryDetails)) { + for (GenDataObjQueryDetail queryDetail : queryDetails) { + DataObjectQueryObj.QueryField field = new DataObjectQueryObj.QueryField(); + field.setColumnName(queryDetail.getCustomSql()); + field.setColumnAlias("custom_" + queryDetail.getCustomAlias()); + field.setDataType(queryDetail.getDataType()); + + fields.add(field); + } + } + + + queryObj.setFields(fields); + queryObj.setMainTable(dataEntity.getTableName()); + queryObj.setMainTableAlias(data.getMainTableAlias()); + + // 关联字表 + List subTables = new ArrayList<>(); + for (GenDataObjDetail detail : details) { + GenDataEntity subTable= genDataEntityService.getById(detail.getSubTableId()); + + DataObjectQueryObj.QuerySubTable querySubTable = new DataObjectQueryObj.QuerySubTable(); + querySubTable.setSubTable(subTable.getTableName()); + querySubTable.setSubTableAlias(detail.getSubTableAlias()); + querySubTable.setJoinType(detail.getRelaMode().getSql()); + + String[] mainTableDetailIds = detail.getMainTableDetailIds().split(StringPool.STR_SPLIT); + String[] subTableDetailIds = detail.getSubTableDetailIds().split(StringPool.STR_SPLIT); + + querySubTable.setJoinCondition(new ArrayList<>()); + + for (int i = 0; i < mainTableDetailIds.length; i++) { + String mainTableDetailId = mainTableDetailIds[i]; + String subTableDetailId = subTableDetailIds[i]; + + GenDataEntityDetail mainTableDetail = genDataEntityDetailService.getById(mainTableDetailId); + GenDataEntityDetail subTableDetail = genDataEntityDetailService.getById(subTableDetailId); + + QuerySubTableCondition condition = new QuerySubTableCondition(); + condition.setKey(mainTableDetail.getDbColumnName()); + condition.setValue(subTableDetail.getDbColumnName()); + querySubTable.getJoinCondition().add(condition); + } + + + + subTables.add(querySubTable); + } + queryObj.setSubTables(subTables); + + return queryObj; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/CreateColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/CreateColumnConfig.java new file mode 100644 index 0000000..40585c4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/CreateColumnConfig.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.gen.components; + +public interface CreateColumnConfig { + + /** + * 是否必填 + * + * @return + */ + Boolean getRequired(); + + /** + * 排序 + * + * @return + */ + Integer getOrderNo(); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntity.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntity.java new file mode 100644 index 0000000..8b5182b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntity.java @@ -0,0 +1,42 @@ +package com.lframework.starter.web.gen.components; + +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import java.util.List; +import lombok.Data; + +/** + * 数据对象 + */ +@Data +public class DataEntity { + + /** + * ID + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 备注 + */ + private String description; + + /** + * 数据表信息 + */ + private Table table; + + /** + * 字段信息 + */ + private List columns; + + /** + * 配置信息 + */ + private GenGenerateInfoDto generateInfo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntityColumn.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntityColumn.java new file mode 100644 index 0000000..86d185c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/DataEntityColumn.java @@ -0,0 +1,130 @@ +package com.lframework.starter.web.gen.components; + +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenOrderType; +import com.lframework.starter.web.gen.enums.GenViewType; +import lombok.Data; + +@Data +public class DataEntityColumn { + + /** + * ID + */ + private String id; + + /** + * 字段显示名称 + */ + private String name; + + /** + * 字段名称 + */ + private String columnName; + + /** + * 是否主键 + */ + private Boolean isKey; + + /** + * 数据类型 + */ + private GenDataType dataType; + + /** + * 排序编号 + */ + private Integer columnOrder; + + /** + * 备注 + */ + private String description; + + /** + * 显示类型 + */ + private GenViewType viewType; + + /** + * 是否内置枚举 + */ + private Boolean fixEnum; + + /** + * 后端枚举名 + */ + private String enumBack; + + /** + * 前端枚举名 + */ + private String enumFront; + + /** + * 正则表达式 + */ + private String regularExpression; + + /** + * 是否排序字段 + */ + private Boolean isOrder; + + /** + * 排序类型 + */ + private GenOrderType orderType; + + /** + * 数据表字段信息 + */ + private TableColumn tableColumn; + + /** + * 新增配置 + */ + private CreateColumnConfig createConfig; + + /** + * 修改配置 + */ + private UpdateColumnConfig updateConfig; + + /** + * 查询配置 + */ + private QueryColumnConfig queryConfig; + + /** + * 查询参数配置 + */ + private QueryParamsColumnConfig queryParamsConfig; + + /** + * 详情配置 + */ + private DetailColumnConfig detailConfig; + + /** + * 数据字典ID + */ + private String dataDicId; + + /** + * 自定义选择器ID + */ + private String customSelectorId; + + /** + * 长度 + */ + private Long len; + + /** + * 小数点位数 + */ + private Integer decimals; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/DetailColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/DetailColumnConfig.java new file mode 100644 index 0000000..95e5bcb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/DetailColumnConfig.java @@ -0,0 +1,18 @@ +package com.lframework.starter.web.gen.components; + +public interface DetailColumnConfig { + + /** + * 列宽 + * + * @return + */ + Integer getSpan(); + + /** + * 排序 + * + * @return + */ + Integer getOrderNo(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryColumnConfig.java new file mode 100644 index 0000000..f451e6d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryColumnConfig.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.components; + +import com.lframework.starter.web.gen.enums.GenQueryWidthType; + +public interface QueryColumnConfig { + + /** + * 宽度类型 + * + * @return + */ + GenQueryWidthType getWidthType(); + + /** + * 宽度 + * + * @return + */ + Integer getWidth(); + + /** + * 页面是否排序 + * + * @return + */ + Boolean getSortable(); + + /** + * 排序 + * + * @return + */ + Integer getOrderNo(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryParamsColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryParamsColumnConfig.java new file mode 100644 index 0000000..aba0788 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/QueryParamsColumnConfig.java @@ -0,0 +1,20 @@ +package com.lframework.starter.web.gen.components; + +import com.lframework.starter.web.gen.enums.GenQueryType; + +public interface QueryParamsColumnConfig { + + /** + * 查询类型 + * + * @return + */ + GenQueryType getQueryType(); + + /** + * 排序 + * + * @return + */ + Integer getOrderNo(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/Table.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/Table.java new file mode 100644 index 0000000..cfe2cb6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/Table.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.components; + +import com.lframework.starter.web.gen.enums.GenConvertType; + +public interface Table { + + /** + * 获取数据库名 + * + * @return + */ + String getSchema(); + + /** + * 获取数据表名 + * + * @return + */ + String getTableName(); + + /** + * 获取数据表备注 + * + * @return + */ + String getComment(); + + /** + * 获取转换方式 + * + * @return + */ + GenConvertType getConvertType(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/TableColumn.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/TableColumn.java new file mode 100644 index 0000000..74f177c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/TableColumn.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.gen.components; + +public interface TableColumn { + + /** + * 获取数据表中的字段名称 + * + * @return + */ + String getDbColumnName(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/UpdateColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/UpdateColumnConfig.java new file mode 100644 index 0000000..5e18c1f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/UpdateColumnConfig.java @@ -0,0 +1,18 @@ +package com.lframework.starter.web.gen.components; + +public interface UpdateColumnConfig { + + /** + * 是否必填 + * + * @return + */ + Boolean getRequired(); + + /** + * 排序 + * + * @return + */ + Integer getOrderNo(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/list/CustomListConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/list/CustomListConfig.java new file mode 100644 index 0000000..84cfe0c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/list/CustomListConfig.java @@ -0,0 +1,377 @@ +package com.lframework.starter.web.gen.components.custom.list; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.VoidDto; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +@Data +public class CustomListConfig extends BaseBo implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "CustomListConfig"; + + /** + * 工具栏 + */ + @ApiModelProperty("工具栏") + private List toolbars; + + /** + * 查询参数 + */ + @ApiModelProperty("查询参数") + private List queryParams; + + /** + * 操作列 + */ + @ApiModelProperty("操作列") + private List handleColumns; + + /** + * 列表配置 + */ + @ApiModelProperty("列表配置") + private ListConfig listConfig; + + + @Data + public static class QueryParam implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 表别名 + */ + @ApiModelProperty("表别名") + private String tableAlias; + + /** + * 字段名称 + */ + @ApiModelProperty("字段名称") + private String columnName; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + private String name; + + /** + * 前端显示 + */ + @ApiModelProperty("前端显示") + private Boolean frontShow; + + /** + * 查询类型 + */ + @ApiModelProperty("查询类型") + private Integer queryType; + + /** + * 表单宽度 + */ + @ApiModelProperty("表单宽度") + private Integer formWidth; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + private Integer viewType; + + /** + * 数据类型 + */ + @ApiModelProperty("数据类型") + private Integer dataType; + + /** + * 是否内置枚举 + */ + @ApiModelProperty("是否内置枚举") + private Boolean fixEnum; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + @ApiModelProperty("前端字段类型 只有字段是枚举时生效,此值为前端枚举类型") + private String frontType; + + /** + * 是否包含状态Tag + */ + @ApiModelProperty("是否包含状态Tag") + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 数据字典Code + */ + @ApiModelProperty("数据字典Code") + private String dataDicCode; + + /** + * 自定义选择器ID + */ + @ApiModelProperty("自定义选择器ID") + private String customSelectorId; + + /** + * 默认值 + */ + @ApiModelProperty("默认值") + private Object defaultValue; + } + + @Data + public static class ListConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 列表类型 + */ + @ApiModelProperty("列表类型") + private Integer listType; + + /** + * 表单宽度列表 + */ + @ApiModelProperty("表单宽度列表") + private Integer labelWidth; + + /** + * 是否分页 + */ + @ApiModelProperty("是否分页") + private Boolean hasPage; + + /** + * 是否树形列表 + */ + @ApiModelProperty("是否树形列表") + private Boolean treeData; + + /** + * ID字段 + */ + @ApiModelProperty("ID字段") + private String idColumn; + + /** + * 父级ID字段 + */ + @ApiModelProperty("父级ID字段") + private String treePidColumn; + + /** + * 树形节点字段 + */ + @ApiModelProperty("树形节点字段") + private String treeNodeColumn; + + /** + * 子节点Key值 + */ + @ApiModelProperty("子节点Key值") + private String treeChildrenKey; + + /** + * 是否允许导出 + */ + @ApiModelProperty("是否允许导出") + private Boolean allowExport; + + /** + * 字段 + */ + @ApiModelProperty("字段") + private List fields; + } + + @Data + public static class FieldConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + private String name; + + /** + * 字段名称 + */ + @ApiModelProperty("字段名称") + private String columnName; + + /** + * 宽度类型 + */ + @ApiModelProperty("宽度类型") + private Integer widthType; + + /** + * 宽度 + */ + @ApiModelProperty("宽度") + private Integer width; + + /** + * 是否页面排序 + */ + @ApiModelProperty("是否页面排序") + private Boolean sortable; + + /** + * 是否数字类型 + */ + @ApiModelProperty("是否数字类型") + private Boolean isNumberType = Boolean.FALSE; + + /** + * 是否包含状态Tag + */ + @ApiModelProperty("是否包含状态Tag") + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 是否内置枚举 + */ + @ApiModelProperty("是否内置枚举") + private Boolean fixEnum; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + @ApiModelProperty("前端字段类型 只有字段是枚举时生效,此值为前端枚举类型") + private String frontType; + + /** + * 数据类型 + */ + @ApiModelProperty("数据类型") + private Integer dataType; + + /** + * 格式化脚本 + */ + @ApiModelProperty("格式化脚本") + private String formatter; + } + + @Data + public static class Toolbar implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + private String name; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + private String viewType; + + /** + * 按钮类型 + */ + @ApiModelProperty("按钮类型") + private Integer btnType; + + /** + * 按钮配置 + */ + @ApiModelProperty("按钮配置") + private String btnConfig; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 请求参数 + */ + @ApiModelProperty("请求参数") + private String requestParam; + } + + @Data + public static class HandleColumn implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + private String name; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + private String viewType; + + /** + * 按钮类型 + */ + @ApiModelProperty("按钮类型") + private Integer btnType; + + /** + * 按钮配置 + */ + @ApiModelProperty("按钮配置") + private String btnConfig; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 宽度 + */ + @ApiModelProperty("宽度") + private Integer width; + + /** + * 请求参数 + */ + @ApiModelProperty("请求参数") + private String requestParam; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/page/CustomPageConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/page/CustomPageConfig.java new file mode 100644 index 0000000..fa80c54 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/page/CustomPageConfig.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.components.custom.page; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.VoidDto; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class CustomPageConfig extends BaseBo implements Serializable { + + public static final String CACHE_NAME = "CustomPageConfig"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private Integer id; + + /** + * 组件配置 + */ + @ApiModelProperty("组件配置") + private String componentConfig; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/selector/CustomSelectorConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/selector/CustomSelectorConfig.java new file mode 100644 index 0000000..6040f70 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/custom/selector/CustomSelectorConfig.java @@ -0,0 +1,51 @@ +package com.lframework.starter.web.gen.components.custom.selector; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.VoidDto; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class CustomSelectorConfig extends BaseBo implements Serializable { + + public static final String CACHE_NAME = "CustomSelectorConfig"; + + private static final long serialVersionUID = 1L; + + /** + * 自定义列表ID + */ + @ApiModelProperty("自定义列表ID") + private String customListId; + + /** + * ID字段 + */ + @ApiModelProperty("ID字段") + private String idColumn; + + /** + * 名称字段 + */ + @ApiModelProperty("名称字段") + private String nameColumn; + + /** + * 占位符 + */ + @ApiModelProperty("占位符") + private String placeholder; + + /** + * 对话框标题 + */ + @ApiModelProperty("对话框标题") + private String dialogTittle; + + /** + * 对话框宽度 + */ + @ApiModelProperty("对话框宽度") + private String dialogWidth; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryObj.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryObj.java new file mode 100644 index 0000000..52aaf15 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryObj.java @@ -0,0 +1,122 @@ +package com.lframework.starter.web.gen.components.data.obj; + +import com.lframework.starter.web.gen.enums.GenDataType; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +@Data +public class DataObjectQueryObj implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "DataObjectQueryObj"; + + /** + * SQL的SELECT部分 + */ + private List fields; + + /** + * 主表 FROM部分 + */ + private String mainTable; + + /** + * 主表别名 + */ + private String mainTableAlias; + + /** + * 关联的子表 + */ + private List subTables; + + /** + * 查询参数 + */ + private DataObjectQueryParamObj queryParamObj; + + /** + * 查询前置SQL + */ + private String queryPrefixSql; + + /** + * 查询后置SQL + */ + private String querySuffixSql; + + /** + * 后置SQL + */ + private String suffixSql; + + @Data + public static class QueryField implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 表别名 如果此值为空,代表为自定义查询字段 + */ + private String tableAlias; + + /** + * 字段名 + */ + private String columnName; + + /** + * 字段别名 + */ + private String columnAlias; + + /** + * 数据类型 + */ + private GenDataType dataType; + } + + @Data + public static class QuerySubTable implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 子表 + */ + private String subTable; + + /** + * 子表别名 + */ + private String subTableAlias; + + /** + * 关联方式 + */ + private String joinType; + + /** + * 关联条件 key:主表字段 value:子表字段 + */ + private List joinCondition; + } + + @Data + public static class QuerySubTableCondition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 左侧字段 + */ + private String key; + + /** + * 右侧字段 + */ + private String value; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryParamObj.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryParamObj.java new file mode 100644 index 0000000..f366cda --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/data/obj/DataObjectQueryParamObj.java @@ -0,0 +1,58 @@ +package com.lframework.starter.web.gen.components.data.obj; + +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.vo.PageVo; +import java.util.List; +import lombok.Data; + +@Data +public class DataObjectQueryParamObj extends PageVo { + + /** + * 条件 + */ + private List conditions; + + @Data + public static class Condition { + /** + * 表别名 + */ + private String tableAlias; + + /** + * 字段名 + */ + private String columnName; + + /** + * 查询类型 + */ + private Integer queryType; + + /** + * 值前缀 + */ + private String valuePrefix; + + /** + * 值 + */ + private Object value; + + /** + * 值集合 + */ + private List values; + + /** + * 值后缀 + */ + private String valueSuffix; + + public String getQueryTypeSql() { + return EnumUtil.getByCode(GenQueryType.class, this.queryType).getOperation(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/Generator.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/Generator.java new file mode 100644 index 0000000..68c7fb8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/Generator.java @@ -0,0 +1,1658 @@ +package com.lframework.starter.web.gen.components.generate; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.components.validation.IsNumberPrecision; +import com.lframework.starter.web.core.components.validation.Pattern; +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.constants.MyBatisStringPool; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.inner.components.oplog.OtherOpLogType; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.gen.builders.DataEntityBuilder; +import com.lframework.starter.web.gen.components.DataEntity; +import com.lframework.starter.web.gen.components.DataEntityColumn; +import com.lframework.starter.web.gen.directives.FormatDirective; +import com.lframework.starter.web.gen.dto.generate.GenerateDto; +import com.lframework.starter.web.gen.enums.GenConvertType; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenKeyType; +import com.lframework.starter.web.gen.enums.GenViewType; +import com.lframework.starter.web.gen.components.generate.templates.ControllerTemplate; +import com.lframework.starter.web.gen.components.generate.templates.CreateTemplate; +import com.lframework.starter.web.gen.components.generate.templates.DetailTemplate; +import com.lframework.starter.web.gen.components.generate.templates.EntityTemplate; +import com.lframework.starter.web.gen.components.generate.templates.MapperTemplate; +import com.lframework.starter.web.gen.components.generate.templates.QueryParamsTemplate; +import com.lframework.starter.web.gen.components.generate.templates.QueryTemplate; +import com.lframework.starter.web.gen.components.generate.templates.ServiceTemplate; +import com.lframework.starter.web.gen.components.generate.templates.SqlTemplate; +import com.lframework.starter.web.gen.components.generate.templates.UpdateTemplate; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.service.system.SysDataDicItemService; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import freemarker.ext.beans.BeansWrapper; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import freemarker.template.TemplateExceptionHandler; +import freemarker.template.TemplateHashModel; +import freemarker.template.TemplateModelException; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.io.StringWriter; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.hibernate.validator.constraints.Length; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.DeleteMapping; + +@Slf4j +public class Generator { + + private DataEntity dataEntity; + + private Generator() { + + } + + public static Generator getInstance(String entityId) { + + DataEntityBuilder builder = ApplicationUtil.getBean(DataEntityBuilder.class); + Generator generator = new Generator(); + + generator.setDataEntity(builder.build(entityId)); + + return generator; + } + + private void setDataEntity(DataEntity dataEntity) { + + this.dataEntity = dataEntity; + } + + public List generateAll() { + + List results = new ArrayList<>(); + // Java代码 + GenerateDto entityJava = this.generateEntity(); + GenerateDto mapperJava = this.generateMapper(); + GenerateDto mapperXml = this.generateListMapperXml(); + GenerateDto queryVoJava = this.generateQueryVo(); + GenerateDto createVoJava = this.generateCreateVo(); + GenerateDto updateVoJava = this.generateUpdateVo(); + GenerateDto serviceJava = this.generateService(); + GenerateDto serviceImplJava = this.generateServiceImpl(); + GenerateDto queryBoJava = this.generateQueryBo(); + GenerateDto getBoJava = this.generateGetBo(); + GenerateDto controllerJava = this.generateController(); + + results.add(entityJava); + if (queryVoJava != null) { + results.add(queryVoJava); + } + results.add(mapperJava); + results.add(mapperXml); + if (createVoJava != null) { + results.add(createVoJava); + } + if (updateVoJava != null) { + results.add(updateVoJava); + } + results.add(serviceJava); + results.add(serviceImplJava); + if (queryBoJava != null) { + results.add(queryBoJava); + } + if (getBoJava != null) { + results.add(getBoJava); + } + results.add(controllerJava); + + // Vue代码 + GenerateDto apiJs = this.generateApiJs(); + GenerateDto indexVue = this.generateIndexVue(); + GenerateDto addVue = this.generateAddVue(); + GenerateDto modifyVue = this.generateModifyVue(); + GenerateDto detailVue = this.generateDetailVue(); + GenerateDto createVoVue = this.generateCreateVoVue(); + GenerateDto queryVoVue = this.generateQueryVoVue(); + GenerateDto updateVoVue = this.generateUpdateVoVue(); + GenerateDto queryBoVue = this.generateQueryBoVue(); + GenerateDto getBoVue = this.generateGetBoVue(); + + results.add(apiJs); + results.add(indexVue); + if (addVue != null) { + results.add(addVue); + } + if (modifyVue != null) { + results.add(modifyVue); + } + if (detailVue != null) { + results.add(detailVue); + } + if (createVoVue != null) { + results.add(createVoVue); + } + if (queryVoVue != null) { + results.add(queryVoVue); + } + if (updateVoVue != null) { + results.add(updateVoVue); + } + if (queryBoVue != null) { + results.add(queryBoVue); + } + if (getBoVue != null) { + results.add(getBoVue); + } + + // sql + GenerateDto sql = this.generateSql(); + results.add(sql); + + return results; + } + + /** + * 生成Entity.java代码 + * + * @return + */ + public GenerateDto generateEntity() { + + EntityTemplate template = this.getEntityTemplate(); + + String content = this.generate("entity.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "entity", template.getClassName() + ".java", content); + } + + /** + * 生成Mapper.java代码 + * + * @return + */ + public GenerateDto generateMapper() { + + MapperTemplate template = this.getMapperTemplate(); + + String content = this.generate("mapper.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "mappers", template.getClassName() + "Mapper.java", content); + } + + /** + * 生成Mapper.xml代码 + * + * @return + */ + public GenerateDto generateListMapperXml() { + + MapperTemplate template = this.getMapperTemplate(); + + String content = this.generate("mapper.list.xml.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "resources" + + File.separator + "mappers" + File.separator + template.getModuleName(), + template.getClassName() + "Mapper.xml", content); + } + + /** + * 生成QueryVo.java代码 + * + * @return + */ + public GenerateDto generateQueryVo() { + + QueryParamsTemplate template = this.getQueryParamsTemplate(); + if (template == null) { + return null; + } + + String content = this.generate("queryvo.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "vo" + + File.separator + template.getModuleName() + File.separator + template.getBizName(), + "Query" + template.getClassName() + "Vo.java", content); + } + + /** + * 生成Service.java代码 + * + * @return + */ + public GenerateDto generateService() { + + ServiceTemplate template = this.getServiceTemplate(); + + String content = this.generate("service.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "service" + File.separator + template.getModuleName(), + template.getClassName() + "Service.java", content); + } + + /** + * 生成ServiceImpl.java代码 + * + * @return + */ + public GenerateDto generateServiceImpl() { + + ServiceTemplate template = this.getServiceTemplate(); + + String content = this.generate("serviceimpl.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "impl" + + File.separator + template.getModuleName(), + template.getClassName() + "ServiceImpl.java", + content); + } + + /** + * 生成CreateVo.java代码 + * + * @return + */ + public GenerateDto generateCreateVo() { + + CreateTemplate template = this.getCreateTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("createvo.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "vo" + + File.separator + template.getModuleName() + File.separator + template.getBizName(), + "Create" + template.getClassName() + "Vo.java", content); + } + + /** + * 生成UpdateVo.java代码 + * + * @return + */ + public GenerateDto generateUpdateVo() { + + UpdateTemplate template = this.getUpdateTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("updatevo.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "vo" + + File.separator + template.getModuleName() + File.separator + template.getBizName(), + "Update" + template.getClassName() + "Vo.java", content); + } + + /** + * 生成QueryBo.java代码 + * + * @return + */ + public GenerateDto generateQueryBo() { + + QueryTemplate template = this.getQueryTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("querybo.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "bo" + + File.separator + template.getModuleName() + File.separator + template.getBizName(), + "Query" + template.getClassName() + "Bo.java", content); + } + + /** + * 生成GetBo.java代码 + * + * @return + */ + public GenerateDto generateGetBo() { + + DetailTemplate template = this.getDetailTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("getbo.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "bo" + + File.separator + template.getModuleName() + File.separator + template.getBizName(), + "Get" + template.getClassName() + "Bo.java", content); + } + + /** + * 生成Controller.java代码 + * + * @return + */ + public GenerateDto generateController() { + + ControllerTemplate template = this.getControllerTemplate(); + + String content = this.generate("controller.java.ftl", template); + + return this.buildGenerateResult( + "java" + File.separator + "src" + File.separator + "main" + File.separator + "java" + + File.separator + + template.getPackageName().replaceAll("\\.", "\\" + File.separator) + File.separator + + "controller" + File.separator + template.getModuleName(), + template.getClassName() + "Controller.java", content); + } + + /** + * 生成api.js代码 + * + * @return + */ + public GenerateDto generateApiJs() { + + ControllerTemplate template = this.getControllerTemplate(); + + String content = this.generate("api.ts.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "api" + File.separator + + template.getModuleName() + File.separator + template.getBizName(), "index.ts", + content); + } + + /** + * 生成index.vue代码 + * + * @return + */ + public GenerateDto generateIndexVue() { + + ControllerTemplate template = this.getControllerTemplate(); + String content = this.generate("index.vue.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "views" + File.separator + + template.getModuleName() + + File.separator + template.getBizName(), "index.vue", content); + } + + /** + * add.vue代码 + * + * @return + */ + public GenerateDto generateAddVue() { + + CreateTemplate template = this.getCreateTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("add.vue.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "views" + File.separator + + template.getModuleName() + + File.separator + template.getBizName(), "add.vue", content); + } + + /** + * modify.vue代码 + * + * @return + */ + public GenerateDto generateModifyVue() { + + UpdateTemplate template = this.getUpdateTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("modify.vue.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "views" + File.separator + + template.getModuleName() + + File.separator + template.getBizName(), "modify.vue", content); + } + + /** + * detail.vue代码 + * + * @return + */ + public GenerateDto generateDetailVue() { + + DetailTemplate template = this.getDetailTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("detail.vue.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "views" + File.separator + + template.getModuleName() + + File.separator + template.getBizName(), "detail.vue", content); + } + + /** + * detail.vue代码 + * + * @return + */ + public GenerateDto generateSql() { + + SqlTemplate template = this.getSqlTemplate(); + + String content = this.generate("sql.ftl", template); + + return this.buildGenerateResult(StringPool.EMPTY_STR, "sql.sql", content); + } + + /** + * 获取freeMarker Template + * + * @param templateName + * @return + */ + private Template getTemplate(String templateName) { + + Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); + cfg.setClassForTemplateLoading(Generator.class, "/templates"); + cfg.setDefaultEncoding("UTF-8"); + cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + cfg.setSharedVariable(FormatDirective.DIRECTIVE_NAME, new FormatDirective()); + try { + return cfg.getTemplate(templateName); + } catch (IOException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + } + + /** + * Entity.java模板数据 + * + * @return + */ + private EntityTemplate getEntityTemplate() { + + EntityTemplate entityTemplate = new EntityTemplate(); + entityTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + entityTemplate.setTableName(dataEntity.getTable().getTableName()); + entityTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + entityTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + entityTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + entityTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + entityTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + + Set importPackages = new HashSet<>(); + importPackages.add(BaseEntity.class.getName()); + importPackages.add(BaseDto.class.getName()); + List columns = new ArrayList<>(); + for (DataEntityColumn column : dataEntity.getColumns()) { + EntityTemplate.Column columnObj = new EntityTemplate.Column(); + columnObj.setIsKey(column.getIsKey()); + if (columnObj.getIsKey()) { + // 如果是主键,判断是否是自增主键 + columnObj.setAutoIncrKey(dataEntity.getGenerateInfo().getKeyType() == GenKeyType.AUTO); + if (columnObj.getAutoIncrKey()) { + importPackages.add(TableId.class.getName()); + importPackages.add(IdType.class.getName()); + } + } + if (column.getFixEnum()) { + // 如果是枚举类型 + columnObj.setDataType( + column.getEnumBack().substring(column.getEnumBack().lastIndexOf(".") + 1)); + columnObj.setFrontType(column.getEnumFront()); + importPackages.add(column.getEnumBack()); + } else { + columnObj.setDataType(column.getDataType().getDesc()); + } + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + columnObj.setName(column.getColumnName()); + // MybatisPlus默认命名规则是下划线转驼峰,所以如果不是这个规则的话,需要单独指定TableField和TableId + columnObj.setColumnName(column.getTableColumn().getDbColumnName()); + columnObj.setDefaultConvertType( + dataEntity.getTable().getConvertType() == GenConvertType.UNDERLINE_TO_CAMEL); + if (!columnObj.getDefaultConvertType()) { + importPackages.add(TableId.class.getName()); + importPackages.add(TableField.class.getName()); + } + columnObj.setDescription(column.getName()); + if (!columnObj.getIsKey()) { + // 如果不是主键,需要判断是否需要字段填充 + if (MyBatisStringPool.COLUMN_CREATE_BY.equals(columnObj.getName()) + || MyBatisStringPool.COLUMN_CREATE_BY_ID.equals(columnObj.getName()) + || MyBatisStringPool.COLUMN_CREATE_TIME.equals(columnObj.getName())) { + columnObj.setFill(Boolean.TRUE); + columnObj.setFillStrategy(FieldFill.INSERT.name()); + importPackages.add(TableField.class.getName()); + importPackages.add(FieldFill.class.getName()); + } else if (MyBatisStringPool.COLUMN_UPDATE_BY.equals(columnObj.getName()) + || MyBatisStringPool.COLUMN_UPDATE_BY_ID.equals(columnObj.getName()) + || MyBatisStringPool.COLUMN_UPDATE_TIME.equals(columnObj.getName())) { + columnObj.setFill(Boolean.TRUE); + columnObj.setFillStrategy(FieldFill.INSERT_UPDATE.name()); + importPackages.add(TableField.class.getName()); + importPackages.add(FieldFill.class.getName()); + } + } + + columns.add(columnObj); + } + entityTemplate.setColumns(columns); + + entityTemplate.setImportPackages(importPackages); + + return entityTemplate; + } + + /** + * 生成CreateVo.ts代码 + * + * @return + */ + public GenerateDto generateCreateVoVue() { + + CreateTemplate template = this.getCreateTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("createvo.ts.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "api" + File.separator + + template.getModuleName() + File.separator + template.getBizName() + File.separator + + "model", "create" + template.getClassName() + "Vo.ts", + content); + } + + /** + * 生成QueryVo.ts代码 + * + * @return + */ + public GenerateDto generateQueryVoVue() { + + QueryParamsTemplate template = this.getQueryParamsTemplate(); + if (template == null) { + return null; + } + + String content = this.generate("queryvo.ts.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "api" + File.separator + + template.getModuleName() + File.separator + template.getBizName() + File.separator + + "model", "query" + template.getClassName() + "Vo.ts", + content); + } + + /** + * 生成UpdateVo.ts代码 + * + * @return + */ + public GenerateDto generateUpdateVoVue() { + + UpdateTemplate template = this.getUpdateTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("updatevo.ts.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "api" + File.separator + + template.getModuleName() + File.separator + template.getBizName() + File.separator + + "model", "update" + template.getClassName() + "Vo.ts", + content); + } + + /** + * 生成QueryBo.ts代码 + * + * @return + */ + public GenerateDto generateQueryBoVue() { + + QueryTemplate template = this.getQueryTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("querybo.ts.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "api" + File.separator + + template.getModuleName() + File.separator + template.getBizName() + File.separator + + "model", "query" + template.getClassName() + "Bo.ts", + content); + } + + /** + * 生成GetBo.ts代码 + * + * @return + */ + public GenerateDto generateGetBoVue() { + + DetailTemplate template = this.getDetailTemplate(); + + if (template == null) { + return null; + } + + String content = this.generate("getbo.ts.ftl", template); + + return this.buildGenerateResult( + "vue" + File.separator + "src" + File.separator + "api" + File.separator + + template.getModuleName() + File.separator + template.getBizName() + File.separator + + "model", "get" + template.getClassName() + "Bo.ts", + content); + } + + /** + * Mapper.java模板数据 + * + * @return + */ + private MapperTemplate getMapperTemplate() { + + MapperTemplate mapperTemplate = new MapperTemplate(); + mapperTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + mapperTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + mapperTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + mapperTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + mapperTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + mapperTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + Set importPackages = new HashSet<>(); + importPackages.add(BaseMapper.class.getName()); + List keys = new ArrayList<>(); + for (DataEntityColumn column : dataEntity.getColumns()) { + if (column.getIsKey()) { + MapperTemplate.Key key = new MapperTemplate.Key(); + // 主键不允许是枚举,所以直接取desc + key.setDataType(column.getDataType().getDesc()); + key.setName(column.getColumnName()); + key.setColumnName(column.getTableColumn().getDbColumnName()); + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + keys.add(key); + } + } + + mapperTemplate.setKeys(keys); + List orderColumns = new ArrayList<>(); + for (DataEntityColumn column : dataEntity.getColumns()) { + if (!column.getIsOrder()) { + continue; + } + MapperTemplate.OrderColumn orderColumn = new MapperTemplate.OrderColumn(); + orderColumn.setColumnName(column.getTableColumn().getDbColumnName()); + orderColumn.setOrderType(column.getOrderType().getCode()); + orderColumns.add(orderColumn); + } + mapperTemplate.setOrderColumns(orderColumns); + mapperTemplate.setEntity(this.getEntityTemplate()); + mapperTemplate.setImportPackages(importPackages); + mapperTemplate.setQueryParams(this.getQueryParamsTemplate()); + if (mapperTemplate.getQueryParams() != null) { + mapperTemplate.getImportPackages() + .addAll(mapperTemplate.getQueryParams().getImportPackages()); + } + + return mapperTemplate; + } + + private ServiceTemplate getServiceTemplate() { + + ServiceTemplate serviceTemplate = new ServiceTemplate(); + serviceTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + serviceTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + serviceTemplate.setClassNameProperty( + dataEntity.getGenerateInfo().getClassName().substring(0, 1).toLowerCase() + + dataEntity.getGenerateInfo() + .getClassName().substring(1)); + serviceTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + serviceTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + serviceTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + serviceTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + serviceTemplate.setIsCache(dataEntity.getGenerateInfo().getIsCache()); + serviceTemplate.setHasDelete(dataEntity.getGenerateInfo().getHasDelete()); + Set importPackages = new HashSet<>(); + importPackages.add(PageResult.class.getName()); + importPackages.add(BaseMpService.class.getName()); + importPackages.add(StringUtil.class.getName()); + importPackages.add(BaseMpServiceImpl.class.getName()); + importPackages.add(DefaultClientException.class.getName()); + importPackages.add(Assert.class.getName()); + importPackages.add(ObjectUtil.class.getName()); + importPackages.add(OpLog.class.getName()); + importPackages.add(OtherOpLogType.class.getName()); + importPackages.add(OpLogUtil.class.getName()); + importPackages.add(PageHelperUtil.class.getName()); + importPackages.add(PageResultUtil.class.getName()); + importPackages.add(EnumUtil.class.getName()); + if (serviceTemplate.getHasDelete()) { + importPackages.add(Transactional.class.getName()); + } + List keys = new ArrayList<>(); + for (DataEntityColumn column : dataEntity.getColumns()) { + if (column.getIsKey()) { + ServiceTemplate.Key key = new ServiceTemplate.Key(); + // 主键不允许是枚举,所以直接取desc + key.setDataType(column.getDataType().getDesc()); + key.setName(column.getColumnName()); + key.setNameProperty( + column.getColumnName().substring(0, 1).toUpperCase() + column.getColumnName() + .substring(1)); + key.setColumnName(column.getTableColumn().getDbColumnName()); + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + keys.add(key); + } + } + + serviceTemplate.setKeys(keys); + serviceTemplate.setImportPackages(importPackages); + serviceTemplate.setQueryParams(this.getQueryParamsTemplate()); + serviceTemplate.setCreate(this.getCreateTemplate()); + serviceTemplate.setUpdate(this.getUpdateTemplate()); + if (serviceTemplate.getIsCache()) { + importPackages.add(Serializable.class.getName()); + } + if (serviceTemplate.getQueryParams() != null) { + serviceTemplate.getImportPackages() + .addAll(serviceTemplate.getQueryParams().getImportPackages()); + } + if (serviceTemplate.getCreate() != null) { + serviceTemplate.getImportPackages().addAll(serviceTemplate.getCreate().getImportPackages()); + } + if (serviceTemplate.getUpdate() != null) { + serviceTemplate.getImportPackages().addAll(serviceTemplate.getUpdate().getImportPackages()); + } + + return serviceTemplate; + } + + private QueryParamsTemplate getQueryParamsTemplate() { + + List targetColumns = dataEntity.getColumns().stream() + .filter(t -> t.getQueryParamsConfig() != null) + .sorted(Comparator.comparing(t -> t.getQueryParamsConfig().getOrderNo())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(targetColumns)) { + return null; + } + QueryParamsTemplate queryParamsTemplate = new QueryParamsTemplate(); + queryParamsTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + queryParamsTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + queryParamsTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + queryParamsTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + queryParamsTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + queryParamsTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + Set importPackages = new HashSet<>(); + importPackages.add(BaseVo.class.getName()); + importPackages.add(PageVo.class.getName()); + importPackages.add(TypeMismatch.class.getName()); + importPackages.add(ApiModelProperty.class.getName()); + List columns = new ArrayList<>(); + for (DataEntityColumn column : targetColumns) { + QueryParamsTemplate.Column columnObj = new QueryParamsTemplate.Column(); + if (column.getFixEnum()) { + // 如果是枚举类型 + columnObj.setDataType( + column.getEnumBack().substring(column.getEnumBack().lastIndexOf(".") + 1)); + columnObj.setFrontType(column.getEnumFront()); + columnObj.setFrontDataType("number"); + columnObj.setViewType(column.getViewType().getCode()); + columnObj.setEnumCodeType(column.getDataType().getDesc()); + importPackages.add(column.getEnumBack()); + importPackages.add(IsEnum.class.getName()); + } else { + columnObj.setDataType(column.getDataType().getDesc()); + columnObj.setFrontDataType(column.getDataType().getFrontDesc()); + columnObj.setViewType(column.getViewType().getCode()); + } + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + columnObj.setName(column.getColumnName()); + columnObj.setColumnName(column.getTableColumn().getDbColumnName()); + columnObj.setQueryType(column.getQueryParamsConfig().getQueryType().getCode()); + columnObj.setNameProperty( + column.getColumnName().substring(0, 1).toUpperCase() + column.getColumnName() + .substring(1)); + columnObj.setDescription(column.getName()); + columnObj.setHasAvailableTag( + column.getViewType() == GenViewType.SELECT && column.getDataType() == GenDataType.BOOLEAN + && "available".equals(column.getColumnName())); + columnObj.setFixEnum(column.getFixEnum()); + if (!StringUtil.isBlank(column.getRegularExpression())) { + columnObj.setRegularExpression(column.getRegularExpression()); + importPackages.add(Pattern.class.getName()); + } + if (column.getViewType() == GenViewType.DATA_DIC) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dic = sysDataDicService.findById(column.getDataDicId()); + columnObj.setDataDicCode(dic.getCode()); + } else if (column.getViewType() == GenViewType.CUSTOM_SELECTOR) { + columnObj.setCustomSelectorId(column.getCustomSelectorId()); + } + + columns.add(columnObj); + } + queryParamsTemplate.setColumns(columns); + queryParamsTemplate.setImportPackages(importPackages); + + return queryParamsTemplate; + } + + private CreateTemplate getCreateTemplate() { + + List targetColumns = dataEntity.getColumns().stream() + .filter(t -> t.getCreateConfig() != null) + .sorted(Comparator.comparing(t -> t.getCreateConfig().getOrderNo())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(targetColumns)) { + return null; + } + Set importPackages = new HashSet<>(); + importPackages.add(ApiModelProperty.class.getName()); + CreateTemplate createTemplate = new CreateTemplate(); + createTemplate.setAppointId(dataEntity.getGenerateInfo().getKeyType() != GenKeyType.AUTO); + if (dataEntity.getGenerateInfo().getKeyType() == GenKeyType.UUID) { + // 如果是UUID,则引入IdUtil包 + importPackages.add(IdUtil.class.getName()); + createTemplate.setIdCode(IdUtil.class.getSimpleName() + ".getUUID()"); + } else if (dataEntity.getGenerateInfo().getKeyType() == GenKeyType.SNOW_FLAKE) { + // 如果是雪花算法,则引入IdWorker包 + importPackages.add(IdUtil.class.getName()); + createTemplate.setIdCode(IdUtil.class.getSimpleName() + ".getId()"); + } + createTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + createTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + createTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + createTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + createTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + createTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + importPackages.add(TypeMismatch.class.getName()); + importPackages.add(BaseVo.class.getName()); + + List columns = new ArrayList<>(); + for (DataEntityColumn column : targetColumns) { + CreateTemplate.Column columnObj = new CreateTemplate.Column(); + columnObj.setIsKey(column.getIsKey()); + columnObj.setRequired(column.getCreateConfig().getRequired()); + if (column.getFixEnum()) { + // 如果是枚举类型 + columnObj.setDataType( + column.getEnumBack().substring(column.getEnumBack().lastIndexOf(".") + 1)); + columnObj.setFrontType(column.getEnumFront()); + columnObj.setFrontDataType("number"); + columnObj.setViewType(column.getViewType().getCode()); + importPackages.add(column.getEnumBack()); + importPackages.add(EnumUtil.class.getName()); + } else { + columnObj.setDataType(column.getDataType().getDesc()); + columnObj.setViewType(column.getViewType().getCode()); + columnObj.setFrontDataType(column.getDataType().getFrontDesc()); + } + if (column.getViewType() == GenViewType.DATE_RANGE) { + if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + columnObj.setViewType(GenViewType.DATETIME.getCode()); + } else { + columnObj.setViewType(GenViewType.DATE.getCode()); + } + } + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + columnObj.setFixEnum(column.getFixEnum()); + if (columnObj.getFixEnum()) { + columnObj.setEnumCodeType(column.getDataType().getDesc()); + } + if (columnObj.getRequired()) { + // 如果必填,那么需要引Validation注解包 + if (column.getDataType() == GenDataType.STRING) { + // 如果是String,则引@NotBlank注解 + columnObj.setValidateAnno(NotBlank.class.getSimpleName()); + importPackages.add(NotBlank.class.getName()); + } else { + // 否则引@NotNull注解 + columnObj.setValidateAnno(NotNull.class.getSimpleName()); + importPackages.add(NotNull.class.getName()); + } + + if (column.getViewType() == GenViewType.SELECT + || column.getViewType() == GenViewType.DATA_DIC) { + columnObj.setValidateMsg("请选择"); + } else { + columnObj.setValidateMsg("请输入"); + } + + if (columnObj.getFixEnum()) { + // 如果是内置枚举,那么引IsEnum注解包 + importPackages.add(IsEnum.class.getName()); + } + } + columnObj.setName(column.getColumnName()); + columnObj.setColumnName(column.getTableColumn().getDbColumnName()); + columnObj.setNameProperty( + column.getColumnName().substring(0, 1).toUpperCase() + column.getColumnName() + .substring(1)); + columnObj.setDescription(column.getName()); + columnObj.setHasAvailableTag( + column.getViewType() == GenViewType.SELECT && column.getDataType() == GenDataType.BOOLEAN + && "available".equals(column.getColumnName())); + if (!StringUtil.isBlank(column.getRegularExpression())) { + columnObj.setRegularExpression(column.getRegularExpression()); + importPackages.add(Pattern.class.getName()); + } + + columnObj.setIsNumberType(GenDataType.isNumberType(column.getDataType())); + columnObj.setIsDecimalType(GenDataType.isDecimalType(column.getDataType())); + if (column.getViewType() == GenViewType.DATA_DIC) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dic = sysDataDicService.findById(column.getDataDicId()); + columnObj.setDataDicCode(dic.getCode()); + } else if (column.getViewType() == GenViewType.CUSTOM_SELECTOR) { + columnObj.setCustomSelectorId(column.getCustomSelectorId()); + } + columnObj.setLen(column.getLen()); + columnObj.setDecimals(column.getDecimals()); + if (columnObj.getIsNumberType()) { + if (columnObj.getIsDecimalType()) { + importPackages.add(IsNumberPrecision.class.getName()); + } + } else if (column.getDataType() == GenDataType.STRING) { + if (column.getViewType() == GenViewType.INPUT + || column.getViewType() == GenViewType.TEXTATREA) { + importPackages.add(Length.class.getName()); + } + } + columns.add(columnObj); + } + + createTemplate.setColumns(columns); + createTemplate.setImportPackages(importPackages); + List keyColumns = dataEntity.getColumns().stream() + .filter(DataEntityColumn::getIsKey) + .collect(Collectors.toList()); + List keys = keyColumns.stream().map(t -> { + CreateTemplate.Key key = new CreateTemplate.Key(); + // 主键不会是枚举 + key.setDataType(t.getDataType().getDesc()); + key.setName(t.getColumnName()); + key.setNameProperty( + t.getColumnName().substring(0, 1).toUpperCase() + t.getColumnName().substring(1)); + key.setColumnName(t.getTableColumn().getDbColumnName()); + key.setDescription(t.getName()); + + return key; + }).collect(Collectors.toList()); + + createTemplate.setKeys(keys); + + return createTemplate; + } + + private UpdateTemplate getUpdateTemplate() { + + List targetColumns = dataEntity.getColumns().stream() + .filter(t -> t.getUpdateConfig() != null) + .sorted(Comparator.comparing(t -> t.getUpdateConfig().getOrderNo())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(targetColumns)) { + return null; + } + Set importPackages = new HashSet<>(); + UpdateTemplate updateTemplate = new UpdateTemplate(); + updateTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + updateTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + updateTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + updateTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + updateTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + updateTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + importPackages.add(TypeMismatch.class.getName()); + importPackages.add(ApiModelProperty.class.getName()); + importPackages.add(BaseVo.class.getName()); + + List columns = new ArrayList<>(); + for (DataEntityColumn column : targetColumns) { + UpdateTemplate.Column columnObj = new UpdateTemplate.Column(); + columnObj.setIsKey(column.getIsKey()); + columnObj.setRequired(column.getUpdateConfig().getRequired()); + if (column.getFixEnum()) { + // 如果是枚举类型 + columnObj.setDataType( + column.getEnumBack().substring(column.getEnumBack().lastIndexOf(".") + 1)); + columnObj.setFrontType(column.getEnumFront()); + columnObj.setViewType(column.getViewType().getCode()); + columnObj.setFrontDataType("number"); + importPackages.add(column.getEnumBack()); + importPackages.add(EnumUtil.class.getName()); + } else { + columnObj.setDataType(column.getDataType().getDesc()); + columnObj.setFrontDataType(column.getDataType().getFrontDesc()); + columnObj.setViewType(column.getViewType().getCode()); + } + if (column.getViewType() == GenViewType.DATE_RANGE) { + if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + columnObj.setViewType(GenViewType.DATETIME.getCode()); + } else { + columnObj.setViewType(GenViewType.DATE.getCode()); + } + } + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + columnObj.setFixEnum(column.getFixEnum()); + if (columnObj.getFixEnum()) { + columnObj.setEnumCodeType(column.getDataType().getDesc()); + } + if (columnObj.getRequired()) { + // 如果必填,那么需要引Validation注解包 + if (column.getDataType() == GenDataType.STRING) { + // 如果是String,则引@NotBlank注解 + columnObj.setValidateAnno(NotBlank.class.getSimpleName()); + importPackages.add(NotBlank.class.getName()); + } else { + // 否则引@NotNull注解 + columnObj.setValidateAnno(NotNull.class.getSimpleName()); + importPackages.add(NotNull.class.getName()); + } + + if (column.getViewType() == GenViewType.SELECT + || column.getViewType() == GenViewType.DATA_DIC) { + columnObj.setValidateMsg("请选择"); + } else { + columnObj.setValidateMsg("请输入"); + } + + if (columnObj.getFixEnum()) { + // 如果是内置枚举,那么引IsEnum注解包 + importPackages.add(IsEnum.class.getName()); + } + } + columnObj.setName(column.getColumnName()); + columnObj.setColumnName(column.getTableColumn().getDbColumnName()); + columnObj.setNameProperty( + column.getColumnName().substring(0, 1).toUpperCase() + column.getColumnName() + .substring(1)); + columnObj.setDescription(column.getName()); + columnObj.setHasAvailableTag( + column.getViewType() == GenViewType.SELECT && column.getDataType() == GenDataType.BOOLEAN + && "available".equals(column.getColumnName())); + if (!StringUtil.isBlank(column.getRegularExpression())) { + columnObj.setRegularExpression(column.getRegularExpression()); + importPackages.add(Pattern.class.getName()); + } + columnObj.setIsNumberType(GenDataType.isNumberType(column.getDataType())); + columnObj.setIsDecimalType(GenDataType.isDecimalType(column.getDataType())); + columnObj.setLen(column.getLen()); + columnObj.setDecimals(column.getDecimals()); + if (columnObj.getIsNumberType()) { + if (columnObj.getIsDecimalType()) { + importPackages.add(IsNumberPrecision.class.getName()); + } + } else if (column.getDataType() == GenDataType.STRING) { + if (column.getViewType() == GenViewType.INPUT + || column.getViewType() == GenViewType.TEXTATREA) { + importPackages.add(Length.class.getName()); + } + } + + if (column.getViewType() == GenViewType.DATA_DIC) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dic = sysDataDicService.findById(column.getDataDicId()); + columnObj.setDataDicCode(dic.getCode()); + } else if (column.getViewType() == GenViewType.CUSTOM_SELECTOR) { + columnObj.setCustomSelectorId(column.getCustomSelectorId()); + } + + columns.add(columnObj); + } + + updateTemplate.setColumns(columns); + updateTemplate.setImportPackages(importPackages); + List keyColumns = dataEntity.getColumns().stream() + .filter(DataEntityColumn::getIsKey) + .collect(Collectors.toList()); + List keys = keyColumns.stream().map(t -> { + UpdateTemplate.Key key = new UpdateTemplate.Key(); + // 主键不会是枚举 + key.setDataType(t.getDataType().getDesc()); + key.setFrontDataType(t.getDataType().getFrontDesc()); + key.setName(t.getColumnName()); + key.setNameProperty( + t.getColumnName().substring(0, 1).toUpperCase() + t.getColumnName().substring(1)); + key.setColumnName(t.getTableColumn().getDbColumnName()); + key.setDescription(t.getName()); + if (t.getDataType() == GenDataType.STRING) { + // 如果是String,则引@NotBlank注解 + importPackages.add(NotBlank.class.getName()); + } else { + // 否则引@NotNull注解 + importPackages.add(NotNull.class.getName()); + } + return key; + }).collect(Collectors.toList()); + updateTemplate.setKeys(keys); + + return updateTemplate; + } + + private QueryTemplate getQueryTemplate() { + + List targetColumns = dataEntity.getColumns().stream() + .filter(t -> t.getQueryConfig() != null) + .sorted(Comparator.comparing(t -> t.getQueryConfig().getOrderNo())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(targetColumns)) { + return null; + } + QueryTemplate queryTemplate = new QueryTemplate(); + queryTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + queryTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + queryTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + queryTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + queryTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + queryTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + + Set importPackages = new HashSet<>(); + importPackages.add(TypeMismatch.class.getName()); + importPackages.add(ApiModelProperty.class.getName()); + importPackages.add(StringPool.class.getName()); + importPackages.add(BaseBo.class.getName()); + List columns = new ArrayList<>(); + for (DataEntityColumn column : targetColumns) { + QueryTemplate.Column columnObj = new QueryTemplate.Column(); + if (column.getFixEnum()) { + // 如果是枚举类型 + columnObj.setDataType( + column.getEnumBack().substring(column.getEnumBack().lastIndexOf(".") + 1)); + columnObj.setFrontType(column.getEnumFront()); + columnObj.setFrontDataType("number"); + columnObj.setViewType(column.getViewType().getCode()); + importPackages.add(column.getEnumBack()); + importPackages.add(EnumUtil.class.getName()); + } else { + columnObj.setDataType(column.getDataType().getDesc()); + columnObj.setFrontDataType(column.getDataType().getFrontDesc()); + columnObj.setIsNumberType(GenDataType.isNumberType(column.getDataType())); + columnObj.setViewType(column.getViewType().getCode()); + columnObj.setHasAvailableTag( + column.getViewType() == GenViewType.SELECT + && column.getDataType() == GenDataType.BOOLEAN + && "available".equals(column.getColumnName())); + } + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + columnObj.setFixEnum(column.getFixEnum()); + if (columnObj.getFixEnum()) { + columnObj.setEnumCodeType(column.getDataType().getDesc()); + } + columnObj.setName(column.getColumnName()); + columnObj.setNameProperty( + column.getColumnName().substring(0, 1).toUpperCase() + column.getColumnName() + .substring(1)); + columnObj.setWidthType(column.getQueryConfig().getWidthType().getCode()); + columnObj.setWidth(column.getQueryConfig().getWidth()); + columnObj.setSortable(column.getQueryConfig().getSortable()); + columnObj.setDescription(column.getName()); + if (column.getViewType() == GenViewType.DATA_DIC) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dic = sysDataDicService.findById(column.getDataDicId()); + columnObj.setDataDicCode(dic.getCode()); + importPackages.add(SysDataDicItemService.class.getName()); + importPackages.add(StringUtil.class.getName()); + importPackages.add(ApplicationUtil.class.getName()); + importPackages.add(StringPool.class.getName()); + } + + columns.add(columnObj); + } + + queryTemplate.setColumns(columns); + queryTemplate.setHasFixEnum(columns.stream().anyMatch(QueryTemplate.Column::getFixEnum)); + + List keyColumns = dataEntity.getColumns().stream() + .filter(DataEntityColumn::getIsKey) + .collect(Collectors.toList()); + List keys = keyColumns.stream().map(t -> { + QueryTemplate.Key key = new QueryTemplate.Key(); + // 主键不会是枚举 + key.setDataType(t.getDataType().getDesc()); + key.setFrontDataType(t.getDataType().getFrontDesc()); + key.setName(t.getColumnName()); + key.setNameProperty( + t.getColumnName().substring(0, 1).toUpperCase() + t.getColumnName().substring(1)); + key.setDescription(t.getName()); + + return key; + }).collect(Collectors.toList()); + + queryTemplate.setKeys(keys); + + queryTemplate.setImportPackages(importPackages); + + return queryTemplate; + } + + private DetailTemplate getDetailTemplate() { + + List targetColumns = dataEntity.getColumns().stream() + .filter(t -> t.getDetailConfig() != null) + .sorted(Comparator.comparing(t -> t.getDetailConfig().getOrderNo())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(targetColumns)) { + return null; + } + DetailTemplate detailTemplate = new DetailTemplate(); + detailTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + detailTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + detailTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + detailTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + detailTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + detailTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + + Set importPackages = new HashSet<>(); + importPackages.add(TypeMismatch.class.getName()); + importPackages.add(ApiModelProperty.class.getName()); + importPackages.add(StringPool.class.getName()); + importPackages.add(BaseBo.class.getName()); + List columns = new ArrayList<>(); + for (DataEntityColumn column : targetColumns) { + DetailTemplate.Column columnObj = new DetailTemplate.Column(); + if (column.getFixEnum()) { + // 如果是枚举类型 + columnObj.setDataType( + column.getEnumBack().substring(column.getEnumBack().lastIndexOf(".") + 1)); + columnObj.setFrontType(column.getEnumFront()); + columnObj.setFrontDataType("number"); + importPackages.add(column.getEnumBack()); + importPackages.add(EnumUtil.class.getName()); + } else { + columnObj.setDataType(column.getDataType().getDesc()); + columnObj.setFrontDataType(column.getDataType().getFrontDesc()); + columnObj.setHasAvailableTag( + column.getViewType() == GenViewType.SELECT + && column.getDataType() == GenDataType.BOOLEAN + && "available".equals(column.getColumnName())); + if (columnObj.getHasAvailableTag()) { + detailTemplate.setHasAvailableTag(Boolean.TRUE); + } + } + // 以下类型需要单独引包 + if (column.getDataType() == GenDataType.LOCAL_DATE) { + importPackages.add(LocalDate.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_DATE_TIME) { + importPackages.add(LocalDateTime.class.getName()); + } else if (column.getDataType() == GenDataType.LOCAL_TIME) { + importPackages.add(LocalTime.class.getName()); + } else if (column.getDataType() == GenDataType.BIG_DECIMAL) { + importPackages.add(BigDecimal.class.getName()); + } + columnObj.setFixEnum(column.getFixEnum()); + if (columnObj.getFixEnum()) { + columnObj.setEnumCodeType(column.getDataType().getDesc()); + } + columnObj.setName(column.getColumnName()); + columnObj.setNameProperty( + column.getColumnName().substring(0, 1).toUpperCase() + column.getColumnName() + .substring(1)); + columnObj.setDescription(column.getName()); + columnObj.setSpan(column.getDetailConfig().getSpan()); + + if (column.getViewType() == GenViewType.DATA_DIC) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dic = sysDataDicService.findById(column.getDataDicId()); + columnObj.setDataDicCode(dic.getCode()); + importPackages.add(SysDataDicItemService.class.getName()); + importPackages.add(StringUtil.class.getName()); + importPackages.add(ApplicationUtil.class.getName()); + importPackages.add(StringPool.class.getName()); + } + + columns.add(columnObj); + } + + detailTemplate.setColumns(columns); + detailTemplate.setHasFixEnum(columns.stream().anyMatch(DetailTemplate.Column::getFixEnum)); + detailTemplate.setDetailSpan(dataEntity.getGenerateInfo().getDetailSpan()); + List keyColumns = dataEntity.getColumns().stream() + .filter(DataEntityColumn::getIsKey) + .collect(Collectors.toList()); + List keys = keyColumns.stream().map(t -> { + DetailTemplate.Key key = new DetailTemplate.Key(); + // 主键不会是枚举 + key.setDataType(t.getDataType().getDesc()); + key.setFrontDataType(t.getDataType().getFrontDesc()); + key.setName(t.getColumnName()); + key.setNameProperty( + t.getColumnName().substring(0, 1).toUpperCase() + t.getColumnName().substring(1)); + key.setDescription(t.getName()); + + return key; + }).collect(Collectors.toList()); + + detailTemplate.setKeys(keys); + + detailTemplate.setImportPackages(importPackages); + + return detailTemplate; + } + + private ControllerTemplate getControllerTemplate() { + + Set importPackages = new HashSet<>(); + ControllerTemplate controllerTemplate = new ControllerTemplate(); + controllerTemplate.setPackageName(dataEntity.getGenerateInfo().getPackageName()); + controllerTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + controllerTemplate.setClassNameProperty( + dataEntity.getGenerateInfo().getClassName().substring(0, 1).toLowerCase() + + dataEntity.getGenerateInfo() + .getClassName().substring(1)); + controllerTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + controllerTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + controllerTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + controllerTemplate.setAuthor(dataEntity.getGenerateInfo().getAuthor()); + controllerTemplate.setIsCache(dataEntity.getGenerateInfo().getIsCache()); + controllerTemplate.setHasDelete(dataEntity.getGenerateInfo().getHasDelete()); + if (controllerTemplate.getHasDelete()) { + importPackages.add(DeleteMapping.class.getName()); + } + importPackages.add(DefaultClientException.class.getName()); + importPackages.add(CollectionUtil.class.getName()); + importPackages.add(PageResult.class.getName()); + importPackages.add(PageResultUtil.class.getName()); + importPackages.add(InvokeResult.class.getName()); + importPackages.add(InvokeResultBuilder.class.getName()); + importPackages.add(Api.class.getName()); + importPackages.add(ApiOperation.class.getName()); + importPackages.add(ApiImplicitParam.class.getName()); + importPackages.add(ApiImplicitParams.class.getName()); + + List keyColumns = dataEntity.getColumns().stream() + .filter(DataEntityColumn::getIsKey) + .collect(Collectors.toList()); + List keys = keyColumns.stream().map(t -> { + ControllerTemplate.Key key = new ControllerTemplate.Key(); + // 主键不会是枚举 + key.setDataType(t.getDataType().getDesc()); + key.setName(t.getColumnName()); + key.setNameProperty(t.getColumnName().substring(0, 1).toUpperCase() + t.getColumnName() + .substring(1)); + + if (t.getDataType() == GenDataType.STRING) { + importPackages.add(NotBlank.class.getName()); + } else { + importPackages.add(NotNull.class.getName()); + } + + return key; + }).collect(Collectors.toList()); + + controllerTemplate.setKeys(keys); + controllerTemplate.setImportPackages(importPackages); + controllerTemplate.setCreate(this.getCreateTemplate()); + controllerTemplate.setUpdate(this.getUpdateTemplate()); + controllerTemplate.setQuery(this.getQueryTemplate()); + controllerTemplate.setQueryParams(this.getQueryParamsTemplate()); + controllerTemplate.setDetail(this.getDetailTemplate()); + if (controllerTemplate.getCreate() != null) { + importPackages.addAll(controllerTemplate.getCreate().getImportPackages()); + } + if (controllerTemplate.getUpdate() != null) { + importPackages.addAll(controllerTemplate.getUpdate().getImportPackages()); + } + if (controllerTemplate.getQuery() != null) { + importPackages.addAll(controllerTemplate.getQuery().getImportPackages()); + if (!controllerTemplate.getHasAvailableTag()) { + controllerTemplate.setHasAvailableTag(controllerTemplate.getQuery().getColumns().stream() + .anyMatch(QueryTemplate.Column::getHasAvailableTag)); + } + } + if (controllerTemplate.getQueryParams() != null) { + importPackages.addAll(controllerTemplate.getQueryParams().getImportPackages()); + if (!controllerTemplate.getHasAvailableTag()) { + controllerTemplate.setHasAvailableTag( + controllerTemplate.getQueryParams().getColumns().stream() + .anyMatch(QueryParamsTemplate.Column::getHasAvailableTag)); + } + } + if (controllerTemplate.getDetail() != null) { + importPackages.addAll(controllerTemplate.getDetail().getImportPackages()); + } + + return controllerTemplate; + } + + private SqlTemplate getSqlTemplate() { + + SqlTemplate sqlTemplate = new SqlTemplate(); + sqlTemplate.setModuleName(dataEntity.getGenerateInfo().getModuleName()); + sqlTemplate.setBizName(dataEntity.getGenerateInfo().getBizName()); + sqlTemplate.setClassName(dataEntity.getGenerateInfo().getClassName()); + sqlTemplate.setClassDescription(dataEntity.getGenerateInfo().getClassDescription()); + sqlTemplate.setParentMenuId(dataEntity.getGenerateInfo().getParentMenuId()); + sqlTemplate.setMenuId(dataEntity.getGenerateInfo().getId()); + sqlTemplate.setMenuCode(dataEntity.getGenerateInfo().getMenuCode()); + sqlTemplate.setMenuName(dataEntity.getGenerateInfo().getMenuName()); + sqlTemplate.setCreate(this.getCreateTemplate()); + sqlTemplate.setUpdate(this.getUpdateTemplate()); + + return sqlTemplate; + } + + /** + * 生成代码 + * + * @param templateName 模板名称 + * @param data 数据 + * @return + */ + private String generate(String templateName, Object data) { + + Template template = this.getTemplate(templateName); + Map root = JsonUtil.convert(data, Map.class); + StringWriter stringWriter = new StringWriter(); + BufferedWriter writer = new BufferedWriter(stringWriter); + + loadStaticClasses(root); + + try { + template.process(root, writer); + } catch (TemplateException | IOException e) { + log.error(e.getMessage(), e); + throw new DefaultSysException(e.getMessage()); + } + + return stringWriter.toString(); + } + + private GenerateDto buildGenerateResult(String path, String fileName, String content) { + + if (StringUtil.isBlank(content)) { + return null; + } + GenerateDto result = new GenerateDto(); + result.setPath(path); + result.setFileName(fileName); + result.setContent(content); + + return result; + } + + private void loadStaticClasses(Map root) { + + BeansWrapper wrapper = BeansWrapper.getDefaultInstance(); + + TemplateHashModel staticModels = wrapper.getStaticModels(); + + TemplateHashModel fileStatics = null; + try { + fileStatics = (TemplateHashModel) staticModels.get(IdUtil.class.getName()); + } catch (TemplateModelException e) { + log.error("加载静态类失败", e); + throw new DefaultSysException("加载静态类失败"); + } + + root.put(IdUtil.class.getSimpleName(), fileStatics); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ControllerTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ControllerTemplate.java new file mode 100644 index 0000000..5a545a8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ControllerTemplate.java @@ -0,0 +1,116 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 用于Controller.java、index.vue、api.js生成 + */ +@Data +public class ControllerTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 类名(首字母小写) + */ + private String classNameProperty; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 是否应用缓存 + */ + private Boolean isCache; + + /** + * 是否内置删除功能 + */ + private Boolean hasDelete; + + /** + * 是否包含状态Tag + */ + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 主键 + */ + private List keys; + + /** + * 需要import的包 + */ + private Set importPackages; + + /** + * 新增配置 + */ + private CreateTemplate create; + + /** + * 修改配置 + */ + private UpdateTemplate update; + + /** + * 查询配置 + */ + private QueryTemplate query; + + /** + * 查询参数配置 + */ + private QueryParamsTemplate queryParams; + + /** + * 详情配置 + */ + private DetailTemplate detail; + + @Data + public static class Key { + + /** + * 类型 + */ + private String dataType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/CreateTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/CreateTemplate.java new file mode 100644 index 0000000..4ffa5f8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/CreateTemplate.java @@ -0,0 +1,210 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 新增功能Template + */ +@Data +public class CreateTemplate { + + /** + * 是否指定ID 如果是自增ID就不需要指定ID + */ + private Boolean appointId; + + /** + * 指定ID的代码 当appointId == true时生效 + */ + private String idCode; + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 字段 + */ + private List columns; + + /** + * 需要import的包 + */ + private Set importPackages; + + /** + * 主键 + */ + private List keys; + + @Data + public static class Key { + + /** + * 字段类型 + */ + private String dataType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段名 + */ + private String columnName; + + /** + * 字段备注 + */ + private String description; + } + + @Data + public static class Column { + + /** + * 是否主键 + */ + private Boolean isKey; + + /** + * 是否必填 + */ + private Boolean required; + + /** + * 验证注解 + */ + private String validateAnno; + + /** + * 验证信息 当required == true时生效 + */ + private String validateMsg; + + /** + * 是否内置枚举 + */ + private Boolean fixEnum; + + /** + * 枚举的Code的类型 当fixEnum == true时生效 + */ + private String enumCodeType; + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + private String frontType; + + /** + * 显示类型 + */ + private Integer viewType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段名 + */ + private String columnName; + + /** + * 正则表达式 + */ + private String regularExpression; + + /** + * 字段备注 + */ + private String description; + + /** + * 是否包含状态Tag + */ + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 是否数字类型 + */ + private Boolean isNumberType = Boolean.FALSE; + + /** + * 是否小数类型 + */ + private Boolean isDecimalType = Boolean.FALSE; + + /** + * 数据字典编号 + */ + private String dataDicCode; + + /** + * 自定义选择器ID + */ + private String customSelectorId; + + /** + * 长度 + */ + private Long len; + + /** + * 小数点位数 + */ + private Integer decimals; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/DetailTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/DetailTemplate.java new file mode 100644 index 0000000..1947c9a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/DetailTemplate.java @@ -0,0 +1,160 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 详情功能Template + */ +@Data +public class DetailTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 是否包含状态Tag + */ + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 字段 + */ + private List columns; + + /** + * 主键 + */ + private List keys; + + /** + * 是否存在内置枚举 + */ + private Boolean hasFixEnum; + + /** + * 详情页Span总数量 + */ + private Integer detailSpan; + + /** + * 需要import的包 + */ + private Set importPackages; + + @Data + public static class Key { + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段备注 + */ + private String description; + } + + @Data + public static class Column { + + /** + * 是否内置枚举 + */ + private Boolean fixEnum; + + /** + * 枚举的Code的类型 当fixEnum == true时生效 + */ + private String enumCodeType; + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + private String frontType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段备注 + */ + private String description; + + /** + * 列宽 + */ + private Integer span; + + /** + * 是否包含状态Tag + */ + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 数据字典Code + */ + private String dataDicCode; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/EntityTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/EntityTemplate.java new file mode 100644 index 0000000..265caa7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/EntityTemplate.java @@ -0,0 +1,112 @@ +package com.lframework.starter.web.gen.components.generate.templates; + + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 实体类Template + */ +@Data +public class EntityTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 库表名 + */ + private String tableName; + + /** + * 类名 + */ + private String className; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 列信息 + */ + private List columns; + + /** + * 需要import的包 + */ + private Set importPackages; + + @Data + public static class Column { + + /** + * 是否主键 + */ + private Boolean isKey; + + /** + * 是否自增主键 + */ + private Boolean autoIncrKey; + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + private String frontType; + + /** + * 字段名称 + */ + private String name; + + /** + * 是否默认字段名转换方式(下划线转驼峰) + */ + private Boolean defaultConvertType; + + /** + * 数据库字段名称 + */ + private String columnName; + + /** + * 字段备注 + */ + private String description; + + /** + * 是否填充字段 isKey == false时生效 + */ + private Boolean fill; + + /** + * 填充策略 + */ + private String fillStrategy; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/MapperTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/MapperTemplate.java new file mode 100644 index 0000000..3d4d368 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/MapperTemplate.java @@ -0,0 +1,100 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 用于生成Mapper.java、Mapper.xml + */ +@Data +public class MapperTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 主键 + */ + private List keys; + + /** + * 排序字段 + */ + private List orderColumns; + + /** + * 实体类配置 + */ + private EntityTemplate entity; + + /** + * 需要import的包 + */ + private Set importPackages; + + /** + * 查询参数配置 + */ + private QueryParamsTemplate queryParams; + + @Data + public static class Key { + + /** + * 类型 + */ + private String dataType; + + /** + * 字段名称 + */ + private String name; + + /** + * 数据表列名 + */ + private String columnName; + } + + @Data + public static class OrderColumn { + + /** + * 数据表列名 + */ + private String columnName; + + /** + * 排序类型 + */ + private String orderType; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryParamsTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryParamsTemplate.java new file mode 100644 index 0000000..f82e8a6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryParamsTemplate.java @@ -0,0 +1,131 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 查询参数Template + */ +@Data +public class QueryParamsTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 字段 + */ + private List columns; + + /** + * 需要import的包 + */ + private Set importPackages; + + @Data + public static class Column { + + /** + * 是否内置枚举 + */ + private Boolean fixEnum; + + /** + * 正则表达式 + */ + private String regularExpression; + + /** + * 枚举的Code的类型 当fixEnum == true时生效 + */ + private String enumCodeType; + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + private String frontType; + + /** + * 显示类型 + */ + private Integer viewType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段名 + */ + private String columnName; + + /** + * 查询类型 + */ + private Integer queryType; + + /** + * 字段备注 + */ + private String description; + + /** + * 是否包含状态Tag + */ + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 数据字典Code + */ + private String dataDicCode; + + /** + * 自定义选择器ID + */ + private String customSelectorId; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryTemplate.java new file mode 100644 index 0000000..0fc4aae --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/QueryTemplate.java @@ -0,0 +1,170 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 查询功能Template + */ +@Data +public class QueryTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 字段 + */ + private List columns; + + /** + * 主键 + */ + private List keys; + + /** + * 是否存在内置枚举 + */ + private Boolean hasFixEnum; + + /** + * 需要import的包 + */ + private Set importPackages; + + @Data + public static class Key { + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段备注 + */ + private String description; + } + + @Data + public static class Column { + + /** + * 是否内置枚举 + */ + private Boolean fixEnum; + + /** + * 枚举的Code的类型 当fixEnum == true时生效 + */ + private String enumCodeType; + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + private String frontType; + + /** + * 是否数字类型 + */ + private Boolean isNumberType = Boolean.FALSE; + + /** + * 显示类型 + */ + private Integer viewType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 宽度类型 + */ + private Integer widthType; + + /** + * 宽度 + */ + private Integer width; + + /** + * 是否页面排序 + */ + private Boolean sortable; + + /** + * 字段备注 + */ + private String description; + + /** + * 是否包含状态Tag + */ + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 数据字典Code + */ + private String dataDicCode; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ServiceTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ServiceTemplate.java new file mode 100644 index 0000000..867ae17 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/ServiceTemplate.java @@ -0,0 +1,106 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 用于Service.java、ServiceImpl.java生成 + */ +@Data +public class ServiceTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 类名(首字母小写) + */ + private String classNameProperty; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 是否应用缓存 + */ + private Boolean isCache; + + /** + * 是否内置删除功能 + */ + private Boolean hasDelete; + + /** + * 需要import的包 + */ + private Set importPackages; + + /** + * 主键 + */ + private List keys; + + /** + * 查询参数配置 + */ + private QueryParamsTemplate queryParams; + + /** + * 新增配置 + */ + private CreateTemplate create; + + /** + * 修改配置 + */ + private UpdateTemplate update; + + @Data + public static class Key { + + /** + * 类型 + */ + private String dataType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 数据表列名 + */ + private String columnName; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/SqlTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/SqlTemplate.java new file mode 100644 index 0000000..cecca85 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/SqlTemplate.java @@ -0,0 +1,60 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import lombok.Data; + +/** + * 用于生成Sql + */ +@Data +public class SqlTemplate { + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类名 + */ + private String className; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 父级菜单ID + */ + private String parentMenuId; + + /** + * 菜单ID + */ + private String menuId; + + /** + * 本级菜单编号 + */ + private String menuCode; + + /** + * 本级菜单名称 + */ + private String menuName; + + /** + * 新增配置 + */ + private CreateTemplate create; + + /** + * 修改配置 + */ + private UpdateTemplate update; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/UpdateTemplate.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/UpdateTemplate.java new file mode 100644 index 0000000..6ad1553 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/generate/templates/UpdateTemplate.java @@ -0,0 +1,205 @@ +package com.lframework.starter.web.gen.components.generate.templates; + +import java.util.List; +import java.util.Set; +import lombok.Data; + +/** + * 修改功能Template + */ +@Data +public class UpdateTemplate { + + /** + * 包名 + */ + private String packageName; + + /** + * 类名 + */ + private String className; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 业务名称 + */ + private String bizName; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 作者 + */ + private String author; + + /** + * 字段 + */ + private List columns; + + /** + * 需要import的包 + */ + private Set importPackages; + + /** + * 主键 + */ + private List keys; + + @Data + public static class Key { + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段名 + */ + private String columnName; + + /** + * 字段备注 + */ + private String description; + } + + @Data + public static class Column { + + /** + * 是否主键 + */ + private Boolean isKey; + + /** + * 是否必填 + */ + private Boolean required; + + /** + * 验证注解 + */ + private String validateAnno; + + /** + * 验证信息 当required == true时生效 + */ + private String validateMsg; + + /** + * 是否内置枚举 + */ + private Boolean fixEnum; + + /** + * 枚举的Code的类型 当fixEnum == true时生效 + */ + private String enumCodeType; + + /** + * 字段类型 + */ + private String dataType; + + /** + * 前端字段类型 + */ + private String frontDataType; + + /** + * 前端字段类型 只有字段是枚举时生效,此值为前端枚举类型 + */ + private String frontType; + + /** + * 显示类型 + */ + private Integer viewType; + + /** + * 字段名称 + */ + private String name; + + /** + * 字段名称(首字母大写) + */ + private String nameProperty; + + /** + * 字段名 + */ + private String columnName; + + /** + * 正则表达式 + */ + private String regularExpression; + + /** + * 字段备注 + */ + private String description; + + /** + * 是否包含状态Tag + */ + private Boolean hasAvailableTag = Boolean.FALSE; + + /** + * 是否数字类型 + */ + private Boolean isNumberType = Boolean.FALSE; + + /** + * 是否小数类型 + */ + private Boolean isDecimalType = Boolean.FALSE; + + /** + * 数据字典编号 + */ + private String dataDicCode; + + /** + * 自定义选择器ID + */ + private String customSelectorId; + + /** + * 长度 + */ + private Long len; + + /** + * 小数点位数 + */ + private Integer decimals; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomAuthorizationInterceptor.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomAuthorizationInterceptor.java new file mode 100644 index 0000000..563320d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomAuthorizationInterceptor.java @@ -0,0 +1,62 @@ +package com.lframework.starter.web.gen.components.magic; + +import com.lframework.starter.common.utils.ArrayUtil; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.components.security.CheckPermissionHandler; +import com.lframework.starter.web.core.components.security.PermissionCalcType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.core.context.MagicUser; +import org.ssssssss.magicapi.core.exception.MagicLoginException; +import org.ssssssss.magicapi.core.interceptor.Authorization; +import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor; +import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest; + +/** + * 自定义用户名密码登录 + */ +@Component //注入到Spring容器中 +public class MagicCustomAuthorizationInterceptor implements AuthorizationInterceptor { + + @Autowired + private CheckPermissionHandler checkPermissionHandler; + + /** + * 配置是否需要登录 + */ + @Override + public boolean requireLogin() { + return false; + } + + /** + * 根据Token获取User + */ + @Override + public MagicUser getUserByToken(String token) throws MagicLoginException { + AbstractUserDetails currentUser = SecurityUtil.getUserByToken(token); + if (currentUser == null) { + throw new MagicLoginException("请重新登录!"); + } + + return new MagicUser(currentUser.getId(), currentUser.getName(), token); + } + + @Override + public MagicUser login(String username, String password) throws MagicLoginException { + throw new MagicLoginException("不支持手动登录,请先登录主系统!"); + } + + @Override + public boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, + Authorization authorization) { + + String[] profiles = ApplicationUtil.getEnv().getActiveProfiles(); + if (ArrayUtil.isNotEmpty(profiles) && ArrayUtil.contains(profiles, "demo")) { + return authorization == Authorization.VIEW; + } + return checkPermissionHandler.valid(PermissionCalcType.OR, "system:online-code:config"); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomJsonValueProvider.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomJsonValueProvider.java new file mode 100644 index 0000000..64a307f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomJsonValueProvider.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.components.magic; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import java.util.List; +import java.util.Map; +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.core.context.RequestEntity; +import org.ssssssss.magicapi.core.interceptor.ResultProvider; +import org.ssssssss.magicapi.modules.db.model.Page; + +@Component +public class MagicCustomJsonValueProvider implements ResultProvider { + + /** + * 定义返回结果,默认返回JsonBean + */ + @Override + public Object buildResult(RequestEntity requestEntity, int code, String message, Object data) { + if (code >= 200 && code <= 299) { + return InvokeResultBuilder.success(data); + } else { + throw new DefaultClientException(message); + } + } + + /** + * 定义分页返回结果,该项会被封装在Json结果内, 此方法可以不覆盖,默认返回PageResult + */ + @Override + public Object buildPageResult(RequestEntity requestEntity, Page page, long total, + List> data) { + + return PageResultUtil.newInstance(page.getOffset() / page.getLimit() + 1, page.getLimit(), + total, data); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomMagicFunction.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomMagicFunction.java new file mode 100644 index 0000000..c975ebf --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomMagicFunction.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.components.magic; + +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.core.config.MagicFunction; +import org.ssssssss.script.annotation.Comment; +import org.ssssssss.script.annotation.Function; + +@Component +public class MagicCustomMagicFunction implements MagicFunction { + + @Function + @Comment("获取登录人ID") + public static AbstractUserDetails current_user() { + AbstractUserDetails user = SecurityUtil.getCurrentUser(); + return user; + } + + @Function + @Comment("获取租户ID") + public static String current_tenant_id() { + return TenantContextHolder.getTenantId() == null ? null + : TenantContextHolder.getTenantId().toString(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomSqlCache.java b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomSqlCache.java new file mode 100644 index 0000000..dc17499 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/components/magic/MagicCustomSqlCache.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.gen.components.magic; + +import com.lframework.starter.web.core.components.redis.RedisHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.modules.db.cache.SqlCache; + +@Component +public class MagicCustomSqlCache implements SqlCache { + + @Autowired + private RedisHandler redisHandler; + + @Override + public void put(String name, String key, Object value) { + redisHandler.hset(name, key, value); + } + + @Override + public void put(String name, String key, Object value, long ttl) { + redisHandler.hset(name, key, value, ttl); + } + + @Override + public T get(String name, String key) { + return (T) redisHandler.hget(name, key); + } + + @Override + public void delete(String name) { + redisHandler.hdel(name); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenController.java new file mode 100644 index 0000000..fe573d2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenController.java @@ -0,0 +1,174 @@ +package com.lframework.starter.web.gen.controller; + +import cn.hutool.core.convert.Convert; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.gen.builders.CustomListBuilder; +import com.lframework.starter.web.gen.builders.CustomPageBuilder; +import com.lframework.starter.web.gen.builders.CustomSelectorBuilder; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig; +import com.lframework.starter.web.gen.components.custom.page.CustomPageConfig; +import com.lframework.starter.web.gen.components.custom.selector.CustomSelectorConfig; +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryObj; +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryParamObj; +import com.lframework.starter.web.gen.mappers.GenMapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 提供低代码相关功能所需的接口 + */ +@Slf4j +@Api(tags = "低代码接口") +@Validated +@RestController +@RequestMapping("/gen/api") +public class GenController extends DefaultBaseController { + + @Autowired + private CustomListBuilder customListBuilder; + + @Autowired + private CustomSelectorBuilder customSelectorBuilder; + + @Autowired + private GenMapper genMapper; + + @Autowired + private CustomPageBuilder customPageBuilder; + + @ApiOperation("自定义列表配置") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/custom/list/config") + public InvokeResult getCustomListConfig( + @NotBlank(message = "ID不能为空!") String id) { + + CustomListConfig config = customListBuilder.buildConfig(id); + + return InvokeResultBuilder.success(config); + } + + @ApiOperation("查询自定义列表数据(分页)") + @PostMapping("/custom/list/query") + public InvokeResult>> customListQueryPage( + @NotBlank(message = "ID不能为空!") String id, + @RequestBody DataObjectQueryParamObj vo) { + + DataObjectQueryObj queryObj = customListBuilder.buildQueryObj(id, vo); + + PageHelperUtil.startPage(vo); + List> datas = genMapper.findList(queryObj); + PageResult> pageResult = PageResultUtil.convert(new PageInfo<>(datas)); + + for (DataObjectQueryObj.QueryField field : queryObj.getFields()) { + for (Map data : datas) { + Object oriValue = data.get(field.getColumnAlias()); + Object newValue = Convert.convert(field.getDataType().getClazz(), + data.get(field.getColumnAlias())); + data.put(field.getColumnAlias(), newValue == null ? oriValue : newValue); + } + } + + return InvokeResultBuilder.success(pageResult); + } + + @ApiOperation("查询自定义列表数据(不分页)") + @PostMapping("/custom/list/query/list") + public InvokeResult>> customListQueryList( + @NotBlank(message = "ID不能为空!") String id, + @RequestBody DataObjectQueryParamObj vo) { + + DataObjectQueryObj queryObj = customListBuilder.buildQueryObj(id, vo); + + List> datas = genMapper.findList(queryObj); + + for (DataObjectQueryObj.QueryField field : queryObj.getFields()) { + for (Map data : datas) { + Object oriValue = data.get(field.getColumnAlias()); + Object newValue = Convert.convert(field.getDataType().getClazz(), + data.get(field.getColumnAlias())); + data.put(field.getColumnAlias(), newValue == null ? oriValue : newValue); + } + } + + return InvokeResultBuilder.success(datas); + } + + @ApiOperation("查询自定义列表数据(树形)") + @PostMapping("/custom/list/query/tree") + public InvokeResult>> customListQueryTree( + @NotBlank(message = "ID不能为空!") String id, + @RequestBody DataObjectQueryParamObj vo) { + + // 查询全量数据 + DataObjectQueryObj queryObj = customListBuilder.buildQueryObj(id, null); + + List> datas = genMapper.findList(queryObj); + + for (DataObjectQueryObj.QueryField field : queryObj.getFields()) { + for (Map data : datas) { + Object oriValue = data.get(field.getColumnAlias()); + Object newValue = Convert.convert(field.getDataType().getClazz(), + data.get(field.getColumnAlias())); + data.put(field.getColumnAlias(), newValue == null ? oriValue : newValue); + } + } + + if (CollectionUtil.isEmpty(datas)) { + return InvokeResultBuilder.success(datas); + } + + DataObjectQueryObj filterQueryObj = customListBuilder.buildQueryObj(id, vo); + List> filterDatas = genMapper.findList(filterQueryObj); + + CustomListConfig config = customListBuilder.buildConfig(id); + String idColumn = config.getListConfig().getIdColumn(); + List ids = filterDatas.stream().map(t -> String.valueOf(t.get(idColumn))).collect( + Collectors.toList()); + datas.stream().filter(t -> ids.contains(String.valueOf(t.get(idColumn)))) + .forEach(t -> t.put("id@show", true)); + + return InvokeResultBuilder.success(datas); + } + + @ApiOperation("自定义选择器配置") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/custom/selector/config") + public InvokeResult getCustomSelectorConfig( + @NotBlank(message = "ID不能为空!") String id) { + + CustomSelectorConfig config = customSelectorBuilder.buildConfig(id); + + return InvokeResultBuilder.success(config); + } + + @ApiOperation("获取自定义页面配置") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/custom/page/config") + public InvokeResult get(@NotNull(message = "ID不能为空!") Integer id) { + + CustomPageConfig config = customPageBuilder.buildConfig(id); + + return InvokeResultBuilder.success(config); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListCategoryController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListCategoryController.java new file mode 100644 index 0000000..ff12586 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListCategoryController.java @@ -0,0 +1,116 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.gen.service.GenCustomListCategoryService; +import com.lframework.starter.web.gen.vo.custom.list.category.CreateGenCustomListCategoryVo; +import com.lframework.starter.web.gen.vo.custom.list.category.UpdateGenCustomListCategoryVo; +import com.lframework.starter.web.gen.bo.custom.list.category.GetGenCustomListCategoryBo; +import com.lframework.starter.web.gen.bo.custom.list.category.QueryGenCustomListCategoryBo; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 自定义列表分类 + * + * @author zmj + */ +@Api(tags = "自定义列表分类") +@Validated +@RestController +@RequestMapping("/gen/custom/list/category") +public class GenCustomListCategoryController extends DefaultBaseController { + + @Autowired + private GenCustomListCategoryService genCustomListCategoryService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query() { + List datas = genCustomListCategoryService.queryList(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryGenCustomListCategoryBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + GenCustomListCategory data = genCustomListCategoryService.findById(id); + if (data == null) { + throw new DefaultClientException("自定义列表分类不存在!"); + } + + GetGenCustomListCategoryBo result = new GetGenCustomListCategoryBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增自定义列表分类 + */ + @ApiOperation("新增自定义列表分类") + @PostMapping + public InvokeResult create(@Valid CreateGenCustomListCategoryVo vo) { + + genCustomListCategoryService.create(vo); + + genCustomListCategoryService.cleanCacheByKey("all"); + + return InvokeResultBuilder.success(); + } + + /** + * 修改自定义列表分类 + */ + @ApiOperation("修改自定义列表分类") + @PutMapping + public InvokeResult update(@Valid UpdateGenCustomListCategoryVo vo) { + + genCustomListCategoryService.update(vo); + + genCustomListCategoryService.cleanCacheByKeys(Arrays.asList("all", vo.getId())); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("删除自定义列表分类") + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genCustomListCategoryService.deleteById(id); + + genCustomListCategoryService.cleanCacheByKeys(Arrays.asList("all", id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListController.java new file mode 100644 index 0000000..464eabd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomListController.java @@ -0,0 +1,128 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.vo.custom.list.CreateGenCustomListVo; +import com.lframework.starter.web.gen.vo.custom.list.QueryGenCustomListVo; +import com.lframework.starter.web.gen.vo.custom.list.UpdateGenCustomListVo; +import com.lframework.starter.web.gen.bo.custom.list.GetGenCustomListBo; +import com.lframework.starter.web.gen.bo.custom.list.QueryGenCustomListBo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "自定义列表") +@Slf4j +@Validated +@RestController +@RequestMapping("/gen/custom/list") +public class GenCustomListController extends DefaultBaseController { + + @Autowired + private GenCustomListService genCustomListService; + + @ApiOperation("查询自定义列表") + @GetMapping("/query") + public InvokeResult> query(@Valid QueryGenCustomListVo vo) { + + PageResult pageResult = genCustomListService.query(getPageIndex(vo), + getPageSize(vo), + vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(QueryGenCustomListBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + GenCustomList data = genCustomListService.findById(id); + + return InvokeResultBuilder.success(new GetGenCustomListBo(data)); + } + + @ApiOperation("新增") + @PostMapping + public InvokeResult create(@RequestBody @Valid CreateGenCustomListVo vo) { + + genCustomListService.create(vo); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("修改") + @PutMapping + public InvokeResult update(@RequestBody @Valid UpdateGenCustomListVo vo) { + + genCustomListService.update(vo); + + genCustomListService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genCustomListService.delete(id); + + genCustomListService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("启用") + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genCustomListService.enable(id); + + genCustomListService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("停用") + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genCustomListService.unable(id); + + genCustomListService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageCategoryController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageCategoryController.java new file mode 100644 index 0000000..93d38f7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageCategoryController.java @@ -0,0 +1,118 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.bo.custom.page.category.GetGenCustomPageCategoryBo; +import com.lframework.starter.web.gen.bo.custom.page.category.QueryGenCustomPageCategoryBo; +import com.lframework.starter.web.gen.service.GenCustomPageCategoryService; +import com.lframework.starter.web.gen.vo.custom.page.category.CreateGenCustomPageCategoryVo; +import com.lframework.starter.web.gen.vo.custom.page.category.UpdateGenCustomPageCategoryVo; +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 自定义页面分类 + * + * @author zmj + */ +@Api(tags = "自定义页面分类") +@Validated +@RestController +@RequestMapping("/gen/custom/page/category") +public class GenCustomPageCategoryController extends DefaultBaseController { + + @Autowired + private GenCustomPageCategoryService genCustomPageCategoryService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query() { + List datas = genCustomPageCategoryService.queryList(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryGenCustomPageCategoryBo::new) + .collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get( + @NotBlank(message = "ID不能为空!") String id) { + + GenCustomPageCategory data = genCustomPageCategoryService.findById(id); + if (data == null) { + throw new DefaultClientException("自定义页面分类不存在!"); + } + + GetGenCustomPageCategoryBo result = new GetGenCustomPageCategoryBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增自定义页面分类 + */ + @ApiOperation("新增自定义页面分类") + @PostMapping + public InvokeResult create(@Valid CreateGenCustomPageCategoryVo vo) { + + genCustomPageCategoryService.create(vo); + + genCustomPageCategoryService.cleanCacheByKey("all"); + + return InvokeResultBuilder.success(); + } + + /** + * 修改自定义页面分类 + */ + @ApiOperation("修改自定义页面分类") + @PutMapping + public InvokeResult update(@Valid UpdateGenCustomPageCategoryVo vo) { + + genCustomPageCategoryService.update(vo); + + genCustomPageCategoryService.cleanCacheByKeys(Arrays.asList("all", vo.getId())); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("删除自定义页面分类") + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genCustomPageCategoryService.deleteById(id); + + genCustomPageCategoryService.cleanCacheByKeys(Arrays.asList("all", id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageController.java new file mode 100644 index 0000000..3f7f82d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomPageController.java @@ -0,0 +1,100 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.gen.bo.custom.page.GetGenCustomPageBo; +import com.lframework.starter.web.gen.bo.custom.page.QueryGenCustomPageBo; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.service.GenCustomPageService; +import com.lframework.starter.web.gen.vo.custom.page.CreateGenCustomPageVo; +import com.lframework.starter.web.gen.vo.custom.page.QueryGenCustomPageVo; +import com.lframework.starter.web.gen.vo.custom.page.UpdateGenCustomPageVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "自定义页面") +@Slf4j +@Validated +@RestController +@RequestMapping("/gen/custom/page") +public class GenCustomPageController extends DefaultBaseController { + + @Autowired + private GenCustomPageService genCustomPageService; + + @ApiOperation("查询自定义页面") + @GetMapping("/query") + public InvokeResult> query(@Valid QueryGenCustomPageVo vo) { + + PageResult pageResult = genCustomPageService.query(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(QueryGenCustomPageBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult getConfig(@NotNull(message = "ID不能为空!") Integer id) { + + GenCustomPage data = genCustomPageService.findById(id); + + return InvokeResultBuilder.success(new GetGenCustomPageBo(data)); + } + + @ApiOperation("新增") + @PostMapping + public InvokeResult create(@RequestBody @Valid CreateGenCustomPageVo vo) { + + genCustomPageService.create(vo); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("修改") + @PutMapping + public InvokeResult update(@RequestBody @Valid UpdateGenCustomPageVo vo) { + + genCustomPageService.update(vo); + + genCustomPageService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @DeleteMapping + public InvokeResult delete(@NotNull(message = "ID不能为空!") Integer id) { + + genCustomPageService.delete(id); + + genCustomPageService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorCategoryController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorCategoryController.java new file mode 100644 index 0000000..869b2ae --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorCategoryController.java @@ -0,0 +1,118 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.service.GenCustomSelectorCategoryService; +import com.lframework.starter.web.gen.vo.custom.selector.category.CreateGenCustomSelectorCategoryVo; +import com.lframework.starter.web.gen.vo.custom.selector.category.UpdateGenCustomSelectorCategoryVo; +import com.lframework.starter.web.gen.bo.custom.selector.category.GetGenCustomSelectorCategoryBo; +import com.lframework.starter.web.gen.bo.custom.selector.category.QueryGenCustomSelectorCategoryBo; +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 自定义选择器分类 + * + * @author zmj + */ +@Api(tags = "自定义选择器分类") +@Validated +@RestController +@RequestMapping("/gen/custom/selector/category") +public class GenCustomSelectorCategoryController extends DefaultBaseController { + + @Autowired + private GenCustomSelectorCategoryService genCustomSelectorCategoryService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query() { + List datas = genCustomSelectorCategoryService.queryList(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryGenCustomSelectorCategoryBo::new) + .collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get( + @NotBlank(message = "ID不能为空!") String id) { + + GenCustomSelectorCategory data = genCustomSelectorCategoryService.findById(id); + if (data == null) { + throw new DefaultClientException("自定义选择器分类不存在!"); + } + + GetGenCustomSelectorCategoryBo result = new GetGenCustomSelectorCategoryBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增自定义选择器分类 + */ + @ApiOperation("新增自定义选择器分类") + @PostMapping + public InvokeResult create(@Valid CreateGenCustomSelectorCategoryVo vo) { + + genCustomSelectorCategoryService.create(vo); + + genCustomSelectorCategoryService.cleanCacheByKey("all"); + + return InvokeResultBuilder.success(); + } + + /** + * 修改自定义选择器分类 + */ + @ApiOperation("修改自定义选择器分类") + @PutMapping + public InvokeResult update(@Valid UpdateGenCustomSelectorCategoryVo vo) { + + genCustomSelectorCategoryService.update(vo); + + genCustomSelectorCategoryService.cleanCacheByKeys(Arrays.asList("all", vo.getId())); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("删除自定义选择器分类") + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genCustomSelectorCategoryService.deleteById(id); + + genCustomSelectorCategoryService.cleanCacheByKeys(Arrays.asList("all", id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorController.java new file mode 100644 index 0000000..154b658 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenCustomSelectorController.java @@ -0,0 +1,129 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.gen.vo.custom.selector.CreateGenCustomSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.QueryGenCustomSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.UpdateGenCustomSelectorVo; +import com.lframework.starter.web.gen.bo.custom.selector.GetGenCustomSelectorBo; +import com.lframework.starter.web.gen.bo.custom.selector.QueryGenCustomSelectorBo; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "自定义选择器") +@Slf4j +@Validated +@RestController +@RequestMapping("/gen/custom/selector") +public class GenCustomSelectorController extends DefaultBaseController { + + @Autowired + private GenCustomSelectorService genCustomSelectorService; + + @ApiOperation("查询自定义选择器") + @GetMapping("/query") + public InvokeResult> query( + @Valid QueryGenCustomSelectorVo vo) { + + PageResult pageResult = genCustomSelectorService.query(getPageIndex(vo), + getPageSize(vo), + vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(QueryGenCustomSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + GenCustomSelector data = genCustomSelectorService.findById(id); + + return InvokeResultBuilder.success(new GetGenCustomSelectorBo(data)); + } + + @ApiOperation("新增") + @PostMapping + public InvokeResult create(@RequestBody @Valid CreateGenCustomSelectorVo vo) { + + genCustomSelectorService.create(vo); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("修改") + @PutMapping + public InvokeResult update(@RequestBody @Valid UpdateGenCustomSelectorVo vo) { + + genCustomSelectorService.update(vo); + + genCustomSelectorService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genCustomSelectorService.delete(id); + + genCustomSelectorService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("启用") + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genCustomSelectorService.enable(id); + + genCustomSelectorService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("停用") + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genCustomSelectorService.unable(id); + + genCustomSelectorService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityCategoryController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityCategoryController.java new file mode 100644 index 0000000..4115a92 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityCategoryController.java @@ -0,0 +1,116 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.service.GenDataEntityCategoryService; +import com.lframework.starter.web.gen.vo.data.entity.category.CreateGenDataEntityCategoryVo; +import com.lframework.starter.web.gen.vo.data.entity.category.UpdateGenDataEntityCategoryVo; +import com.lframework.starter.web.gen.bo.data.entity.category.GetGenDataEntityCategoryBo; +import com.lframework.starter.web.gen.bo.data.entity.category.QueryGenDataEntityCategoryBo; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据实体分类 + * + * @author zmj + */ +@Api(tags = "数据实体分类") +@Validated +@RestController +@RequestMapping("/gen/data/entity/category") +public class GenDataEntityCategoryController extends DefaultBaseController { + + @Autowired + private GenDataEntityCategoryService genDataEntityCategoryService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query() { + List datas = genDataEntityCategoryService.queryList(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryGenDataEntityCategoryBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + GenDataEntityCategory data = genDataEntityCategoryService.findById(id); + if (data == null) { + throw new DefaultClientException("数据实体分类不存在!"); + } + + GetGenDataEntityCategoryBo result = new GetGenDataEntityCategoryBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增数据实体分类 + */ + @ApiOperation("新增数据实体分类") + @PostMapping + public InvokeResult create(@Valid CreateGenDataEntityCategoryVo vo) { + + genDataEntityCategoryService.create(vo); + + genDataEntityCategoryService.cleanCacheByKey("all"); + + return InvokeResultBuilder.success(); + } + + /** + * 修改数据实体分类 + */ + @ApiOperation("修改数据实体分类") + @PutMapping + public InvokeResult update(@Valid UpdateGenDataEntityCategoryVo vo) { + + genDataEntityCategoryService.update(vo); + + genDataEntityCategoryService.cleanCacheByKeys(Arrays.asList("all", vo.getId())); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("删除数据实体分类") + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genDataEntityCategoryService.deleteById(id); + + genDataEntityCategoryService.cleanCacheByKeys(Arrays.asList("all", id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityController.java new file mode 100644 index 0000000..53c5cc2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataEntityController.java @@ -0,0 +1,289 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.FileUtil; +import com.lframework.starter.common.utils.ThreadUtil; +import com.lframework.starter.common.utils.ZipUtil; +import com.lframework.starter.web.gen.converters.GenStringConverter; +import com.lframework.starter.web.gen.converters.GenViewTypeConverter; +import com.lframework.starter.web.gen.dto.data.entity.DataEntityGenerateDto; +import com.lframework.starter.web.gen.dto.generate.GenerateDto; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.components.generate.Generator; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import com.lframework.starter.web.gen.service.SimpleTableColumnService; +import com.lframework.starter.web.gen.vo.data.entity.CreateDataEntityVo; +import com.lframework.starter.web.gen.vo.data.entity.QueryDataEntityVo; +import com.lframework.starter.web.gen.vo.data.entity.UpdateDataEntityGenerateVo; +import com.lframework.starter.web.gen.vo.data.entity.UpdateDataEntityVo; +import com.lframework.starter.web.gen.vo.simpledb.QuerySimpleTableColumnVo; +import com.lframework.starter.web.gen.bo.data.entity.DataEntityGenerateBo; +import com.lframework.starter.web.gen.bo.data.entity.GenDataEntityDetailBo; +import com.lframework.starter.web.gen.bo.data.entity.GetDataEntityBo; +import com.lframework.starter.web.gen.bo.data.entity.QueryDataEntityBo; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.gen.enums.GenConvertType; +import com.lframework.starter.web.gen.enums.GenViewType; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.ResponseUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "数据实体") +@Slf4j +@Validated +@RestController +@RequestMapping("/gen/data/entity") +public class GenDataEntityController extends DefaultBaseController { + + @Autowired + private GenDataEntityService genDataEntityService; + + @Autowired + private SimpleTableColumnService simpleTableColumnService; + + @Autowired + private GenViewTypeConverter genViewTypeConverter; + + /** + * 上传文件的临时文件目录 + */ + @Value("${spring.servlet.multipart.location}") + private String location; + + @ApiOperation("查询数据对象列表") + @GetMapping("/query") + public InvokeResult> query(@Valid QueryDataEntityVo vo) { + + PageResult pageResult = genDataEntityService.query(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(QueryDataEntityBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("查询列信息") + @GetMapping("/query/columns") + public InvokeResult> getColumns(@Valid QuerySimpleTableColumnVo vo) { + List datas = simpleTableColumnService.query(vo); + if (CollectionUtil.isEmpty(datas)) { + throw new DefaultClientException("数据表不存在,请检查!"); + } + List details = datas.stream().map(t -> { + GenDataEntityDetail detail = new GenDataEntityDetail(); + detail.setId(t.getDbColumnName()); + detail.setName(t.getColumnComment()); + detail.setColumnName(GenStringConverter.convertToCamelCase(GenConvertType.UNDERLINE_TO_CAMEL, + t.getDbColumnName())); + detail.setIsKey(t.getIsKey()); + detail.setDataType(t.getDataType()); + detail.setColumnOrder(t.getOrdinalPosition()); + List viewTypes = genViewTypeConverter.convert(t.getDataType()); + if (CollectionUtil.isEmpty(viewTypes)) { + throw new DefaultClientException("字段:" + t.getDbColumnName() + "类型暂不支持!"); + } + detail.setViewType(viewTypes.get(0)); + detail.setFixEnum(Boolean.FALSE); + detail.setIsOrder(Boolean.FALSE); + detail.setLen(t.getLen()); + detail.setDecimals(t.getDecimals()); + + return detail; + }).collect(Collectors.toList()); + + List results = details.stream().map(GenDataEntityDetailBo::new).collect( + Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + GenDataEntity data = genDataEntityService.findById(id); + + return InvokeResultBuilder.success(new GetDataEntityBo(data)); + } + + @ApiOperation("新增") + @PostMapping + public InvokeResult create(@RequestBody @Valid CreateDataEntityVo vo) { + + genDataEntityService.create(vo); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("修改") + @PutMapping + public InvokeResult update(@RequestBody @Valid UpdateDataEntityVo vo) { + + genDataEntityService.update(vo); + + this.evictRelaCache(vo.getId()); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genDataEntityService.delete(id); + + this.evictRelaCache(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("启用") + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genDataEntityService.enable(id); + + this.evictRelaCache(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("停用") + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genDataEntityService.unable(id); + + this.evictRelaCache(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("获取生成代码配置") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/generate") + public InvokeResult getGenerate(@NotNull(message = "ID不能为空!") String id) { + + DataEntityGenerateDto data = genDataEntityService.getGenerateById(id); + + DataEntityGenerateBo result = new DataEntityGenerateBo(data); + + return InvokeResultBuilder.success(result); + } + + @ApiOperation("修改生成代码配置") + @PatchMapping("/generate") + public InvokeResult updateGenerate(@Valid @RequestBody UpdateDataEntityGenerateVo vo) { + + genDataEntityService.updateGenerate(vo); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("预览") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/preview") + public InvokeResult> preView(@NotNull(message = "ID不能为空!") String id) { + + Generator generator = Generator.getInstance(id); + List datas = generator.generateAll(); + Map result = new LinkedHashMap<>(); + for (GenerateDto data : datas) { + result.put(data.getFileName(), data.getContent()); + } + + return InvokeResultBuilder.success(result); + } + + @ApiOperation("下载") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping("/download") + public void download(@NotNull(message = "ID不能为空!") String id) { + + String fileLocation = location.endsWith(File.separator) ? location : location + File.separator; + String filePath = fileLocation + IdUtil.getUUID() + File.separator; + + Generator generator = Generator.getInstance(id); + + List datas = generator.generateAll(); + for (GenerateDto data : datas) { + + File file = FileUtil.file(filePath + data.getPath() + File.separator + data.getFileName()); + FileUtil.writeString(data.getContent(), file, StandardCharsets.UTF_8); + } + + File zipFile = ZipUtil.zip(filePath, fileLocation + IdUtil.getUUID() + ".zip", false); + + ResponseUtil.download(zipFile); + } + + @ApiOperation("同步数据表") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @PutMapping("/sync/table") + public InvokeResult syncTable(@NotNull(message = "ID不能为空!") String id) { + genDataEntityService.syncTable(id); + + this.evictRelaCache(id); + + return InvokeResultBuilder.success(); + } + + // 失效关联数据的缓存 + private void evictRelaCache(String entityId) { + ThreadUtil.execAsync(() -> { + GenDataObjService genDataObjService = ApplicationUtil.getBean(GenDataObjService.class); + List ids = genDataObjService.getRelaGenDataEntityIds(entityId); + if (CollectionUtil.isNotEmpty(ids)) { + genDataObjService.cleanCacheByKeys(ids); + } + + GenCustomListService genCustomListService = ApplicationUtil.getBean(GenCustomListService.class); + ids = genCustomListService.getRelaGenDataEntityIds(entityId); + if (CollectionUtil.isNotEmpty(ids)) { + genCustomListService.cleanCacheByKeys(ids); + } + }); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjCategoryController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjCategoryController.java new file mode 100644 index 0000000..0233b32 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjCategoryController.java @@ -0,0 +1,116 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.bo.data.obj.category.GetGenDataObjCategoryBo; +import com.lframework.starter.web.gen.bo.data.obj.category.QueryGenDataObjCategoryBo; +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.service.GenDataObjCategoryService; +import com.lframework.starter.web.gen.vo.data.obj.category.CreateGenDataObjCategoryVo; +import com.lframework.starter.web.gen.vo.data.obj.category.UpdateGenDataObjCategoryVo; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据对象分类 + * + * @author zmj + */ +@Api(tags = "数据对象分类") +@Validated +@RestController +@RequestMapping("/gen/data/obj/category") +public class GenDataObjCategoryController extends DefaultBaseController { + + @Autowired + private GenDataObjCategoryService genDataObjCategoryService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query() { + List datas = genDataObjCategoryService.queryList(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryGenDataObjCategoryBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + GenDataObjCategory data = genDataObjCategoryService.findById(id); + if (data == null) { + throw new DefaultClientException("数据对象分类不存在!"); + } + + GetGenDataObjCategoryBo result = new GetGenDataObjCategoryBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增数据对象分类 + */ + @ApiOperation("新增数据对象分类") + @PostMapping + public InvokeResult create(@Valid CreateGenDataObjCategoryVo vo) { + + genDataObjCategoryService.create(vo); + + genDataObjCategoryService.cleanCacheByKey("all"); + + return InvokeResultBuilder.success(); + } + + /** + * 修改数据对象分类 + */ + @ApiOperation("修改数据对象分类") + @PutMapping + public InvokeResult update(@Valid UpdateGenDataObjCategoryVo vo) { + + genDataObjCategoryService.update(vo); + + genDataObjCategoryService.cleanCacheByKeys(Arrays.asList("all", vo.getId())); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("删除数据对象分类") + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genDataObjCategoryService.deleteById(id); + + genDataObjCategoryService.cleanCacheByKeys(Arrays.asList("all", id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjController.java new file mode 100644 index 0000000..36e6772 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenDataObjController.java @@ -0,0 +1,247 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.bo.data.obj.GenDataObjColumnBo; +import com.lframework.starter.web.gen.bo.data.obj.GenDataObjColumnBo.ColumnBo; +import com.lframework.starter.web.gen.bo.data.obj.GetGenDataObjBo; +import com.lframework.starter.web.gen.bo.data.obj.QueryGenDataObjBo; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.gen.service.GenDataObjQueryDetailService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import com.lframework.starter.web.gen.vo.data.obj.CreateGenDataObjVo; +import com.lframework.starter.web.gen.vo.data.obj.QueryGenDataObjVo; +import com.lframework.starter.web.gen.vo.data.obj.UpdateGenDataObjVo; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "数据对象") +@Slf4j +@Validated +@RestController +@RequestMapping("/gen/data/obj") +public class GenDataObjController extends DefaultBaseController { + + @Autowired + private GenDataObjService genDataObjService; + + @Autowired + private GenDataObjDetailService genDataObjDetailService; + + @Autowired + private GenDataObjQueryDetailService genDataObjQueryDetailService; + + @Autowired + private GenDataEntityService genDataEntityService; + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @ApiOperation("查询数据对象列表") + @GetMapping("/query") + public InvokeResult> query(@Valid QueryGenDataObjVo vo) { + + PageResult pageResult = genDataObjService.query(getPageIndex(vo), getPageSize(vo), + vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(QueryGenDataObjBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + @ApiOperation("查询数据对象列") + @ApiImplicitParam(value = "数据对象ID", name = "id", paramType = "query", required = true) + @GetMapping("/columns") + public InvokeResult> queryColumns( + @NotBlank(message = "ID不能为空!") String id) { + + GenDataObj dataObj = genDataObjService.findById(id); + if (dataObj == null) { + throw new DefaultClientException("数据对象不存在!"); + } + + List dataObjDetails = genDataObjDetailService.getByObjId(dataObj.getId()); + + List dataObjQueryDetails = genDataObjQueryDetailService.getByObjId( + dataObj.getId()); + + List results = new ArrayList<>(); + // 先查主表 + GenDataEntity dataEntity = genDataEntityService.findById(dataObj.getMainTableId()); + if (dataEntity == null) { + throw new DefaultClientException("主表已被删除,请检查!"); + } + + List dataEntityDetails = genDataEntityDetailService.getByEntityId( + dataEntity.getId()); + + GenDataObjColumnBo mainTable = new GenDataObjColumnBo(); + mainTable.setColumns(new ArrayList<>()); + mainTable.setId(dataEntity.getId()); + mainTable.setName("【主表】" + dataEntity.getName()); + for (GenDataEntityDetail dataEntityDetail : dataEntityDetails) { + ColumnBo column = new ColumnBo(); + column.setId(dataEntityDetail.getId()); + column.setRelaId(dataObj.getId()); + column.setName(dataEntityDetail.getName()); + column.setType(GenCustomListDetailType.MAIN_TABLE.getCode()); + column.setDataType(dataEntityDetail.getDataType().getCode()); + column.setViewType(dataEntityDetail.getViewType().getCode()); + mainTable.getColumns().add(column); + } + + results.add(mainTable); + + // 再查子表 + if (!CollectionUtil.isEmpty(dataObjDetails)) { + for (GenDataObjDetail dataObjDetail : dataObjDetails) { + GenDataEntity subDataEntity = genDataEntityService.findById(dataObjDetail.getSubTableId()); + if (subDataEntity == null) { + throw new DefaultClientException("子表已被删除,请检查!"); + } + + List subDataEntityDetails = genDataEntityDetailService.getByEntityId( + subDataEntity.getId()); + + GenDataObjColumnBo subTable = new GenDataObjColumnBo(); + subTable.setColumns(new ArrayList<>()); + subTable.setId(subDataEntity.getId()); + subTable.setName("【子表】" + subDataEntity.getName()); + for (GenDataEntityDetail dataEntityDetail : subDataEntityDetails) { + ColumnBo column = new ColumnBo(); + column.setId(dataEntityDetail.getId()); + column.setRelaId(dataObjDetail.getId()); + column.setName(dataEntityDetail.getName()); + column.setType(GenCustomListDetailType.SUB_TALBE.getCode()); + column.setDataType(dataEntityDetail.getDataType().getCode()); + column.setViewType(dataEntityDetail.getViewType().getCode()); + subTable.getColumns().add(column); + } + + results.add(subTable); + } + } + + // 最后查附加字段 + if (!CollectionUtil.isEmpty(dataObjQueryDetails)) { + GenDataObjColumnBo customQuery = new GenDataObjColumnBo(); + customQuery.setColumns(new ArrayList<>()); + customQuery.setId("customQuery"); + customQuery.setName("自定义查询"); + for (GenDataObjQueryDetail genDataObjDetail : dataObjQueryDetails) { + ColumnBo column = new ColumnBo(); + column.setId(genDataObjDetail.getId()); + column.setRelaId(genDataObjDetail.getId()); + column.setName(genDataObjDetail.getCustomName()); + column.setType(GenCustomListDetailType.CUSTOM.getCode()); + column.setDataType(genDataObjDetail.getDataType().getCode()); + customQuery.getColumns().add(column); + } + + results.add(customQuery); + } + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + GenDataObj data = genDataObjService.findById(id); + + return InvokeResultBuilder.success(new GetGenDataObjBo(data)); + } + + @ApiOperation("新增") + @PostMapping + public InvokeResult create(@RequestBody @Valid CreateGenDataObjVo vo) { + + genDataObjService.create(vo); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("修改") + @PutMapping + public InvokeResult update(@RequestBody @Valid UpdateGenDataObjVo vo) { + + genDataObjService.update(vo); + + genDataObjService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + genDataObjService.delete(id); + + genDataObjService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("启用") + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genDataObjService.enable(id); + + genDataObjService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("停用") + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "ID", required = true) @NotEmpty(message = "ID不能为空!") String id) { + + genDataObjService.unable(id); + + genDataObjService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenSelectorController.java b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenSelectorController.java new file mode 100644 index 0000000..a1bc7e4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/controller/GenSelectorController.java @@ -0,0 +1,523 @@ +package com.lframework.starter.web.gen.controller; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.gen.bo.custom.list.GenCustomListSelectorBo; +import com.lframework.starter.web.gen.bo.custom.list.category.GenCustomListCategorySelectorBo; +import com.lframework.starter.web.gen.bo.custom.page.GenCustomPageSelectorBo; +import com.lframework.starter.web.gen.bo.custom.page.category.GenCustomPageCategorySelectorBo; +import com.lframework.starter.web.gen.bo.custom.selector.GenCustomSelectorSelectorBo; +import com.lframework.starter.web.gen.bo.custom.selector.category.GenCustomSelectorCategorySelectorBo; +import com.lframework.starter.web.gen.bo.data.entity.GenDataEntityDetailSelectorBo; +import com.lframework.starter.web.gen.bo.data.entity.GenDataEntitySelectorBo; +import com.lframework.starter.web.gen.bo.data.entity.category.GenDataEntityCategorySelectorBo; +import com.lframework.starter.web.gen.bo.data.obj.GenDataObjSelectorBo; +import com.lframework.starter.web.gen.bo.data.obj.category.GenDataObjCategorySelectorBo; +import com.lframework.starter.web.gen.bo.simpledb.SimpleDBSelectorBo; +import com.lframework.starter.web.gen.dto.simpledb.SimpleDBDto; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.service.GenCustomListCategoryService; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.service.GenCustomPageCategoryService; +import com.lframework.starter.web.gen.service.GenCustomPageService; +import com.lframework.starter.web.gen.service.GenCustomSelectorCategoryService; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.gen.service.GenDataEntityCategoryService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.service.GenDataObjCategoryService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import com.lframework.starter.web.gen.service.SimpleDBService; +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListSelectorVo; +import com.lframework.starter.web.gen.vo.custom.list.category.GenCustomListCategorySelectorVo; +import com.lframework.starter.web.gen.vo.custom.page.GenCustomPageSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.GenCustomSelectorSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.category.GenCustomSelectorCategorySelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntityDetailSelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntitySelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.category.GenDataEntityCategorySelectorVo; +import com.lframework.starter.web.gen.vo.data.obj.GenDataObjSelectorVo; +import com.lframework.starter.web.gen.vo.data.obj.category.GenDataObjCategorySelectorVo; +import com.lframework.starter.web.gen.vo.simpledb.SimpleTableSelectorVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import javax.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "代码生成-选择器") +@Slf4j +@Validated +@RestController +@RequestMapping("/selector/gen") +public class GenSelectorController extends DefaultBaseController { + + @Autowired + private GenDataEntityCategoryService genDataEntityCategoryService; + + @Autowired + private GenDataObjCategoryService genDataObjCategoryService; + + @Autowired + private SimpleDBService simpleDBService; + + @Autowired + private GenDataEntityService genDataEntityService; + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Autowired + private GenDataObjService genDataObjService; + + @Autowired + private GenCustomListCategoryService genCustomListCategoryService; + + @Autowired + private GenCustomListService genCustomListService; + + @Autowired + private GenCustomSelectorCategoryService genCustomSelectorCategoryService; + + @Autowired + private GenCustomSelectorService genCustomSelectorService; + + @Autowired + private GenCustomPageCategoryService genCustomPageCategoryService; + + @Autowired + private GenCustomPageService genCustomPageService; + + @ApiOperation("数据实体分类") + @GetMapping("/data/entity/category") + public InvokeResult> dataEntityCategory( + @Valid GenDataEntityCategorySelectorVo vo) { + + PageResult pageResult = genDataEntityCategoryService.selector( + getPageIndex(vo), getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenDataEntityCategorySelectorBo::new) + .collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载数据实体分类 + */ + @ApiOperation("加载数据实体分类") + @PostMapping("/data/entity/category/load") + public InvokeResult> loadDataEntityCategory( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genDataEntityCategoryService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenDataEntityCategorySelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("数据对象分类") + @GetMapping("/data/obj/category") + public InvokeResult> dataObjCategory( + @Valid GenDataObjCategorySelectorVo vo) { + + PageResult pageResult = genDataObjCategoryService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenDataObjCategorySelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载数据对象分类 + */ + @ApiOperation("加载数据对象分类") + @PostMapping("/data/obj/category/load") + public InvokeResult> loadDataObjCategory( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genDataObjCategoryService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenDataObjCategorySelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("数据表") + @GetMapping("/table") + public InvokeResult> table(@Valid SimpleTableSelectorVo vo) { + PageResult pageResult = simpleDBService.selector(getPageIndex(vo), getPageSize(vo), + vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(SimpleDBSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载数据表 + */ + @ApiOperation("加载数据表") + @PostMapping("/table/load") + public InvokeResult> loadTable( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = simpleDBService.listByIds(ids); + List results = datas.stream().map(SimpleDBSelectorBo::new) + .collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("数据实体") + @GetMapping("/data/entity") + public InvokeResult> dataEntity( + @Valid GenDataEntitySelectorVo vo) { + PageResult pageResult = genDataEntityService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenDataEntitySelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载数据实体 + */ + @ApiOperation("加载数据实体") + @PostMapping("/data/entity/load") + public InvokeResult> loadDataEntity( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = genDataEntityService.listByIds(ids); + List results = datas.stream().map(GenDataEntitySelectorBo::new) + .collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("数据实体明细") + @GetMapping("/data/entity/detail") + public InvokeResult> dataEntityDetail( + @Valid GenDataEntityDetailSelectorVo vo) { + List datas = genDataEntityDetailService.selector(vo); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenDataEntityDetailSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("数据对象") + @GetMapping("/data/obj") + public InvokeResult> dataObj(@Valid GenDataObjSelectorVo vo) { + PageResult pageResult = genDataObjService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenDataObjSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载数据对象 + */ + @ApiOperation("加载数据对象") + @PostMapping("/data/obj/load") + public InvokeResult> loadDataObj( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genDataObjService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream().map(GenDataObjSelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("自定义列表分类") + @GetMapping("/custom/list/category") + public InvokeResult> customListCategory( + @Valid GenCustomListCategorySelectorVo vo) { + PageResult pageResult = genCustomListCategoryService.selector( + getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenCustomListCategorySelectorBo::new) + .collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载自定义列表分类 + */ + @ApiOperation("加载自定义列表分类") + @PostMapping("/custom/list/category/load") + public InvokeResult> loadCustomListCategory( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genCustomListCategoryService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenCustomListCategorySelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("自定义列表") + @GetMapping("/custom/list") + public InvokeResult> customList( + @Valid GenCustomListSelectorVo vo) { + PageResult pageResult = genCustomListService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenCustomListSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载自定义列表 + */ + @ApiOperation("加载自定义列表") + @PostMapping("/custom/list/load") + public InvokeResult> loadCustomList( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genCustomListService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenCustomListSelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("自定义选择器分类") + @GetMapping("/custom/selector/category") + public InvokeResult> customSelectorCategory( + @Valid GenCustomSelectorCategorySelectorVo vo) { + PageResult pageResult = genCustomSelectorCategoryService.selector( + getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenCustomSelectorCategorySelectorBo::new) + .collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载自定义选择器分类 + */ + @ApiOperation("加载自定义选择器分类") + @PostMapping("/custom/selector/category/load") + public InvokeResult> loadCustomSelectorCategory( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genCustomSelectorCategoryService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenCustomSelectorCategorySelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("自定义选择器") + @GetMapping("/custom/selector") + public InvokeResult> customList( + @Valid GenCustomSelectorSelectorVo vo) { + PageResult pageResult = genCustomSelectorService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenCustomSelectorSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载自定义选择器 + */ + @ApiOperation("加载自定义选择器") + @PostMapping("/custom/selector/load") + public InvokeResult> loadCustomSelector( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genCustomSelectorService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenCustomSelectorSelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("自定义页面分类") + @GetMapping("/custom/page/category") + public InvokeResult> customPageCategory() { + List datas = genCustomPageCategoryService.queryList(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenCustomPageCategorySelectorBo::new) + .collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 加载自定义表单分类 + */ + @ApiOperation("加载自定义页面分类") + @PostMapping("/custom/page/category/load") + public InvokeResult> loadCustomPageCategory( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> genCustomPageCategoryService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenCustomPageCategorySelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } + + @ApiOperation("自定义页面") + @GetMapping("/custom/page") + public InvokeResult> customPage( + @Valid GenCustomPageSelectorVo vo) { + PageResult pageResult = genCustomPageService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(GenCustomPageSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载自定义表单 + */ + @ApiOperation("加载自定义页面") + @PostMapping("/custom/page/load") + public InvokeResult> loadCustomPage( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(Objects::nonNull) + .map(t -> genCustomPageService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream() + .map(GenCustomPageSelectorBo::new).collect( + Collectors.toList()); + return InvokeResultBuilder.success(results); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java new file mode 100644 index 0000000..2cc3bf1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java @@ -0,0 +1,21 @@ +package com.lframework.starter.web.gen.converters; + +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenMySqlDataType; +import org.springframework.stereotype.Component; + +@Component +public class GenMysqlDataTypeConverter { + + public GenMySqlDataType convert(GenDataType dataType) { + + GenMySqlDataType[] mySqlDataTypes = GenMySqlDataType.values(); + for (GenMySqlDataType mySqlDataType : mySqlDataTypes) { + if (mySqlDataType.getDataType() == dataType) { + return mySqlDataType; + } + } + + return null; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenStringConverter.java b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenStringConverter.java new file mode 100644 index 0000000..60f7fd9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenStringConverter.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.gen.converters; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.enums.GenConvertType; + +/** + * @author zmj + * @since 2022/8/18 + */ +public class GenStringConverter { + + /** + * 转换 + * + * @param type + * @param oriStr + * @return + */ + public static String convert(GenConvertType type, String oriStr) { + if (StringUtil.isBlank(oriStr)) { + return oriStr; + } + + if (type == GenConvertType.UNDERLINE_TO_CAMEL) { + return StringUtil.toCamelCase(oriStr); + } + + return null; + } + + /** + * 强制转换成驼峰 + * + * @param type + * @param oriStr + * @return + */ + public static String convertToCamelCase(GenConvertType type, String oriStr) { + + if (type == GenConvertType.UNDERLINE_TO_CAMEL) { + return StringUtil.toCamelCase(oriStr); + } + + return null; + } + + /** + * 强制转换成普通小写 即为:不含分割线的小写字符 + * + * @param type + * @param oriStr + * @return + */ + public static String convertToNormalLowerCase(GenConvertType type, String oriStr) { + if (type == GenConvertType.UNDERLINE_TO_CAMEL) { + return StringUtil.toCamelCase(oriStr).toLowerCase(); + } + + return null; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java new file mode 100644 index 0000000..b9568da --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java @@ -0,0 +1,62 @@ +package com.lframework.starter.web.gen.converters; + +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenViewType; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class GenViewTypeConverter { + + public boolean canConvert(GenViewType viewType, GenDataType dataType) { + + List viewTypes = convert(dataType); + if (CollectionUtil.isEmpty(viewTypes)) { + return false; + } + + return viewTypes.contains(viewType); + } + + public List convert(GenDataType dataType) { + + if (dataType == null) { + return null; + } + + List results = new ArrayList<>(); + if (dataType == GenDataType.STRING) { + results.addAll(Arrays.asList(GenViewType.values())); + } else if (dataType == GenDataType.INTEGER) { + results.addAll(Arrays.asList(GenViewType.INPUT, GenViewType.SELECT)); + } else if (dataType == GenDataType.SHORT) { + results.addAll(Arrays.asList(GenViewType.INPUT, GenViewType.SELECT)); + } else if (dataType == GenDataType.LONG) { + results.addAll(Arrays.asList(GenViewType.INPUT)); + } else if (dataType == GenDataType.DOUBLE) { + results.addAll(Arrays.asList(GenViewType.INPUT)); + } else if (dataType == GenDataType.LOCAL_DATE) { + results.addAll(Arrays.asList(GenViewType.INPUT, GenViewType.DATE, GenViewType.DATE_RANGE)); + } else if (dataType == GenDataType.LOCAL_DATE_TIME) { + results.addAll( + Arrays.asList(GenViewType.INPUT, GenViewType.DATETIME, GenViewType.DATE_RANGE)); + } else if (dataType == GenDataType.LOCAL_TIME) { + results.addAll(Arrays.asList(GenViewType.INPUT, GenViewType.TIME)); + } else if (dataType == GenDataType.BOOLEAN) { + results.addAll(Arrays.asList(GenViewType.INPUT, GenViewType.SELECT)); + } else if (dataType == GenDataType.BIG_DECIMAL) { + results.addAll(Arrays.asList(GenViewType.INPUT)); + } else { + log.error("未知的GenDataType={}", dataType); + throw new DefaultSysException("未知的GenDataType"); + } + + return results; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/directives/FormatDirective.java b/web-starter/src/main/java/com/lframework/starter/web/gen/directives/FormatDirective.java new file mode 100644 index 0000000..7f12204 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/directives/FormatDirective.java @@ -0,0 +1,117 @@ +package com.lframework.starter.web.gen.directives; + +import com.lframework.starter.common.utils.CollectionUtil; +import freemarker.core.Environment; +import freemarker.template.TemplateDirectiveBody; +import freemarker.template.TemplateDirectiveModel; +import freemarker.template.TemplateException; +import freemarker.template.TemplateModel; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class FormatDirective implements TemplateDirectiveModel { + + public static final String DIRECTIVE_NAME = "format"; + + private static final char NEWLINE = '\n'; + + @Override + public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, + TemplateModel[] loopVars, + TemplateDirectiveBody body) throws TemplateException, IOException { + + FormatWriter writer = new FormatWriter(env.getOut(), + env.getCurrentDirectiveCallPlace().getBeginColumn()); + body.render(writer); + + List chars = writer.getWriteChars(); + char[] space = writer.getSpace(); + + if (!CollectionUtil.isEmpty(chars)) { + List checkList = chars.subList(chars.size() - space.length, chars.size()); + if (checkList.stream().allMatch(t -> t == ' ')) { + chars = chars.subList(0, chars.size() - space.length); + } + + char[] newChars = new char[chars.size()]; + for (int i = 0; i < chars.size(); i++) { + newChars[i] = chars.get(i); + } + env.getOut().write(newChars); + } + } + + private static class FormatWriter extends Writer { + + private final Writer out; + + private final char[] space; + private final List writeChars = new ArrayList<>(); + private boolean newLine = true; + + public FormatWriter(Writer out, int column) { + + this.out = out; + this.space = new char[column]; + Arrays.fill(this.space, ' '); + } + + public char[] getSpace() { + + return space; + } + + public List getWriteChars() { + + return writeChars; + } + + @Override + public void write(char[] cbuf, int off, int len) throws IOException { + + List chars = new ArrayList<>(); + for (int i = off; i < len; i++) { + char c = cbuf[i]; + if (newLine) { + for (char s : space) { + chars.add(s); + } + newLine = false; + } + + if (c == NEWLINE) { + newLine = true; + } + + chars.add(c); + + if (newLine) { + for (char s : space) { + chars.add(s); + } + newLine = false; + } + } + + writeChars.addAll(chars); + } + + @Override + public void flush() throws IOException { + + out.flush(); + } + + @Override + public void close() throws IOException { + + out.close(); + } + + } + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/DataEntityGenerateDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/DataEntityGenerateDto.java new file mode 100644 index 0000000..4ae01a3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/DataEntityGenerateDto.java @@ -0,0 +1,52 @@ +package com.lframework.starter.web.gen.dto.data.entity; + +import com.lframework.starter.web.gen.dto.gen.GenCreateColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenDetailColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import com.lframework.starter.web.gen.dto.gen.GenQueryColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenQueryParamsColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenUpdateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +@Data +public class DataEntityGenerateDto implements BaseDto, Serializable { + + /** + * 字段信息 + */ + private List columns; + + /** + * 基本设置 + */ + private GenGenerateInfoDto generateInfo; + + /** + * 新增配置 + */ + private List createConfigs; + + /** + * 修改配置 + */ + private List updateConfigs; + + /** + * 查询配置 + */ + private List queryConfigs; + + /** + * 查询参数配置 + */ + private List queryParamsConfigs; + + /** + * 详情配置 + */ + private List detailConfigs; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/GenDataEntityDetailDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/GenDataEntityDetailDto.java new file mode 100644 index 0000000..8483930 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/data/entity/GenDataEntityDetailDto.java @@ -0,0 +1,84 @@ +package com.lframework.starter.web.gen.dto.data.entity; + +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenOrderType; +import com.lframework.starter.web.gen.enums.GenViewType; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenDataEntityDetailDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 字段显示名称 + */ + private String name; + + /** + * 字段名称 + */ + private String columnName; + + /** + * 是否主键 + */ + private Boolean isKey; + + /** + * 数据类型 + */ + private GenDataType dataType; + + /** + * 排序编号 + */ + private Integer columnOrder; + + /** + * 备注 + */ + private String description; + + /** + * 显示类型 + */ + private GenViewType viewType; + + /** + * 是否内置枚举 + */ + private Boolean fixEnum = Boolean.FALSE; + + /** + * 后端枚举名 + */ + private String enumBack; + + /** + * 前端枚举名 + */ + private String enumFront; + + /** + * 正则表达式 + */ + private String regularExpression; + + /** + * 是否排序字段 + */ + private Boolean isOrder = Boolean.FALSE; + + /** + * 排序类型 + */ + private GenOrderType orderType; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenCreateColumnConfigDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenCreateColumnConfigDto.java new file mode 100644 index 0000000..53ae594 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenCreateColumnConfigDto.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.dto.gen; + +import com.lframework.starter.web.gen.components.CreateColumnConfig; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenCreateColumnConfigDto implements BaseDto, CreateColumnConfig, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 是否必填 + */ + private Boolean required; + + /** + * 排序编号 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenDetailColumnConfigDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenDetailColumnConfigDto.java new file mode 100644 index 0000000..b03a053 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenDetailColumnConfigDto.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.dto.gen; + +import com.lframework.starter.web.gen.components.DetailColumnConfig; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenDetailColumnConfigDto implements BaseDto, DetailColumnConfig, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 列宽 + */ + private Integer span; + + /** + * 排序编号 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenGenerateInfoDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenGenerateInfoDto.java new file mode 100644 index 0000000..3722647 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenGenerateInfoDto.java @@ -0,0 +1,88 @@ +package com.lframework.starter.web.gen.dto.gen; + +import com.lframework.starter.web.gen.enums.GenKeyType; +import com.lframework.starter.web.gen.enums.GenTemplateType; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenGenerateInfoDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 生成模板类型 + */ + private GenTemplateType templateType; + + /** + * 包名 + */ + private String packageName; + + /** + * 模块名 + */ + private String moduleName; + + /** + * 业务名 + */ + private String bizName; + + /** + * 类名 + */ + private String className; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 父级菜单ID + */ + private String parentMenuId; + + /** + * 主键类型 + */ + private GenKeyType keyType; + + /** + * 作者 + */ + private String author; + + /** + * 本级菜单编号 + */ + private String menuCode; + + /** + * 本级菜单名称 + */ + private String menuName; + + /** + * 详情页Span总数量 + */ + private Integer detailSpan; + + /** + * 是否应用缓存 + */ + private Boolean isCache; + + /** + * 是否内置删除功能 + */ + private Boolean hasDelete; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryColumnConfigDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryColumnConfigDto.java new file mode 100644 index 0000000..05eef25 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryColumnConfigDto.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.dto.gen; + +import com.lframework.starter.web.gen.components.QueryColumnConfig; +import com.lframework.starter.web.gen.enums.GenQueryWidthType; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenQueryColumnConfigDto implements BaseDto, QueryColumnConfig, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 宽度类型 + */ + private GenQueryWidthType widthType; + + /** + * 宽度 + */ + private Integer width; + + /** + * 是否页面排序 + */ + private Boolean sortable; + + /** + * 排序编号 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryParamsColumnConfigDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryParamsColumnConfigDto.java new file mode 100644 index 0000000..8dd1e52 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenQueryParamsColumnConfigDto.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.dto.gen; + +import com.lframework.starter.web.gen.components.QueryParamsColumnConfig; +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenQueryParamsColumnConfigDto implements BaseDto, QueryParamsColumnConfig, + Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 查询类型 + */ + private GenQueryType queryType; + + /** + * 排序编号 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenUpdateColumnConfigDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenUpdateColumnConfigDto.java new file mode 100644 index 0000000..a7d817b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/gen/GenUpdateColumnConfigDto.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.dto.gen; + +import com.lframework.starter.web.gen.components.UpdateColumnConfig; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenUpdateColumnConfigDto implements BaseDto, UpdateColumnConfig, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 是否必填 + */ + private Boolean required; + + /** + * 排序编号 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/generate/GenerateDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/generate/GenerateDto.java new file mode 100644 index 0000000..6a8e153 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/generate/GenerateDto.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.gen.dto.generate; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class GenerateDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 文件路径 + */ + private String path; + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件内容 + */ + private String content; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableColumnDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableColumnDto.java new file mode 100644 index 0000000..4b4a1b9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableColumnDto.java @@ -0,0 +1,72 @@ +package com.lframework.starter.web.gen.dto.simpledb; + +import com.lframework.starter.web.gen.enums.GenMySqlDataType; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class OriSimpleTableColumnDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 表ID + */ + private String tableId; + + /** + * 字段名 + */ + private String columnName; + + /** + * 字段数据类型 + */ + private GenMySqlDataType dataType; + + /** + * 是否允许为空 + */ + private Boolean isNullable; + + /** + * 列主键类型 + */ + private Boolean isKey; + + /** + * 默认值 + */ + private String columnDefault; + + /** + * 字段排序 + */ + private Integer ordinalPosition; + + /** + * 字段类型 + */ + private String columnType; + + /** + * 字段备注 + */ + private String columnComment; + + /** + * 长度 + */ + private Long len; + + /** + * 小数位数 + */ + private Integer decimals; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableDto.java new file mode 100644 index 0000000..908ca03 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/OriSimpleTableDto.java @@ -0,0 +1,64 @@ +package com.lframework.starter.web.gen.dto.simpledb; + +import com.lframework.starter.web.gen.components.Table; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.gen.enums.GenConvertType; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +@Data +public class OriSimpleTableDto implements BaseDto, Table, Serializable { + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 数据表所属的数据库名 + */ + private String tableSchema; + + /** + * 数据库表名 + */ + private String tableName; + + /** + * 字段信息 + */ + private List columns; + + /** + * 数据库引擎 + */ + private String engine; + + /** + * 字符校验编码集 + */ + private String tableCollation; + + /** + * 备注 + */ + private String tableComment; + + /** + * 转换方式 + */ + private GenConvertType convertType; + + @Override + public String getSchema() { + + return this.tableSchema; + } + + @Override + public String getComment() { + + return this.tableComment; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleDBDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleDBDto.java new file mode 100644 index 0000000..99e2cae --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleDBDto.java @@ -0,0 +1,21 @@ +package com.lframework.starter.web.gen.dto.simpledb; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SimpleDBDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 库名 + */ + private String tableSchema; + + /** + * 表名 + */ + private String tableName; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleTableDto.java b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleTableDto.java new file mode 100644 index 0000000..fb51e09 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/dto/simpledb/SimpleTableDto.java @@ -0,0 +1,64 @@ +package com.lframework.starter.web.gen.dto.simpledb; + +import com.lframework.starter.web.gen.components.Table; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.gen.enums.GenConvertType; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +@Data +public class SimpleTableDto implements BaseDto, Table, Serializable { + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 数据表所属的数据库名 + */ + private String tableSchema; + + /** + * 数据库表名 + */ + private String tableName; + + /** + * 字段信息 + */ + private List columns; + + /** + * 数据库引擎 + */ + private String engine; + + /** + * 字符校验编码集 + */ + private String tableCollation; + + /** + * 备注 + */ + private String tableComment; + + /** + * 转换方式 + */ + private GenConvertType convertType; + + @Override + public String getSchema() { + + return this.tableSchema; + } + + @Override + public String getComment() { + + return this.tableComment; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCreateColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCreateColumnConfig.java new file mode 100644 index 0000000..ee2b684 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCreateColumnConfig.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-10 + */ +@Data +@TableName("gen_create_column_config") +public class GenCreateColumnConfig extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 是否必填 + */ + private Boolean required; + + /** + * 排序编号 + */ + private Integer orderNo; + + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomList.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomList.java new file mode 100644 index 0000000..efa0ce3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomList.java @@ -0,0 +1,168 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenCustomListType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 自定义列表 + *

+ * + * @author zmj + * @since 2022-09-24 + */ +@Data +@TableName("gen_custom_list") +public class GenCustomList extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "GenCustomList"; + + /** + * ID + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 分类ID + */ + private String categoryId; + + /** + * 数据对象ID + */ + private String dataObjId; + + /** + * 列表类型 + */ + private GenCustomListType listType; + + /** + * 表单Label宽度 + */ + private Integer labelWidth; + + /** + * 是否分页 + */ + private Boolean hasPage; + + /** + * 是否树形列表 + */ + private Boolean treeData; + + /** + * ID字段 + */ + private String idColumn; + + /** + * ID字段关联ID + */ + private String idColumnRelaId; + + /** + * 父级ID字段 + */ + private String treePidColumn; + + /** + * 父级ID字段关联ID + */ + private String treePidColumnRelaId; + + /** + * 树形节点字段 + */ + private String treeNodeColumn; + + /** + * 树形节点字段关联ID + */ + private String treeNodeColumnRelaId; + + /** + * 子节点Key值 + */ + private String treeChildrenKey; + + /** + * 是否允许导出 + */ + private Boolean allowExport; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 查询前置SQL + */ + private String queryPrefixSql; + + /** + * 查询后置SQL + */ + private String querySuffixSql; + + /** + * 后置SQL + */ + private String suffixSql; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListCategory.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListCategory.java new file mode 100644 index 0000000..2a7fd1e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListCategory.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 自定义列表分类 + *

+ * + * @author zmj + */ +@Data +@TableName("gen_custom_list_category") +public class GenCustomListCategory extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenCustomListCategory"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListDetail.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListDetail.java new file mode 100644 index 0000000..9bdcc90 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListDetail.java @@ -0,0 +1,73 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.gen.enums.GenQueryWidthType; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-10 + */ +@Data +@TableName("gen_custom_list_detail") +public class GenCustomListDetail extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 自定义列表ID + */ + private String customListId; + + /** + * 关联ID 当type为主表时,此值为数据对象ID 当type为子表时,此值为数据对象明细ID 当type为自定义查询时,此值为GenDataObjQueryDetail的ID + */ + private String relaId; + + /** + * 数据实体ID + */ + private String dataEntityId; + + /** + * 宽度类型 + */ + private GenQueryWidthType widthType; + + /** + * 宽度 + */ + private Integer width; + + /** + * 是否页面排序 + */ + private Boolean sortable; + + /** + * 排序编号 + */ + private Integer orderNo; + + /** + * 类型 + */ + private GenCustomListDetailType type; + + /** + * 格式化脚本 + */ + private String formatter; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListHandleColumn.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListHandleColumn.java new file mode 100644 index 0000000..e15fcd2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListHandleColumn.java @@ -0,0 +1,75 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenCustomListBtnType; +import com.lframework.starter.web.gen.enums.GenCustomListBtnViewType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * 自定义列表操作列 + *

+ * + * @author zmj + * @since 2022-09-24 + */ +@Data +@TableName("gen_custom_list_handle_column") +public class GenCustomListHandleColumn extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenCustomListHandleColumn"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 自定义列表ID + */ + private String customListId; + + /** + * 显示名称 + */ + private String name; + + /** + * 显示类型 + */ + private GenCustomListBtnViewType viewType; + + /** + * 按钮类型 + */ + private GenCustomListBtnType btnType; + + /** + * 按钮配置 + */ + private String btnConfig; + + /** + * 图标 + */ + private String icon; + + /** + * 请求参数 + */ + private String requestParam; + + /** + * 宽度 + */ + private Integer width; + + /** + * 排序编号 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListQueryParams.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListQueryParams.java new file mode 100644 index 0000000..6ded2e3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListQueryParams.java @@ -0,0 +1,72 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-10 + */ +@Data +@TableName("gen_custom_list_query_params") +public class GenCustomListQueryParams extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 自定义列表ID + */ + private String customListId; + + /** + * 关联ID 当type为主表时,此值为数据对象ID 当type为子表时,此值为数据对象明细ID + */ + private String relaId; + + /** + * 数据实体ID + */ + private String dataEntityId; + + /** + * 前端显示 + */ + private Boolean frontShow; + + /** + * 查询类型 + */ + private GenQueryType queryType; + + /** + * 表单宽度 + */ + private Integer formWidth; + + /** + * 默认值 + */ + private String defaultValue; + + /** + * 排序编号 + */ + private Integer orderNo; + + /** + * 类型 + */ + private GenCustomListDetailType type; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListToolbar.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListToolbar.java new file mode 100644 index 0000000..e959bb6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomListToolbar.java @@ -0,0 +1,70 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenCustomListBtnType; +import com.lframework.starter.web.gen.enums.GenCustomListBtnViewType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * 自定义列表工具栏 + *

+ * + * @author zmj + * @since 2022-09-24 + */ +@Data +@TableName("gen_custom_list_toolbar") +public class GenCustomListToolbar extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenCustomListToolbar"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 自定义列表ID + */ + private String customListId; + + /** + * 显示名称 + */ + private String name; + + /** + * 显示类型 + */ + private GenCustomListBtnViewType viewType; + + /** + * 按钮类型 + */ + private GenCustomListBtnType btnType; + + /** + * 按钮配置 + */ + private String btnConfig; + + /** + * 图标 + */ + private String icon; + + /** + * 请求参数 + */ + private String requestParam; + + /** + * 排序编号 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPage.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPage.java new file mode 100644 index 0000000..ec20859 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPage.java @@ -0,0 +1,95 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 自定义页面 + *

+ * + * @author zmj + * @since 2023-06-20 + */ +@Data +@TableName("gen_custom_page") +public class GenCustomPage extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenCustomPage"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 分类ID + */ + private String categoryId; + + /** + * 页面代码 + */ + private String pageCode; + + /** + * 脚本代码 + */ + private String scriptCode; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPageCategory.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPageCategory.java new file mode 100644 index 0000000..c01a11e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomPageCategory.java @@ -0,0 +1,81 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 自定义页面分类 + *

+ * + * @author zmj + */ +@Data +@TableName("gen_custom_page_category") +public class GenCustomPageCategory extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenCustomPageCategory"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 父级ID + */ + private String parentId; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelector.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelector.java new file mode 100644 index 0000000..df79970 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelector.java @@ -0,0 +1,126 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 自定义选择器 + *

+ * + * @author zmj + * @since 2022-09-24 + */ +@Data +@TableName("gen_custom_selector") +public class GenCustomSelector extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenCustomSelector"; + + private static final long serialVersionUID = 1L; + /** + * ID + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 分类ID + */ + private String categoryId; + + /** + * 自定义列表ID + */ + private String customListId; + + /** + * 对话框标题 + */ + private String dialogTittle; + + /** + * 对话框宽度 + */ + private String dialogWidth; + + /** + * 占位符 + */ + private String placeholder; + + /** + * ID字段 + */ + private String idColumn; + + /** + * ID字段关联ID + */ + private String idColumnRelaId; + + /** + * 名称字段 + */ + private String nameColumn; + + /** + * 名称字段关联ID + */ + private String nameColumnRelaId; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelectorCategory.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelectorCategory.java new file mode 100644 index 0000000..64b54c9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenCustomSelectorCategory.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 自定义选择器分类 + *

+ * + * @author zmj + */ +@Data +@TableName("gen_custom_selector_category") +public class GenCustomSelectorCategory extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenCustomSelectorCategory"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntity.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntity.java new file mode 100644 index 0000000..b398b52 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntity.java @@ -0,0 +1,135 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.components.Table; +import com.lframework.starter.web.gen.enums.GenConvertType; +import com.lframework.starter.web.gen.enums.GenStatus; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 数据实体 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +@Data +@TableName("gen_data_entity") +public class GenDataEntity extends BaseEntity implements BaseDto, Table { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "GenDataEntity"; + + /** + * ID + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 分类ID + */ + private String categoryId; + + /** + * 生成状态 + */ + private GenStatus genStatus; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 数据表所属的数据库名 + */ + private String tableSchema; + + /** + * 数据库表名 + */ + private String tableName; + + /** + * 数据库引擎 + */ + private String engine; + + /** + * 字符校验编码集 + */ + private String tableCollation; + + /** + * 备注 + */ + private String tableComment; + + /** + * 转换方式 + */ + private GenConvertType convertType; + + @Override + public String getSchema() { + return this.tableSchema; + } + + @Override + public String getComment() { + return this.tableComment; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityCategory.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityCategory.java new file mode 100644 index 0000000..d6d236e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityCategory.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 数据实体分类 + *

+ * + * @author zmj + */ +@Data +@TableName("gen_data_entity_category") +public class GenDataEntityCategory extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenDataEntityCategory"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityDetail.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityDetail.java new file mode 100644 index 0000000..481ddb2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataEntityDetail.java @@ -0,0 +1,160 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.components.TableColumn; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenOrderType; +import com.lframework.starter.web.gen.enums.GenViewType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * 数据实体明细 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +@Data +@TableName("gen_data_entity_detail") +public class GenDataEntityDetail extends BaseEntity implements BaseDto, TableColumn { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 数据对象ID + */ + private String entityId; + + /** + * 字段显示名称 + */ + private String name; + + /** + * 字段名称 + */ + private String columnName; + + /** + * 是否主键 + */ + private Boolean isKey; + + /** + * 数据类型 + */ + private GenDataType dataType; + + /** + * 排序编号 + */ + private Integer columnOrder; + + /** + * 备注 + */ + private String description; + + /** + * 显示类型 + */ + private GenViewType viewType; + + /** + * 是否内置枚举 + */ + private Boolean fixEnum; + + /** + * 后端枚举名 + */ + private String enumBack; + + /** + * 前端枚举名 + */ + private String enumFront; + + /** + * 正则表达式 + */ + private String regularExpression; + + /** + * 是否排序字段 + */ + private Boolean isOrder; + + /** + * 排序类型 + */ + private GenOrderType orderType; + + /** + * 数据字典ID + */ + private String dataDicId; + + /** + * 自定义选择器ID + */ + private String customSelectorId; + + /** + * 长度 + */ + private Long len; + + /** + * 小数位数 + */ + private Integer decimals; + + /** + * 字段名称 + */ + private String dbColumnName; + + /** + * 字段数据类型 + */ + private GenDataType dbDataType; + + /** + * 是否允许为空 + */ + private Boolean isNullable; + + /** + * 默认值 + */ + private String columnDefault; + + /** + * 字段排序 + */ + private Integer ordinalPosition; + + /** + * 字段备注 + */ + private String columnComment; + + /** + * 长度 + */ + private Long dbLen; + + /** + * 小数位数 + */ + private Integer dbDecimals; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObj.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObj.java new file mode 100644 index 0000000..c95380b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObj.java @@ -0,0 +1,97 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 数据对象 + *

+ * + * @author zmj + * @since 2022-09-24 + */ +@Data +@TableName("gen_data_obj") +public class GenDataObj extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "GenDataObj"; + + /** + * ID + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 分类ID + */ + private String categoryId; + + /** + * 主表ID + */ + private String mainTableId; + + /** + * 主表别名 + */ + private String mainTableAlias; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjCategory.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjCategory.java new file mode 100644 index 0000000..479938d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjCategory.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 数据对象分类 + *

+ * + * @author zmj + */ +@Data +@TableName("gen_data_obj_category") +public class GenDataObjCategory extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "GenDataObjCategory"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjDetail.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjDetail.java new file mode 100644 index 0000000..d00b1e0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjDetail.java @@ -0,0 +1,70 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenRelaMode; +import com.lframework.starter.web.gen.enums.GenRelaType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * 数据对象明细 + *

+ * + * @author zmj + * @since 2022-09-24 + */ +@Data +@TableName("gen_data_obj_detail") +public class GenDataObjDetail extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "GenDataObjDetail"; + + /** + * ID + */ + private String id; + + /** + * 数据对象ID + */ + private String dataObjId; + + /** + * 主表字段 + */ + private String mainTableDetailIds; + + /** + * 关联类型 + */ + private GenRelaType relaType; + + /** + * 关联方式 + */ + private GenRelaMode relaMode; + + /** + * 子表ID + */ + private String subTableId; + + /** + * 子表别名 + */ + private String subTableAlias; + + /** + * 主表字段 + */ + private String subTableDetailIds; + + /** + * 排序 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjQueryDetail.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjQueryDetail.java new file mode 100644 index 0000000..11cdaeb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDataObjQueryDetail.java @@ -0,0 +1,59 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * 数据对象自定义查询明细 + *

+ * + * @author zmj + * @since 2022-09-24 + */ +@Data +@TableName("gen_data_obj_query_detail") +public class GenDataObjQueryDetail extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "GenDataObjQueryDetail"; + + /** + * ID + */ + private String id; + + /** + * 数据对象ID + */ + private String dataObjId; + + /** + * 显示名称 + */ + private String customName; + + /** + * 自定义SQL + */ + private String customSql; + + /** + * 别名 + */ + private String customAlias; + + /** + * 数据类型 + */ + private GenDataType dataType; + + /** + * 排序 + */ + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDetailColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDetailColumnConfig.java new file mode 100644 index 0000000..31f55b3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenDetailColumnConfig.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-10 + */ +@Data +@TableName("gen_detail_column_config") +public class GenDetailColumnConfig extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 列宽 + */ + private Integer span; + + /** + * 排序编号 + */ + private Integer orderNo; + + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenGenerateInfo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenGenerateInfo.java new file mode 100644 index 0000000..c82db28 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenGenerateInfo.java @@ -0,0 +1,98 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenKeyType; +import com.lframework.starter.web.gen.enums.GenTemplateType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-08 + */ +@Data +@TableName("gen_generate_info") +public class GenGenerateInfo extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 生成模板类型 + */ + private GenTemplateType templateType; + + /** + * 包名 + */ + private String packageName; + + /** + * 模块名 + */ + private String moduleName; + + /** + * 业务名 + */ + private String bizName; + + /** + * 类名 + */ + private String className; + + /** + * 类描述 + */ + private String classDescription; + + /** + * 父级菜单ID + */ + private String parentMenuId; + + /** + * 主键类型 + */ + private GenKeyType keyType; + + /** + * 作者 + */ + private String author; + + /** + * 本级菜单编号 + */ + private String menuCode; + + /** + * 本级菜单名称 + */ + private String menuName; + + /** + * 详情页Span总数量 + */ + private Integer detailSpan; + + /** + * 是否应用缓存 + */ + private Boolean isCache; + + /** + * 是否内置删除功能 + */ + private Boolean hasDelete; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryColumnConfig.java new file mode 100644 index 0000000..f4581c9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryColumnConfig.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenQueryWidthType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-10 + */ +@Data +@TableName("gen_query_column_config") +public class GenQueryColumnConfig extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 宽度类型 + */ + private GenQueryWidthType widthType; + + /** + * 宽度 + */ + private Integer width; + + /** + * 是否页面排序 + */ + private Boolean sortable; + + /** + * 排序编号 + */ + private Integer orderNo; + + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryParamsColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryParamsColumnConfig.java new file mode 100644 index 0000000..95387e9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenQueryParamsColumnConfig.java @@ -0,0 +1,39 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-10 + */ +@Data +@TableName("gen_query_params_column_config") +public class GenQueryParamsColumnConfig extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 查询类型 + */ + private GenQueryType queryType; + + /** + * 排序编号 + */ + private Integer orderNo; + + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTable.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTable.java new file mode 100644 index 0000000..72de6f1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTable.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.enums.GenConvertType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-05-28 + */ +@Data +@TableName("gen_simple_table") +public class GenSimpleTable extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 数据表所属的数据库名 + */ + private String tableSchema; + + /** + * 数据库表名 + */ + private String tableName; + + /** + * 数据库引擎 + */ + private String engine; + + /** + * 字符校验编码集 + */ + private String tableCollation; + + /** + * 备注 + */ + private String tableComment; + + /** + * 转换方式 + */ + private GenConvertType convertType; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTableColumn.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTableColumn.java new file mode 100644 index 0000000..2bb437a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenSimpleTableColumn.java @@ -0,0 +1,83 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.gen.components.TableColumn; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-05-28 + */ +@Data +@TableName("gen_simple_table_column") +public class GenSimpleTableColumn extends BaseEntity implements BaseDto, TableColumn { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 表ID + */ + private String tableId; + + /** + * 字段名 + */ + private String columnName; + + /** + * 字段数据类型 + */ + private GenDataType dataType; + + /** + * 是否允许为空 + */ + private Boolean isNullable; + + /** + * 是否主键 + */ + private Boolean isKey; + + /** + * 默认值 + */ + private String columnDefault; + + /** + * 字段排序 + */ + private Integer ordinalPosition; + + /** + * 字段备注 + */ + private String columnComment; + + /** + * 长度 + */ + private Long len; + + /** + * 小数位数 + */ + private Integer decimals; + + @Override + public String getDbColumnName() { + return this.columnName; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenUpdateColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenUpdateColumnConfig.java new file mode 100644 index 0000000..c842da4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenUpdateColumnConfig.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.gen.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-12-10 + */ +@Data +@TableName("gen_update_column_config") +public class GenUpdateColumnConfig extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 是否必填 + */ + private Boolean required; + + /** + * 排序编号 + */ + private Integer orderNo; + + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateColumnConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateColumnConfig.java new file mode 100644 index 0000000..fecd80b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateColumnConfig.java @@ -0,0 +1,5 @@ +package com.lframework.starter.web.gen.entity; + +public class GenerateColumnConfig { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateConfig.java b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateConfig.java new file mode 100644 index 0000000..d15018c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/entity/GenerateConfig.java @@ -0,0 +1,13 @@ +package com.lframework.starter.web.gen.entity; + +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.core.dto.BaseDto; +import lombok.Data; + +/** + * 代码生成信息 + */ +@Data +public class GenerateConfig extends BaseEntity implements BaseDto { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenConvertType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenConvertType.java new file mode 100644 index 0000000..453539b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenConvertType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenConvertType implements BaseEnum { + UNDERLINE_TO_CAMEL(1, "下划线转驼峰"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenConvertType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnType.java new file mode 100644 index 0000000..5eb2824 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnType.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenCustomListBtnType implements BaseEnum { + + EXTERNAL(0, "外部链接"), + ROUTE(1, "路由跳转"), + EXCUTE_SCRIPT(3, "自定义表单"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenCustomListBtnType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnViewType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnViewType.java new file mode 100644 index 0000000..673526b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListBtnViewType.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenCustomListBtnViewType implements BaseEnum { + + PRIMARY("primary", "primary"), + DEFAULT("default", "default"), + DASHED("dashed", "dashed"), + DANGER("danger", "danger"), + LINK("link", "link"), + LINK_DANGER("link-danger", "link-danger"); + + @EnumValue + private final String code; + + private final String desc; + + GenCustomListBtnViewType(String code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public String getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListDetailType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListDetailType.java new file mode 100644 index 0000000..018bf18 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListDetailType.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenCustomListDetailType implements BaseEnum { + MAIN_TABLE(1, "主表"), + SUB_TALBE(2, "子表"), + CUSTOM(3, "自定义查询"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenCustomListDetailType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListType.java new file mode 100644 index 0000000..fbfbcd9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenCustomListType.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenCustomListType implements BaseEnum { + SEQ(0, "序列"), + SINGLE(1, "单选"), + MULTIPLE(2, "多选"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenCustomListType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenDataType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenDataType.java new file mode 100644 index 0000000..2e4cddb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenDataType.java @@ -0,0 +1,86 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + +public enum GenDataType implements BaseEnum { + + STRING(0, String.class, "String", "string"), INTEGER(1, Integer.class, "Integer", + "number"), SHORT(2, Short.class, "Short", "number"), LONG(3, Long.class, "Long", "number"), DOUBLE(4, + Double.class, "Double", "number"), LOCAL_DATE(5, LocalDate.class, "LocalDate", "string"), LOCAL_DATE_TIME(6, + LocalDateTime.class, "LocalDateTime", "string"), LOCAL_TIME(7, + LocalTime.class, "LocalTime", "string"), BOOLEAN(8, Boolean.class, "Boolean", "boolean"), BIG_DECIMAL(9, + BigDecimal.class, "BigDecimal", "number"), + ; + + @EnumValue + private final Integer code; + + private final Class clazz; + + private final String desc; + + private final String frontDesc; + + GenDataType(Integer code, Class clazz, String desc, String frontDesc) { + + this.code = code; + this.clazz = clazz; + this.desc = desc; + this.frontDesc = frontDesc; + } + + /** + * 是否是数字类型 + * + * @param type + * @return + */ + public static Boolean isNumberType(GenDataType type) { + + if (type == null) { + return false; + } + + return type == INTEGER || type == SHORT || type == LONG || type == DOUBLE + || type == BIG_DECIMAL; + } + + /** + * 是否是小数类型 + * + * @param type + * @return + */ + public static Boolean isDecimalType(GenDataType type) { + if (type == null) { + return false; + } + + return type == DOUBLE || type == BIG_DECIMAL; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } + + public Class getClazz() { + return clazz; + } + + public String getFrontDesc() { + return frontDesc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenKeyType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenKeyType.java new file mode 100644 index 0000000..cc7d036 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenKeyType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenKeyType implements BaseEnum { + AUTO(0, "自增ID"), UUID(1, "UUID"), SNOW_FLAKE(2, "雪花算法ID"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenKeyType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenMySqlDataType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenMySqlDataType.java new file mode 100644 index 0000000..63f5920 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenMySqlDataType.java @@ -0,0 +1,72 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +/** + * MySql列类型枚举 dataType为null时表示该类型暂不支持 + */ +public enum GenMySqlDataType implements BaseEnum { + TINYINT("tinyint", GenDataType.INTEGER, "tinyint"), SMALLINT("smallint", GenDataType.INTEGER, + "smallint"), MEDIUMINT("mediumint", GenDataType.INTEGER, "mediumint"), INT("int", + GenDataType.INTEGER, + "int"), INTEGER("integer", GenDataType.INTEGER, "integer"), BIGINT("bigint", GenDataType.LONG, + "bigint"), BIT("bit", GenDataType.BOOLEAN, "bit"), REAL("real", GenDataType.DOUBLE, + "real"), DOUBLE( + "double", GenDataType.BIG_DECIMAL, "double"), FLOAT("float", GenDataType.BIG_DECIMAL, + "float"), DECIMAL( + "decimal", GenDataType.BIG_DECIMAL, "decimal"), NUMERIC("numeric", GenDataType.BIG_DECIMAL, + "numeric"), CHAR("char", GenDataType.STRING, "char"), VARCHAR("varchar", GenDataType.STRING, + "varchar"), DATE("date", GenDataType.LOCAL_DATE, "date"), TIME("time", GenDataType.LOCAL_TIME, + "time"), YEAR("year", null, "year"), TIMESTAMP("timestamp", GenDataType.LOCAL_DATE_TIME, + "timestamp"), DATETIME("datetime", GenDataType.LOCAL_DATE_TIME, "datetime"), TINYBLOB( + "tinyblob", null, + "tinyblob"), BLOB("blob", null, "blob"), MEDIUMBLOB("mediumblob", null, + "mediumblob"), LONGBLOB("longblob", + null, "longblob"), TINYTEXT("tinytext", GenDataType.STRING, "tinytext"), MEDIUMTEXT( + "mediumtext", + GenDataType.STRING, "mediumtext"), TEXT("text", GenDataType.STRING, "text"), LONGTEXT( + "longtext", + GenDataType.STRING, "longtext"), ENUM("enum", GenDataType.STRING, "enum"), SET("set", + GenDataType.STRING, + "set"), BINARY("binary", null, "binary"), VARBINARY("varbinary", null, "varbinary"), POINT( + "point", null, + "point"), LINESTRING("linestring", null, "linestring"), POLYGON("polygon", null, + "polygon"), GEOMETRY( + "geometry", null, "geometry"), MULTIPOINT("multipoint", null, "multipoint"), MULTILINESTRING( + "multilinestring", null, "multilinestring"), MULTIPOLYGON("multipolygon", null, + "multipolygon"), GEOMETRYCOLLECTION("geometrycollection", null, "geometrycollection"), JSON( + "json", null, + "json"); + + @EnumValue + private final String code; + + private final GenDataType dataType; + + private final String desc; + + GenMySqlDataType(String code, GenDataType dataType, String desc) { + + this.code = code; + this.dataType = dataType; + this.desc = desc; + } + + @Override + public String getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } + + public GenDataType getDataType() { + + return dataType; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenOrderType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenOrderType.java new file mode 100644 index 0000000..70d1ace --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenOrderType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenOrderType implements BaseEnum { + ASC("ASC", "升序"), DESC("DESC", "降序"); + + @EnumValue + private final String code; + + private final String desc; + + GenOrderType(String code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public String getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryType.java new file mode 100644 index 0000000..38d088d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryType.java @@ -0,0 +1,39 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenQueryType implements BaseEnum { + EQ(0, "=", "="), GT(1, ">", ">"), GE(2, ">=", ">="), LT(3, "<", "<"), LE(4, "<=", "<="), NE(5, "!=", "!="), IN(6, "IN", "IN"), NOT_IN(7, + "NOT IN", "NOT IN"), LEFT_LIKE(8, "LIKE", "LIKE %?"), RIGHT_LIKE(9, "LIKE", "LIKE ?%"), AROUND_LIKE(10, "LIKE", "LIKE %?%"); + + @EnumValue + private final Integer code; + + private final String operation; + + private final String desc; + + GenQueryType(Integer code, String operation, String desc) { + + this.code = code; + this.operation = operation; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } + + public String getOperation() { + return operation; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryWidthType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryWidthType.java new file mode 100644 index 0000000..771f7d0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenQueryWidthType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenQueryWidthType implements BaseEnum { + FIX(0, "固定宽度"), MIN(1, "最小宽度"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenQueryWidthType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaMode.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaMode.java new file mode 100644 index 0000000..8dc96a5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaMode.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenRelaMode implements BaseEnum { + LEFT_JOIN(0, "LEFT", "左连接"), + RIGHT_JOIN(1, "RIGHT", "右连接"), + INNER_JOIN(2, "INNER", "全连接"); + + @EnumValue + private final Integer code; + + private final String sql; + + private final String desc; + + GenRelaMode(Integer code, String sql, String desc) { + this.code = code; + this.sql = sql; + this.desc = desc; + } + + @Override + public Integer getCode() { + return this.code; + } + + @Override + public String getDesc() { + return this.desc; + } + + public String getSql() { + return sql; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaType.java new file mode 100644 index 0000000..17aac6f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenRelaType.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenRelaType implements BaseEnum { + ONE_RELA_ONE(0, "一对一"), + ONE_RELA_MANY(1, "一对多"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenRelaType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + return this.code; + } + + @Override + public String getDesc() { + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenStatus.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenStatus.java new file mode 100644 index 0000000..ff63004 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenStatus.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenStatus implements BaseEnum { + CREATED(0, "已生成"), SET_TABLE(1, "已设置数据表"), SET_GEN(2, "已设置生成配置"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenStatus(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenTemplateType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenTemplateType.java new file mode 100644 index 0000000..da98e04 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenTemplateType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenTemplateType implements BaseEnum { + LIST(1, "列表"), TREE(2, "树形表"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenTemplateType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenType.java new file mode 100644 index 0000000..e44d1f4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenType implements BaseEnum { + SIMPLE_DB(1, "数据库单表"); + + @EnumValue + private final Integer code; + + private final String desc; + + GenType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenViewType.java b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenViewType.java new file mode 100644 index 0000000..56c3578 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/enums/GenViewType.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum GenViewType implements BaseEnum { + INPUT(0, "输入框"), TEXTATREA(1, "文本域"), DATETIME(2, "日期时间选择器"), DATE(3, "日期选择器"), TIME(4, + "时间选择器"), SELECT(5, + "选择器"), DATE_RANGE(6, "日期范围选择器"), DATA_DIC(7, "数据字典"), CUSTOM_SELECTOR(8, "自定义选择器"); + + @EnumValue + private final Integer code; + + + private final String desc; + + GenViewType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/event/CustomListDeleteEvent.java b/web-starter/src/main/java/com/lframework/starter/web/gen/event/CustomListDeleteEvent.java new file mode 100644 index 0000000..10cf6a2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/event/CustomListDeleteEvent.java @@ -0,0 +1,36 @@ +package com.lframework.starter.web.gen.event; + +import org.springframework.context.ApplicationEvent; + +public class CustomListDeleteEvent extends ApplicationEvent { + + /** + * 自定义列表ID + */ + private String id; + + /** + * 自定义列表名称 + */ + private String name; + + public CustomListDeleteEvent(Object source) { + super(source); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDeleteEvent.java b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDeleteEvent.java new file mode 100644 index 0000000..9bbe28e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDeleteEvent.java @@ -0,0 +1,58 @@ +package com.lframework.starter.web.gen.event; + +import java.util.List; +import org.springframework.context.ApplicationEvent; + +public class DataEntityDeleteEvent extends ApplicationEvent { + + /** + * 数据实体ID + */ + private String id; + + /** + * 数据实体名称 + */ + private String name; + + private List columnIds; + + /** + * Create a new {@code ApplicationEvent}. + * + * @param source the object on which the event initially occurred or with which the event is + * associated (never {@code null}) + */ + public DataEntityDeleteEvent(Object source) { + + super(source); + } + + public String getId() { + + return id; + } + + public void setId(String id) { + + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getColumnIds() { + + return columnIds; + } + + public void setColumnIds(List columnIds) { + + this.columnIds = columnIds; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDetailDeleteEvent.java b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDetailDeleteEvent.java new file mode 100644 index 0000000..8c4ce62 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataEntityDetailDeleteEvent.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.gen.event; + +import org.springframework.context.ApplicationEvent; + +public class DataEntityDetailDeleteEvent extends ApplicationEvent { + + /** + * 数据实体明细ID + */ + private String id; + + /** + * 显示名称 + */ + private String name; + + /** + * Create a new {@code ApplicationEvent}. + * + * @param source the object on which the event initially occurred or with which the event is + * associated (never {@code null}) + */ + public DataEntityDetailDeleteEvent(Object source) { + + super(source); + } + + public String getId() { + + return id; + } + + public void setId(String id) { + + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjDeleteEvent.java b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjDeleteEvent.java new file mode 100644 index 0000000..a0c0890 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjDeleteEvent.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.gen.event; + +import java.util.List; +import org.springframework.context.ApplicationEvent; + +public class DataObjDeleteEvent extends ApplicationEvent { + + /** + * 数据对象ID + */ + private String id; + + /** + * 数据对象名称 + */ + private String name; + + private List detailIds; + + private List queryDetailIds; + + /** + * Create a new {@code ApplicationEvent}. + * + * @param source the object on which the event initially occurred or with which the event is + * associated (never {@code null}) + */ + public DataObjDeleteEvent(Object source) { + super(source); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getDetailIds() { + return detailIds; + } + + public void setDetailIds(List detailIds) { + this.detailIds = detailIds; + } + + public List getQueryDetailIds() { + return queryDetailIds; + } + + public void setQueryDetailIds(List queryDetailIds) { + this.queryDetailIds = queryDetailIds; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjQueryDetailDeleteEvent.java b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjQueryDetailDeleteEvent.java new file mode 100644 index 0000000..83c3c79 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/event/DataObjQueryDetailDeleteEvent.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.gen.event; + +import org.springframework.context.ApplicationEvent; + +public class DataObjQueryDetailDeleteEvent extends ApplicationEvent { + + /** + * 数据对象明细ID + */ + private String id; + + /** + * 显示名称 + */ + private String name; + + /** + * Create a new {@code ApplicationEvent}. + * + * @param source the object on which the event initially occurred or with which the event is + * associated (never {@code null}) + */ + public DataObjQueryDetailDeleteEvent(Object source) { + + super(source); + } + + public String getId() { + + return id; + } + + public void setId(String id) { + + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCreateColumnConfigServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCreateColumnConfigServiceImpl.java new file mode 100644 index 0000000..1dcdf40 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCreateColumnConfigServiceImpl.java @@ -0,0 +1,74 @@ +package com.lframework.starter.web.gen.impl; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.dto.gen.GenCreateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenCreateColumnConfig; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.mappers.GenCreateColumnConfigMapper; +import com.lframework.starter.web.gen.service.GenCreateColumnConfigService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.vo.UpdateCreateColumnConfigVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCreateColumnConfigServiceImpl + extends BaseMpServiceImpl + implements GenCreateColumnConfigService { + + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Override + public List getByDataEntityId(String entityId) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (CollectionUtil.isEmpty(columns)) { + return CollectionUtil.emptyList(); + } + + return getBaseMapper().getByIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateGenerate(String entityId, List vo) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (!CollectionUtil.isEmpty(columns)) { + getBaseMapper().deleteBatchIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + if (!CollectionUtil.isEmpty(vo)) { + int orderNo = 1; + for (UpdateCreateColumnConfigVo updateCreateColumnConfigVo : vo) { + GenCreateColumnConfig record = new GenCreateColumnConfig(); + record.setId(updateCreateColumnConfigVo.getId()); + record.setRequired(updateCreateColumnConfigVo.getRequired()); + record.setOrderNo(orderNo++); + + getBaseMapper().insert(record); + } + } + } + + @Override + public GenCreateColumnConfigDto findById(String id) { + + return getBaseMapper().findById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + getBaseMapper().deleteById(id); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListCategoryServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListCategoryServiceImpl.java new file mode 100644 index 0000000..0668c0a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListCategoryServiceImpl.java @@ -0,0 +1,132 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.gen.mappers.GenCustomListCategoryMapper; +import com.lframework.starter.web.gen.service.GenCustomListCategoryService; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.vo.custom.list.category.CreateGenCustomListCategoryVo; +import com.lframework.starter.web.gen.vo.custom.list.category.GenCustomListCategorySelectorVo; +import com.lframework.starter.web.gen.vo.custom.list.category.UpdateGenCustomListCategoryVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomListCategoryServiceImpl extends + BaseMpServiceImpl implements + GenCustomListCategoryService { + + @Autowired + private GenCustomListService genCustomListService; + + @Cacheable(value = GenCustomListCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List queryList() { + return getBaseMapper().query(); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomListCategorySelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenCustomListCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenCustomListCategory findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenCustomListCategoryVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(GenCustomListCategory.class) + .eq(GenCustomListCategory::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenCustomListCategory.class) + .eq(GenCustomListCategory::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenCustomListCategory record = new GenCustomListCategory(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenCustomListCategoryVo vo) { + Wrapper checkWrapper = Wrappers.lambdaQuery(GenCustomListCategory.class) + .eq(GenCustomListCategory::getCode, vo.getCode()) + .ne(GenCustomListCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenCustomListCategory.class) + .eq(GenCustomListCategory::getName, vo.getName()) + .ne(GenCustomListCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenCustomListCategory record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("自定义列表分类不存在!"); + } + + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.updateById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenCustomList.class) + .eq(GenCustomList::getCategoryId, id); + if (genCustomListService.count(queryWrapper) > 0) { + throw new DefaultClientException("此分类下存在自定义列表,无法删除!"); + } + + this.removeById(id); + } + + @CacheEvict(value = GenCustomListCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListDetailServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListDetailServiceImpl.java new file mode 100644 index 0000000..0c1449d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListDetailServiceImpl.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.gen.entity.GenCustomListDetail; +import com.lframework.starter.web.gen.mappers.GenCustomListDetailMapper; +import com.lframework.starter.web.gen.service.GenCustomListDetailService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomListDetailServiceImpl extends + BaseMpServiceImpl implements + GenCustomListDetailService { + + @Override + public List getByCustomListId(String customListId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(GenCustomListDetail.class) + .eq(GenCustomListDetail::getCustomListId, customListId) + .orderByAsc(GenCustomListDetail::getOrderNo); + return this.list(queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByCustomListId(String customListId) { + Wrapper deleteWrapper = Wrappers.lambdaQuery(GenCustomListDetail.class) + .eq(GenCustomListDetail::getCustomListId, customListId); + this.remove(deleteWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListHandleColumnServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListHandleColumnServiceImpl.java new file mode 100644 index 0000000..347642f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListHandleColumnServiceImpl.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.gen.entity.GenCustomListHandleColumn; +import com.lframework.starter.web.gen.mappers.GenCustomListHandleColumnMapper; +import com.lframework.starter.web.gen.service.GenCustomListHandleColumnService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomListHandleColumnServiceImpl extends + BaseMpServiceImpl implements + GenCustomListHandleColumnService { + + @Override + public List getByCustomListId(String customListId) { + return getBaseMapper().getByCustomListId(customListId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByCustomListId(String customListId) { + + Wrapper deleteWrapper = Wrappers + .lambdaQuery(GenCustomListHandleColumn.class) + .eq(GenCustomListHandleColumn::getCustomListId, customListId); + this.remove(deleteWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListQueryParamsServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListQueryParamsServiceImpl.java new file mode 100644 index 0000000..2e08c84 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListQueryParamsServiceImpl.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.gen.entity.GenCustomListQueryParams; +import com.lframework.starter.web.gen.mappers.GenCustomListQueryParamsMapper; +import com.lframework.starter.web.gen.service.GenCustomListQueryParamsService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomListQueryParamsServiceImpl extends + BaseMpServiceImpl implements + GenCustomListQueryParamsService { + + @Override + public List getByCustomListId(String customListId) { + Wrapper queryWrapper = Wrappers.lambdaQuery( + GenCustomListQueryParams.class).eq(GenCustomListQueryParams::getCustomListId, customListId) + .orderByAsc(GenCustomListQueryParams::getOrderNo); + return this.list(queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByCustomListId(String customListId) { + Wrapper deleteWrapper = Wrappers.lambdaQuery( + GenCustomListQueryParams.class) + .eq(GenCustomListQueryParams::getCustomListId, customListId); + this.remove(deleteWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListServiceImpl.java new file mode 100644 index 0000000..af1485b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListServiceImpl.java @@ -0,0 +1,508 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.common.utils.ThreadUtil; +import com.lframework.starter.web.gen.components.custom.list.CustomListConfig; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListDetail; +import com.lframework.starter.web.gen.entity.GenCustomListHandleColumn; +import com.lframework.starter.web.gen.entity.GenCustomListQueryParams; +import com.lframework.starter.web.gen.entity.GenCustomListToolbar; +import com.lframework.starter.web.gen.enums.GenCustomListBtnType; +import com.lframework.starter.web.gen.enums.GenCustomListBtnViewType; +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.gen.enums.GenCustomListType; +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.gen.enums.GenQueryWidthType; +import com.lframework.starter.web.gen.event.CustomListDeleteEvent; +import com.lframework.starter.web.gen.mappers.GenCustomListMapper; +import com.lframework.starter.web.gen.service.GenCustomListDetailService; +import com.lframework.starter.web.gen.service.GenCustomListHandleColumnService; +import com.lframework.starter.web.gen.service.GenCustomListQueryParamsService; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.service.GenCustomListToolbarService; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.gen.vo.custom.list.CreateGenCustomListVo; +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListDetailVo; +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListHandleColumnVo; +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListQueryParamsVo; +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListSelectorVo; +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListToolbarVo; +import com.lframework.starter.web.gen.vo.custom.list.QueryGenCustomListVo; +import com.lframework.starter.web.gen.vo.custom.list.UpdateGenCustomListVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomListServiceImpl extends + BaseMpServiceImpl implements GenCustomListService { + + @Autowired + private GenCustomListQueryParamsService genCustomListQueryParamsService; + + @Autowired + private GenCustomListDetailService genCustomListDetailService; + + @Autowired + private GenCustomListToolbarService genCustomListToolbarService; + + @Autowired + private GenCustomListHandleColumnService genCustomListHandleColumnService; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QueryGenCustomListVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QueryGenCustomListVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomListSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenCustomList.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenCustomList findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenCustomListVo data) { + GenCustomList record = new GenCustomList(); + record.setId(IdUtil.getId()); + record.setName(data.getName()); + if (!StringUtil.isBlank(data.getCategoryId())) { + record.setCategoryId(data.getCategoryId()); + } + record.setListType(EnumUtil.getByCode(GenCustomListType.class, data.getListType())); + record.setQueryPrefixSql(StringUtil.isBlank(data.getQueryPrefixSql()) ? StringPool.EMPTY_STR + : data.getQueryPrefixSql()); + record.setQuerySuffixSql(StringUtil.isBlank(data.getQuerySuffixSql()) ? StringPool.EMPTY_STR + : data.getQuerySuffixSql()); + record.setSuffixSql( + StringUtil.isBlank(data.getSuffixSql()) ? StringPool.EMPTY_STR : data.getSuffixSql()); + + record.setLabelWidth(data.getLabelWidth()); + record.setHasPage(data.getHasPage()); + record.setTreeData(data.getTreeData()); + // 如果是树形列表,那么分页必须禁用 + // 如果分页没有禁用,那么一定不是树形列表 + if (record.getTreeData()) { + record.setHasPage(Boolean.FALSE); + } + + if (record.getHasPage()) { + record.setTreeData(Boolean.FALSE); + } + + record.setIdColumn(data.getIdColumn()); + record.setIdColumnRelaId(data.getIdColumnRelaId()); + + if (record.getTreeData()) { + + if (StringUtil.isBlank(data.getTreePidColumn())) { + throw new DefaultClientException("父级ID字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreePidColumnRelaId())) { + throw new DefaultClientException("父级ID字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreeNodeColumn())) { + throw new DefaultClientException("树形节点字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreeNodeColumnRelaId())) { + throw new DefaultClientException("树形节点字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreeChildrenKey())) { + throw new DefaultClientException("子节点Key值不能为空!"); + } + record.setTreePidColumn(data.getTreePidColumn()); + record.setTreePidColumnRelaId(data.getTreePidColumnRelaId()); + record.setTreeNodeColumn(data.getTreeNodeColumn()); + record.setTreeNodeColumnRelaId(data.getTreeNodeColumnRelaId()); + record.setTreeChildrenKey(data.getTreeChildrenKey()); + } + record.setAllowExport(data.getAllowExport()); + record.setDataObjId(data.getDataObjId()); + record.setAvailable(Boolean.TRUE); + record.setDescription( + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR : data.getDescription()); + + if (!CollectionUtil.isEmpty(data.getQueryParams())) { + int orderNo = 1; + for (GenCustomListQueryParamsVo queryParam : data.getQueryParams()) { + GenCustomListQueryParams genCustomListQueryParams = new GenCustomListQueryParams(); + genCustomListQueryParams.setId(IdUtil.getId()); + genCustomListQueryParams.setCustomListId(record.getId()); + genCustomListQueryParams.setRelaId(queryParam.getRelaId()); + genCustomListQueryParams.setDataEntityId(queryParam.getId()); + genCustomListQueryParams.setQueryType( + EnumUtil.getByCode(GenQueryType.class, queryParam.getQueryType())); + genCustomListQueryParams.setFrontShow(queryParam.getFrontShow()); + genCustomListQueryParams.setFormWidth(queryParam.getFormWidth()); + genCustomListQueryParams.setDefaultValue(queryParam.getDefaultValue() == null ? null + : queryParam.getDefaultValue() instanceof String ? queryParam.getDefaultValue() + .toString() : JsonUtil.toJsonString(queryParam.getDefaultValue())); + genCustomListQueryParams.setOrderNo(orderNo); + genCustomListQueryParams.setType( + EnumUtil.getByCode(GenCustomListDetailType.class, queryParam.getType())); + + genCustomListQueryParamsService.save(genCustomListQueryParams); + + orderNo++; + } + } + + int orderNo = 1; + for (GenCustomListDetailVo detail : data.getDetails()) { + GenCustomListDetail genCustomListDetail = new GenCustomListDetail(); + genCustomListDetail.setId(IdUtil.getId()); + genCustomListDetail.setCustomListId(record.getId()); + genCustomListDetail.setDataEntityId(detail.getId()); + genCustomListDetail.setRelaId(detail.getRelaId()); + genCustomListDetail.setWidthType( + EnumUtil.getByCode(GenQueryWidthType.class, detail.getWidthType())); + genCustomListDetail.setWidth(detail.getWidth()); + genCustomListDetail.setSortable(detail.getSortable()); + genCustomListDetail.setOrderNo(orderNo); + genCustomListDetail.setType( + EnumUtil.getByCode(GenCustomListDetailType.class, detail.getType())); + if (genCustomListDetail.getType() == GenCustomListDetailType.CUSTOM) { + genCustomListDetail.setDataEntityId(null); + } + if (!StringUtil.isBlank(detail.getFormatter())) { + genCustomListDetail.setFormatter(detail.getFormatter()); + } + + genCustomListDetailService.save(genCustomListDetail); + + orderNo++; + } + + if (!CollectionUtil.isEmpty(data.getToolbars())) { + orderNo = 1; + for (GenCustomListToolbarVo tb : data.getToolbars()) { + GenCustomListToolbar toolbar = new GenCustomListToolbar(); + toolbar.setId(IdUtil.getId()); + toolbar.setCustomListId(record.getId()); + toolbar.setName(tb.getName()); + toolbar.setViewType(EnumUtil.getByCode(GenCustomListBtnViewType.class, tb.getViewType())); + toolbar.setBtnType(EnumUtil.getByCode(GenCustomListBtnType.class, tb.getBtnType())); + toolbar.setBtnConfig(tb.getBtnConfig()); + if (!StringUtil.isBlank(tb.getIcon())) { + toolbar.setIcon(tb.getIcon()); + } + toolbar.setOrderNo(orderNo); + orderNo++; + + genCustomListToolbarService.save(toolbar); + } + } + + if (!CollectionUtil.isEmpty(data.getHandleColumns())) { + orderNo = 1; + for (GenCustomListHandleColumnVo hd : data.getHandleColumns()) { + GenCustomListHandleColumn handleColumn = new GenCustomListHandleColumn(); + handleColumn.setId(IdUtil.getId()); + handleColumn.setCustomListId(record.getId()); + handleColumn.setName(hd.getName()); + handleColumn + .setViewType(EnumUtil.getByCode(GenCustomListBtnViewType.class, hd.getViewType())); + handleColumn.setBtnType(EnumUtil.getByCode(GenCustomListBtnType.class, hd.getBtnType())); + handleColumn.setBtnConfig(hd.getBtnConfig()); + if (!StringUtil.isBlank(hd.getIcon())) { + handleColumn.setIcon(hd.getIcon()); + } + handleColumn.setOrderNo(orderNo); + handleColumn.setWidth(hd.getWidth()); + orderNo++; + + genCustomListHandleColumnService.save(handleColumn); + } + } + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenCustomListVo data) { + GenCustomList record = this.getById(data.getId()); + if (record == null) { + throw new DefaultClientException("自定义列表不存在!"); + } + + record.setHasPage(data.getHasPage()); + record.setTreeData(data.getTreeData()); + + // 如果是树形列表,那么分页必须禁用 + // 如果分页没有禁用,那么一定不是树形列表 + if (record.getTreeData()) { + record.setHasPage(Boolean.FALSE); + } + + if (record.getHasPage()) { + record.setTreeData(Boolean.FALSE); + } + + if (record.getTreeData()) { + + if (StringUtil.isBlank(data.getTreePidColumn())) { + throw new DefaultClientException("父级ID字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreePidColumnRelaId())) { + throw new DefaultClientException("父级ID字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreeNodeColumn())) { + throw new DefaultClientException("树形节点字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreeNodeColumnRelaId())) { + throw new DefaultClientException("树形节点字段不能为空!"); + } + + if (StringUtil.isBlank(data.getTreeChildrenKey())) { + throw new DefaultClientException("子节点Key值不能为空!"); + } + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(GenCustomList.class) + .eq(GenCustomList::getId, data.getId()).set(GenCustomList::getName, data.getName()) + .set(GenCustomList::getCategoryId, + StringUtil.isBlank(data.getCategoryId()) ? null : data.getCategoryId()) + .set(GenCustomList::getListType, + EnumUtil.getByCode(GenCustomListType.class, data.getListType())) + .set(GenCustomList::getLabelWidth, data.getLabelWidth()) + .set(GenCustomList::getHasPage, record.getHasPage()) + .set(GenCustomList::getTreeData, record.getTreeData()) + .set(GenCustomList::getIdColumn, data.getIdColumn()) + .set(GenCustomList::getIdColumnRelaId, data.getIdColumnRelaId()) + .set(GenCustomList::getTreePidColumn, record.getTreeData() ? data.getTreePidColumn() : null) + .set(GenCustomList::getTreePidColumnRelaId, + record.getTreeData() ? data.getTreePidColumnRelaId() : null) + .set(GenCustomList::getTreeNodeColumn, + record.getTreeData() ? data.getTreeNodeColumn() : null) + .set(GenCustomList::getTreeNodeColumnRelaId, + record.getTreeData() ? data.getTreeNodeColumnRelaId() : null) + .set(GenCustomList::getTreeChildrenKey, + record.getTreeData() ? data.getTreeChildrenKey() : null) + .set(GenCustomList::getQueryPrefixSql, + StringUtil.isBlank(data.getQueryPrefixSql()) ? StringPool.EMPTY_STR + : data.getQueryPrefixSql()) + .set(GenCustomList::getQuerySuffixSql, + StringUtil.isBlank(data.getQuerySuffixSql()) ? StringPool.EMPTY_STR + : data.getQuerySuffixSql()) + .set(GenCustomList::getSuffixSql, + StringUtil.isBlank(data.getSuffixSql()) ? StringPool.EMPTY_STR : data.getSuffixSql()) + .set(GenCustomList::getDescription, + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR + : data.getDescription()).set(GenCustomList::getAvailable, data.getAvailable()) + .set(GenCustomList::getAllowExport, data.getAllowExport()); + + this.update(updateWrapper); + + genCustomListDetailService.deleteByCustomListId(data.getId()); + genCustomListQueryParamsService.deleteByCustomListId(data.getId()); + + if (!CollectionUtil.isEmpty(data.getQueryParams())) { + int orderNo = 1; + for (GenCustomListQueryParamsVo queryParam : data.getQueryParams()) { + GenCustomListQueryParams genCustomListQueryParams = new GenCustomListQueryParams(); + genCustomListQueryParams.setId(IdUtil.getId()); + genCustomListQueryParams.setCustomListId(record.getId()); + genCustomListQueryParams.setRelaId(queryParam.getRelaId()); + genCustomListQueryParams.setDataEntityId(queryParam.getId()); + genCustomListQueryParams.setQueryType( + EnumUtil.getByCode(GenQueryType.class, queryParam.getQueryType())); + genCustomListQueryParams.setFrontShow(queryParam.getFrontShow()); + genCustomListQueryParams.setFormWidth(queryParam.getFormWidth()); + genCustomListQueryParams.setDefaultValue(queryParam.getDefaultValue() == null ? null + : queryParam.getDefaultValue() instanceof String ? queryParam.getDefaultValue() + .toString() : JsonUtil.toJsonString(queryParam.getDefaultValue())); + genCustomListQueryParams.setOrderNo(orderNo); + genCustomListQueryParams.setType( + EnumUtil.getByCode(GenCustomListDetailType.class, queryParam.getType())); + + genCustomListQueryParamsService.save(genCustomListQueryParams); + + orderNo++; + } + } + + int orderNo = 1; + for (GenCustomListDetailVo detail : data.getDetails()) { + GenCustomListDetail genCustomListDetail = new GenCustomListDetail(); + genCustomListDetail.setId(IdUtil.getId()); + genCustomListDetail.setCustomListId(record.getId()); + genCustomListDetail.setDataEntityId(detail.getId()); + genCustomListDetail.setRelaId(detail.getRelaId()); + genCustomListDetail.setWidthType( + EnumUtil.getByCode(GenQueryWidthType.class, detail.getWidthType())); + genCustomListDetail.setWidth(detail.getWidth()); + genCustomListDetail.setSortable(detail.getSortable()); + genCustomListDetail.setOrderNo(orderNo); + genCustomListDetail.setType( + EnumUtil.getByCode(GenCustomListDetailType.class, detail.getType())); + if (genCustomListDetail.getType() == GenCustomListDetailType.CUSTOM) { + genCustomListDetail.setDataEntityId(null); + } + genCustomListDetail.setFormatter(detail.getFormatter()); + + genCustomListDetailService.save(genCustomListDetail); + + orderNo++; + } + + genCustomListToolbarService.deleteByCustomListId(record.getId()); + + if (!CollectionUtil.isEmpty(data.getToolbars())) { + orderNo = 1; + for (GenCustomListToolbarVo tb : data.getToolbars()) { + GenCustomListToolbar toolbar = new GenCustomListToolbar(); + toolbar.setId(IdUtil.getId()); + toolbar.setCustomListId(record.getId()); + toolbar.setName(tb.getName()); + toolbar.setViewType(EnumUtil.getByCode(GenCustomListBtnViewType.class, tb.getViewType())); + toolbar.setBtnType(EnumUtil.getByCode(GenCustomListBtnType.class, tb.getBtnType())); + toolbar.setBtnConfig(tb.getBtnConfig()); + if (!StringUtil.isBlank(tb.getIcon())) { + toolbar.setIcon(tb.getIcon()); + } + toolbar.setOrderNo(orderNo); + orderNo++; + + genCustomListToolbarService.save(toolbar); + } + } + + genCustomListHandleColumnService.deleteByCustomListId(record.getId()); + + if (!CollectionUtil.isEmpty(data.getHandleColumns())) { + orderNo = 1; + for (GenCustomListHandleColumnVo hd : data.getHandleColumns()) { + GenCustomListHandleColumn handleColumn = new GenCustomListHandleColumn(); + handleColumn.setId(IdUtil.getId()); + handleColumn.setCustomListId(record.getId()); + handleColumn.setName(hd.getName()); + handleColumn + .setViewType(EnumUtil.getByCode(GenCustomListBtnViewType.class, hd.getViewType())); + handleColumn.setBtnType(EnumUtil.getByCode(GenCustomListBtnType.class, hd.getBtnType())); + handleColumn.setBtnConfig(hd.getBtnConfig()); + if (!StringUtil.isBlank(hd.getIcon())) { + handleColumn.setIcon(hd.getIcon()); + } + handleColumn.setWidth(hd.getWidth()); + handleColumn.setOrderNo(orderNo); + orderNo++; + + genCustomListHandleColumnService.save(handleColumn); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(String id) { + GenCustomList data = this.getById(id); + + this.removeById(id); + genCustomListDetailService.deleteByCustomListId(id); + genCustomListQueryParamsService.deleteByCustomListId(id); + + if (data != null) { + CustomListDeleteEvent event = new CustomListDeleteEvent(this); + event.setId(id); + event.setName(data.getName()); + ApplicationUtil.publishEvent(event); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenCustomList.class) + .set(GenCustomList::getAvailable, Boolean.TRUE).eq(GenCustomList::getId, id); + getBaseMapper().update(wrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenCustomList.class) + .set(GenCustomList::getAvailable, Boolean.FALSE).eq(GenCustomList::getId, id); + getBaseMapper().update(wrapper); + } + + @Override + public List getRelaGenDataObjIds(String objId) { + return getBaseMapper().getRelaGenDataObjIds(objId); + } + + @Override + public List getRelaGenDataEntityIds(String entityId) { + return getBaseMapper().getRelaGenDataEntityIds(entityId); + } + + @CacheEvict(value = {GenCustomList.CACHE_NAME, CustomListConfig.CACHE_NAME}, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + ThreadUtil.execAsync(() -> { + GenCustomSelectorService genCustomSelectorService = ApplicationUtil + .getBean(GenCustomSelectorService.class); + List ids = genCustomSelectorService.getRelaGenCustomListIds(String.valueOf(key)); + if (CollectionUtil.isNotEmpty(ids)) { + genCustomSelectorService.cleanCacheByKeys(ids); + } + }); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListToolbarServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListToolbarServiceImpl.java new file mode 100644 index 0000000..706053f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomListToolbarServiceImpl.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.gen.entity.GenCustomListToolbar; +import com.lframework.starter.web.gen.mappers.GenCustomListToolbarMapper; +import com.lframework.starter.web.gen.service.GenCustomListToolbarService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomListToolbarServiceImpl extends + BaseMpServiceImpl implements + GenCustomListToolbarService { + + @Override + public List getByCustomListId(String customListId) { + return getBaseMapper().getByCustomListId(customListId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByCustomListId(String customListId) { + + Wrapper deleteWrapper = Wrappers.lambdaQuery(GenCustomListToolbar.class) + .eq(GenCustomListToolbar::getCustomListId, customListId); + this.remove(deleteWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageCategoryServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageCategoryServiceImpl.java new file mode 100644 index 0000000..c3ee9de --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageCategoryServiceImpl.java @@ -0,0 +1,135 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.service.GenCustomPageCategoryService; +import com.lframework.starter.web.gen.service.GenCustomPageService; +import com.lframework.starter.web.gen.vo.custom.page.category.CreateGenCustomPageCategoryVo; +import com.lframework.starter.web.gen.vo.custom.page.category.UpdateGenCustomPageCategoryVo; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.gen.mappers.GenCustomPageCategoryMapper; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomPageCategoryServiceImpl extends + BaseMpServiceImpl implements + GenCustomPageCategoryService { + + @Autowired + private GenCustomPageService genCustomPageService; + + @Cacheable(value = GenCustomPageCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List queryList() { + return getBaseMapper().query(); + } + + @Cacheable(value = GenCustomPageCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenCustomPageCategory findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenCustomPageCategoryVo vo) { + + Wrapper checkWrapper = Wrappers + .lambdaQuery(GenCustomPageCategory.class) + .eq(GenCustomPageCategory::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenCustomPageCategory.class) + .eq(GenCustomPageCategory::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenCustomPageCategory record = new GenCustomPageCategory(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + record.setParentId(StringUtil.isBlank(vo.getParentId()) ? null : vo.getParentId()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenCustomPageCategoryVo vo) { + Wrapper checkWrapper = Wrappers + .lambdaQuery(GenCustomPageCategory.class) + .eq(GenCustomPageCategory::getCode, vo.getCode()) + .ne(GenCustomPageCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenCustomPageCategory.class) + .eq(GenCustomPageCategory::getName, vo.getName()) + .ne(GenCustomPageCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenCustomPageCategory record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("自定义列表分类不存在!"); + } + + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.updateById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + Set categoryIds = new HashSet<>(); + categoryIds.add(id); + while (true) { + Wrapper queryCategoryWrapper = Wrappers.lambdaQuery( + GenCustomPageCategory.class).in(GenCustomPageCategory::getParentId, categoryIds); + List categoryList = this.list(queryCategoryWrapper); + + int oldSize = categoryIds.size(); + categoryIds.addAll( + categoryList.stream().map(GenCustomPageCategory::getId).collect(Collectors.toList())); + if (oldSize == categoryIds.size()) { + break; + } + } + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenCustomPage.class) + .in(GenCustomPage::getCategoryId, categoryIds); + if (genCustomPageService.count(queryWrapper) > 0) { + throw new DefaultClientException("此分类或其子分类下存在自定义页面,无法删除!"); + } + + this.removeByIds(categoryIds); + } + + @CacheEvict(value = GenCustomPageCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageServiceImpl.java new file mode 100644 index 0000000..3607c87 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomPageServiceImpl.java @@ -0,0 +1,116 @@ +package com.lframework.starter.web.gen.impl; + +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.gen.components.custom.page.CustomPageConfig; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.mappers.GenCustomPageMapper; +import com.lframework.starter.web.gen.service.GenCustomPageService; +import com.lframework.starter.web.gen.vo.custom.page.CreateGenCustomPageVo; +import com.lframework.starter.web.gen.vo.custom.page.GenCustomPageSelectorVo; +import com.lframework.starter.web.gen.vo.custom.page.QueryGenCustomPageVo; +import com.lframework.starter.web.gen.vo.custom.page.UpdateGenCustomPageVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomPageServiceImpl extends + BaseMpServiceImpl implements + GenCustomPageService { + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QueryGenCustomPageVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QueryGenCustomPageVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomPageSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenCustomPage.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenCustomPage findById(Integer id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Integer create(CreateGenCustomPageVo data) { + GenCustomPage record = new GenCustomPage(); + + record.setName(data.getName()); + if (!StringUtil.isBlank(data.getCategoryId())) { + record.setCategoryId(data.getCategoryId()); + } + record.setPageCode(data.getPageCode()); + record.setScriptCode(data.getScriptCode()); + record.setDescription( + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR : data.getDescription()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenCustomPageVo data) { + GenCustomPage record = this.getById(data.getId()); + if (record == null) { + throw new DefaultClientException("自定义表单不存在!"); + } + + record.setPageCode(data.getPageCode()); + record.setScriptCode(data.getScriptCode()); + record.setDescription( + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR : data.getDescription()); + + this.updateAllColumnById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(Integer id) { + this.removeById(id); + } + + @CacheEvict(value = {GenCustomPage.CACHE_NAME, + CustomPageConfig.CACHE_NAME}, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + super.cleanCacheByKey(key); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorCategoryServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorCategoryServiceImpl.java new file mode 100644 index 0000000..58c37b7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorCategoryServiceImpl.java @@ -0,0 +1,134 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.gen.mappers.GenCustomSelectorCategoryMapper; +import com.lframework.starter.web.gen.service.GenCustomSelectorCategoryService; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.gen.vo.custom.selector.category.CreateGenCustomSelectorCategoryVo; +import com.lframework.starter.web.gen.vo.custom.selector.category.GenCustomSelectorCategorySelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.category.UpdateGenCustomSelectorCategoryVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomSelectorCategoryServiceImpl extends + BaseMpServiceImpl implements + GenCustomSelectorCategoryService { + + @Autowired + private GenCustomSelectorService genCustomSelectorService; + + @Cacheable(value = GenCustomSelectorCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List queryList() { + return getBaseMapper().query(); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomSelectorCategorySelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenCustomSelectorCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenCustomSelectorCategory findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenCustomSelectorCategoryVo vo) { + + Wrapper checkWrapper = Wrappers + .lambdaQuery(GenCustomSelectorCategory.class) + .eq(GenCustomSelectorCategory::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenCustomSelectorCategory.class) + .eq(GenCustomSelectorCategory::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenCustomSelectorCategory record = new GenCustomSelectorCategory(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenCustomSelectorCategoryVo vo) { + Wrapper checkWrapper = Wrappers + .lambdaQuery(GenCustomSelectorCategory.class) + .eq(GenCustomSelectorCategory::getCode, vo.getCode()) + .ne(GenCustomSelectorCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenCustomSelectorCategory.class) + .eq(GenCustomSelectorCategory::getName, vo.getName()) + .ne(GenCustomSelectorCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenCustomSelectorCategory record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("自定义列表分类不存在!"); + } + + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.updateById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenCustomSelector.class) + .eq(GenCustomSelector::getCategoryId, id); + if (genCustomSelectorService.count(queryWrapper) > 0) { + throw new DefaultClientException("此分类下存在自定义选择器,无法删除!"); + } + + this.removeById(id); + } + + @CacheEvict(value = GenCustomSelectorCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorServiceImpl.java new file mode 100644 index 0000000..3c47dec --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenCustomSelectorServiceImpl.java @@ -0,0 +1,166 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.gen.components.custom.selector.CustomSelectorConfig; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.mappers.GenCustomSelectorMapper; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import com.lframework.starter.web.gen.vo.custom.selector.CreateGenCustomSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.GenCustomSelectorSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.QueryGenCustomSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.UpdateGenCustomSelectorVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenCustomSelectorServiceImpl extends + BaseMpServiceImpl implements + GenCustomSelectorService { + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QueryGenCustomSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QueryGenCustomSelectorVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomSelectorSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenCustomSelector.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenCustomSelector findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenCustomSelectorVo data) { + GenCustomSelector record = new GenCustomSelector(); + + record.setId(IdUtil.getId()); + record.setName(data.getName()); + if (!StringUtil.isBlank(data.getCategoryId())) { + record.setCategoryId(data.getCategoryId()); + } + record.setCustomListId(data.getCustomListId()); + record.setAvailable(Boolean.TRUE); + record.setDescription( + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR : data.getDescription()); + record.setIdColumn(data.getIdColumn()); + record.setIdColumnRelaId(data.getIdColumnRelaId()); + record.setNameColumn(data.getNameColumn()); + record.setNameColumnRelaId(data.getNameColumnRelaId()); + record.setDialogTittle( + StringUtil.isBlank(data.getDialogTittle()) ? StringPool.EMPTY_STR : data.getDialogTittle()); + record.setDialogWidth(data.getDialogWidth()); + record.setPlaceholder( + StringUtil.isBlank(data.getPlaceholder()) ? StringPool.EMPTY_STR : data.getPlaceholder()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenCustomSelectorVo data) { + GenCustomSelector record = this.getById(data.getId()); + if (record == null) { + throw new DefaultClientException("自定义列表不存在!"); + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(GenCustomSelector.class) + .eq(GenCustomSelector::getId, data.getId()).set(GenCustomSelector::getName, data.getName()) + .set(GenCustomSelector::getCategoryId, + StringUtil.isBlank(data.getCategoryId()) ? null : data.getCategoryId()) + .set(GenCustomSelector::getDialogTittle, + StringUtil.isBlank(data.getDialogTittle()) ? StringPool.EMPTY_STR + : data.getDialogTittle()) + .set(GenCustomSelector::getDialogWidth, data.getDialogWidth()) + .set(GenCustomSelector::getPlaceholder, + StringUtil.isBlank(data.getPlaceholder()) ? StringPool.EMPTY_STR + : data.getPlaceholder()) + .set(GenCustomSelector::getIdColumn, data.getIdColumn()) + .set(GenCustomSelector::getIdColumnRelaId, data.getIdColumnRelaId()) + .set(GenCustomSelector::getNameColumn, data.getNameColumn()) + .set(GenCustomSelector::getNameColumnRelaId, data.getNameColumnRelaId()) + .set(GenCustomSelector::getDescription, + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR + : data.getDescription()).set(GenCustomSelector::getAvailable, data.getAvailable()); + + this.update(updateWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(String id) { + this.removeById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenCustomSelector.class) + .set(GenCustomSelector::getAvailable, Boolean.TRUE).eq(GenCustomSelector::getId, id); + getBaseMapper().update(wrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenCustomSelector.class) + .set(GenCustomSelector::getAvailable, Boolean.FALSE).eq(GenCustomSelector::getId, id); + getBaseMapper().update(wrapper); + } + + @Override + public List getRelaGenCustomListIds(String customListId) { + return getBaseMapper().getRelaGenCustomListIds(customListId); + } + + @CacheEvict(value = {GenCustomSelector.CACHE_NAME, + CustomSelectorConfig.CACHE_NAME}, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + super.cleanCacheByKey(key); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityCategoryServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityCategoryServiceImpl.java new file mode 100644 index 0000000..a6559c2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityCategoryServiceImpl.java @@ -0,0 +1,132 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.mappers.GenDataEntityCategoryMapper; +import com.lframework.starter.web.gen.service.GenDataEntityCategoryService; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.vo.data.entity.category.CreateGenDataEntityCategoryVo; +import com.lframework.starter.web.gen.vo.data.entity.category.GenDataEntityCategorySelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.category.UpdateGenDataEntityCategoryVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDataEntityCategoryServiceImpl extends + BaseMpServiceImpl implements + GenDataEntityCategoryService { + + @Autowired + private GenDataEntityService genDataEntityService; + + @Cacheable(value = GenDataEntityCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List queryList() { + return getBaseMapper().query(); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenDataEntityCategorySelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenDataEntityCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenDataEntityCategory findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenDataEntityCategoryVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(GenDataEntityCategory.class) + .eq(GenDataEntityCategory::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenDataEntityCategory.class) + .eq(GenDataEntityCategory::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenDataEntityCategory record = new GenDataEntityCategory(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenDataEntityCategoryVo vo) { + Wrapper checkWrapper = Wrappers.lambdaQuery(GenDataEntityCategory.class) + .eq(GenDataEntityCategory::getCode, vo.getCode()) + .ne(GenDataEntityCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenDataEntityCategory.class) + .eq(GenDataEntityCategory::getName, vo.getName()) + .ne(GenDataEntityCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenDataEntityCategory record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("数据实体分类不存在!"); + } + + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.updateById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataEntity.class) + .eq(GenDataEntity::getCategoryId, id); + if (genDataEntityService.count(queryWrapper) > 0) { + throw new DefaultClientException("此分类下存在数据实体,无法删除!"); + } + + this.removeById(id); + } + + @CacheEvict(value = GenDataEntityCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityDetailServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityDetailServiceImpl.java new file mode 100644 index 0000000..432c2fb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityDetailServiceImpl.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.mappers.GenDataEntityDetailMapper; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntityDetailSelectorVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDataEntityDetailServiceImpl extends + BaseMpServiceImpl implements + GenDataEntityDetailService { + + @Override + public List getByEntityId(String entityId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataEntityDetail.class) + .eq(GenDataEntityDetail::getEntityId, entityId) + .orderByAsc(GenDataEntityDetail::getColumnOrder); + + return getBaseMapper().selectList(queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByEntityId(String entityId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataEntityDetail.class) + .eq(GenDataEntityDetail::getEntityId, entityId); + getBaseMapper().delete(queryWrapper); + } + + @Override + public List selector(GenDataEntityDetailSelectorVo vo) { + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataEntityDetail.class) + .eq(GenDataEntityDetail::getEntityId, vo.getEntityId()) + .orderByAsc(GenDataEntityDetail::getColumnOrder); + + return getBaseMapper().selectList(queryWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityServiceImpl.java new file mode 100644 index 0000000..5d601d5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataEntityServiceImpl.java @@ -0,0 +1,527 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.converters.GenStringConverter; +import com.lframework.starter.web.gen.converters.GenViewTypeConverter; +import com.lframework.starter.web.gen.dto.data.entity.DataEntityGenerateDto; +import com.lframework.starter.web.gen.dto.gen.GenCreateColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenDetailColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import com.lframework.starter.web.gen.dto.gen.GenQueryColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenQueryParamsColumnConfigDto; +import com.lframework.starter.web.gen.dto.gen.GenUpdateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.gen.enums.GenConvertType; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenKeyType; +import com.lframework.starter.web.gen.enums.GenOrderType; +import com.lframework.starter.web.gen.enums.GenStatus; +import com.lframework.starter.web.gen.enums.GenTemplateType; +import com.lframework.starter.web.gen.enums.GenViewType; +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.mappers.GenDataEntityMapper; +import com.lframework.starter.web.gen.service.GenCreateColumnConfigService; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDataEntityService; +import com.lframework.starter.web.gen.service.GenDetailColumnConfigService; +import com.lframework.starter.web.gen.service.GenQueryColumnConfigService; +import com.lframework.starter.web.gen.service.GenQueryParamsColumnConfigService; +import com.lframework.starter.web.gen.service.GenUpdateColumnConfigService; +import com.lframework.starter.web.gen.service.GenerateInfoService; +import com.lframework.starter.web.gen.service.SimpleDBService; +import com.lframework.starter.web.gen.vo.data.entity.CreateDataEntityVo; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntityDetailVo; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntitySelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.QueryDataEntityVo; +import com.lframework.starter.web.gen.vo.data.entity.UpdateDataEntityGenerateVo; +import com.lframework.starter.web.gen.vo.data.entity.UpdateDataEntityVo; +import com.lframework.starter.web.gen.vo.UpdateGenerateInfoVo; +import com.lframework.starter.web.gen.dto.simpledb.OriSimpleTableDto; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import lombok.NonNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDataEntityServiceImpl extends + BaseMpServiceImpl implements GenDataEntityService { + + @Autowired + private GenerateInfoService generateInfoService; + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Autowired + private SimpleDBService simpleDBService; + + @Autowired + private GenCreateColumnConfigService genCreateColumnConfigService; + + @Autowired + private GenUpdateColumnConfigService genUpdateColumnConfigService; + + @Autowired + private GenQueryColumnConfigService genQueryColumnConfigService; + + @Autowired + private GenQueryParamsColumnConfigService genQueryParamsColumnConfigService; + + @Autowired + private GenDetailColumnConfigService genDetailColumnConfigService; + + @Autowired + private GenViewTypeConverter genViewTypeConverter; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QueryDataEntityVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QueryDataEntityVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenDataEntitySelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public GenDataEntity findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateDataEntityVo data) { + GenDataEntity record = new GenDataEntity(); + record.setId(IdUtil.getId()); + record.setName(data.getName()); + if (!StringUtil.isBlank(data.getCategoryId())) { + record.setCategoryId(data.getCategoryId()); + } + record.setAvailable(Boolean.TRUE); + record.setDescription( + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR : data.getDescription()); + + + + OriSimpleTableDto table = simpleDBService.getByTableName(data.getTableName()); + if (ObjectUtil.isNull(table)) { + throw new DefaultClientException("数据表【" + data.getTableName() + "】不存在!"); + } + + record.setTableSchema(table.getTableSchema()); + record.setTableName(table.getTableName()); + record.setEngine(table.getEngine()); + record.setTableCollation(table.getTableCollation()); + record.setTableComment(table.getTableComment()); + record.setConvertType(GenConvertType.UNDERLINE_TO_CAMEL); + + this.save(record); + + int orderNo = 1; + for (GenDataEntityDetailVo column : data.getColumns()) { + GenSimpleTableColumn columnDto = table.getColumns().stream() + .filter(t -> t.getDbColumnName().equals(column.getId())).findFirst().orElse(null); + if (columnDto == null) { + throw new DefaultClientException("字段【" + column.getId() + "】不存在!"); + } + + GenDataEntityDetail detail = this.buildDetail(column, columnDto); + detail.setId(IdUtil.getId()); + detail.setEntityId(record.getId()); + detail.setColumnOrder(orderNo); + + genDataEntityDetailService.save(detail); + + orderNo++; + } + + // 设置默认的基础设置 + UpdateGenerateInfoVo updateGenerateInfoVo = new UpdateGenerateInfoVo(); + updateGenerateInfoVo.setTemplateType(GenTemplateType.LIST.getCode()); + updateGenerateInfoVo.setPackageName("com.lframework"); + updateGenerateInfoVo.setModuleName(StringPool.EMPTY_STR); + updateGenerateInfoVo.setBizName( + GenStringConverter.convertToNormalLowerCase(GenConvertType.UNDERLINE_TO_CAMEL, + record.getTableName())); + // 强制转驼峰并且首字母大写 + String className = GenStringConverter.convertToCamelCase(GenConvertType.UNDERLINE_TO_CAMEL, + record.getTableName()); + updateGenerateInfoVo.setClassName( + className.substring(0, 1).toUpperCase() + className.substring(1)); + updateGenerateInfoVo.setClassDescription( + StringUtil.isEmpty(record.getTableComment()) ? StringPool.EMPTY_STR + : record.getTableComment()); + updateGenerateInfoVo.setKeyType(GenKeyType.SNOW_FLAKE.getCode()); + updateGenerateInfoVo.setMenuCode(StringPool.EMPTY_STR); + updateGenerateInfoVo.setMenuName(StringPool.EMPTY_STR); + updateGenerateInfoVo.setDetailSpan(4); + updateGenerateInfoVo.setIsCache(true); + updateGenerateInfoVo.setHasDelete(false); + + generateInfoService.updateGenerate(record.getId(), updateGenerateInfoVo); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateDataEntityVo vo) { + GenDataEntity record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("数据实体不存在!"); + } + Wrapper updateWrapper = Wrappers.lambdaUpdate(GenDataEntity.class) + .eq(GenDataEntity::getId, vo.getId()).set(GenDataEntity::getName, vo.getName()) + .set(GenDataEntity::getAvailable, vo.getAvailable()).set(GenDataEntity::getCategoryId, + StringUtil.isBlank(vo.getCategoryId()) ? null : vo.getCategoryId()) + .set(GenDataEntity::getDescription, + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + this.update(updateWrapper); + + List columnDtos = genDataEntityDetailService.getByEntityId(record.getId()); + + int orderNo = 1; + for (GenDataEntityDetailVo column : vo.getColumns()) { + GenDataEntityDetail detail = columnDtos.stream() + .filter(t -> t.getId().equals(column.getId())).findFirst().orElse(null); + detail.setName(column.getName()); + + detail.setDataType(EnumUtil.getByCode(GenDataType.class, column.getDataType())); + detail.setDescription(column.getDescription()); + detail.setViewType(EnumUtil.getByCode(GenViewType.class, column.getViewType())); + detail.setFixEnum(column.getFixEnum()); + detail.setEnumBack(column.getEnumBack()); + detail.setEnumFront(column.getEnumFront()); + detail.setRegularExpression(column.getRegularExpression()); + detail.setIsOrder(column.getIsOrder()); + detail.setOrderType(EnumUtil.getByCode(GenOrderType.class, column.getOrderType())); + detail.setLen(column.getLen()); + detail.setDecimals(column.getDecimals()); + detail.setDataDicId(StringPool.EMPTY_STR); + detail.setCustomSelectorId(StringPool.EMPTY_STR); + if (!StringUtil.isBlank(column.getDataDicId()) + && detail.getViewType() == GenViewType.DATA_DIC) { + detail.setDataDicId(column.getDataDicId()); + } + if (!StringUtil.isBlank(column.getCustomSelectorId()) + && detail.getViewType() == GenViewType.CUSTOM_SELECTOR) { + detail.setCustomSelectorId(column.getCustomSelectorId()); + } + + if (!genViewTypeConverter.canConvert(detail.getViewType(), detail.getDataType())) { + List viewTypes = genViewTypeConverter.convert(detail.getDataType()); + throw new DefaultClientException( + "字段【" + detail.getName() + "】数据类型和显示类型不匹配,当前数据类型为【" + detail.getDataType().getDesc() + + "】," + (!CollectionUtil.isEmpty(viewTypes) ? "显示类型只能为【" + CollectionUtil.join( + genViewTypeConverter.convert(detail.getDataType()).stream() + .map(GenViewType::getDesc) + .collect(Collectors.toList()), StringPool.STR_SPLIT_CN) + "】" : "暂不支持显示此数据类型")); + } + detail.setColumnOrder(orderNo); + + genDataEntityDetailService.updateById(detail); + + orderNo++; + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(@NonNull String id) { + + GenDataEntity record = getBaseMapper().selectById(id); + if (record == null) { + throw new DefaultClientException("数据实体不存在!"); + } + + List columns = genDataEntityDetailService.getByEntityId(id); + List columnIds = columns.stream().map(GenDataEntityDetail::getId) + .collect(Collectors.toList()); + + getBaseMapper().deleteById(id); + + genDataEntityDetailService.deleteByEntityId(id); + + DataEntityDeleteEvent event = new DataEntityDeleteEvent(this); + event.setId(id); + event.setName(record.getName()); + event.setColumnIds(columnIds); + + ApplicationUtil.publishEvent(event); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenDataEntity.class) + .set(GenDataEntity::getAvailable, Boolean.TRUE).eq(GenDataEntity::getId, id); + getBaseMapper().update(wrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenDataEntity.class) + .set(GenDataEntity::getAvailable, Boolean.FALSE).eq(GenDataEntity::getId, id); + getBaseMapper().update(wrapper); + } + + @Override + public DataEntityGenerateDto getGenerateById(String id) { + DataEntityGenerateDto result = new DataEntityGenerateDto(); + + List columns = genDataEntityDetailService.getByEntityId(id); + result.setColumns(columns); + + GenGenerateInfoDto generateInfo = generateInfoService.getByEntityId(id); + result.setGenerateInfo(generateInfo); + + List createColumnConfigDtos = genCreateColumnConfigService.getByDataEntityId( + id); + result.setCreateConfigs(createColumnConfigDtos); + + List updateColumnConfigDtos = genUpdateColumnConfigService.getByDataEntityId( + id); + result.setUpdateConfigs(updateColumnConfigDtos); + + List queryColumnConfigDtos = genQueryColumnConfigService.getByDataEntityId( + id); + result.setQueryConfigs(queryColumnConfigDtos); + + List queryParamsColumnConfigDtos = genQueryParamsColumnConfigService.getByDataEntityId( + id); + result.setQueryParamsConfigs(queryParamsColumnConfigDtos); + + List detailColumnConfigDtos = genDetailColumnConfigService.getByDataEntityId( + id); + result.setDetailConfigs(detailColumnConfigDtos); + + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateGenerate(UpdateDataEntityGenerateVo vo) { + + generateInfoService.updateGenerate(vo.getId(), vo.getGenerateInfo()); + + genCreateColumnConfigService.updateGenerate(vo.getId(), vo.getCreateConfigs()); + + genUpdateColumnConfigService.updateGenerate(vo.getId(), vo.getUpdateConfigs()); + + genQueryColumnConfigService.updateGenerate(vo.getId(), vo.getQueryConfigs()); + + genQueryParamsColumnConfigService.updateGenerate(vo.getId(), vo.getQueryParamsConfigs()); + + genDetailColumnConfigService.updateGenerate(vo.getId(), vo.getDetailConfigs()); + + Wrapper updateWrapper = Wrappers.lambdaUpdate(GenDataEntity.class) + .set(GenDataEntity::getGenStatus, GenStatus.SET_GEN).eq(GenDataEntity::getId, vo.getId()); + getBaseMapper().update(updateWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void syncTable(String id) { + // 查询simpleTable + GenDataEntity table = this.getById(id); + if (table == null) { + throw new DefaultClientException("数据表不存在!"); + } + List columns = genDataEntityDetailService.getByEntityId(table.getId()); + + // 最新的数据库结构 + OriSimpleTableDto oriTable = simpleDBService.getByTableName(table.getTableName()); + List oriColumns = oriTable.getColumns(); + + // 1、列是否匹配 + // db中是否有新增列 + List finalColumns = columns; + List newDbColumns = oriColumns.stream().filter( + t -> finalColumns.stream().noneMatch(c -> c.getDbColumnName().equals(t.getDbColumnName()))) + .collect(Collectors.toList()); + // 类型发生变化的列 + List changeTypeColumns = oriColumns.stream().filter( + t -> finalColumns.stream().anyMatch( + c -> c.getDbColumnName().equals(t.getDbColumnName()) && c.getDbDataType() != t.getDataType())) + .collect(Collectors.toList()); + if (!CollectionUtil.isEmpty(changeTypeColumns)) { + newDbColumns.addAll(changeTypeColumns); + } + + // db中是否有删除列 + List deleteDbColumns = columns.stream().filter( + t -> oriColumns.stream().noneMatch(c -> c.getDbColumnName().equals(t.getDbColumnName())) + || changeTypeColumns.stream() + .anyMatch(c2 -> c2.getDbColumnName().equals(t.getDbColumnName()))) + .collect(Collectors.toList()); + + // 先删除、后新增 + if (!CollectionUtil.isEmpty(deleteDbColumns)) { + for (GenDataEntityDetail deleteDbColumn : deleteDbColumns) { + genDataEntityDetailService.removeById(deleteDbColumn.getId()); + // 发布删除事件 + DataEntityDetailDeleteEvent event = new DataEntityDetailDeleteEvent(this); + event.setId(deleteDbColumn.getId()); + event.setName(deleteDbColumn.getDbColumnName()); + ApplicationUtil.publishEvent(event); + } + } + + List details = genDataEntityDetailService.getByEntityId(table.getId()); + if (CollectionUtil.isEmpty(details)) { + details = new ArrayList<>(); + } + int orderNo = 1; + for (GenDataEntityDetail detail : details) { + detail.setColumnOrder(orderNo); + genDataEntityDetailService.updateById(detail); + orderNo++; + } + + table = this.getById(id); + columns = details; + + orderNo = 1; + for (GenDataEntityDetail column : columns) { + column.setOrdinalPosition(orderNo); + genDataEntityDetailService.updateById(column); + orderNo++; + } + + if (!CollectionUtil.isEmpty(newDbColumns)) { + for (GenSimpleTableColumn columnDto : newDbColumns) { + GenDataEntityDetail detail = this.buildDetail(columnDto); + detail.setId(IdUtil.getId()); + detail.setColumnOrder(orderNo); + detail.setEntityId(table.getId()); + genDataEntityDetailService.save(detail); + + orderNo++; + } + } + } + + private GenDataEntityDetail buildDetail(GenSimpleTableColumn columnDto) { + GenDataEntityDetail detail = new GenDataEntityDetail(); + + detail.setName(columnDto.getColumnComment()); + detail.setColumnName(GenStringConverter.convertToCamelCase(GenConvertType.UNDERLINE_TO_CAMEL, + columnDto.getDbColumnName())); + detail.setIsKey(columnDto.getIsKey()); + detail.setDataType(columnDto.getDataType()); + List viewTypes = genViewTypeConverter.convert(detail.getDataType()); + if (CollectionUtil.isEmpty(viewTypes)) { + throw new DefaultClientException("字段:" + columnDto.getDbColumnName() + "类型暂不支持!"); + } + detail.setViewType(viewTypes.get(0)); + detail.setFixEnum(Boolean.FALSE); + detail.setIsOrder(Boolean.FALSE); + + detail.setDbColumnName(columnDto.getDbColumnName()); + detail.setDbDataType(columnDto.getDataType()); + detail.setIsNullable(columnDto.getIsNullable()); + detail.setIsKey(columnDto.getIsKey()); + detail.setColumnDefault(columnDto.getColumnDefault()); + detail.setOrdinalPosition(columnDto.getOrdinalPosition()); + detail.setColumnComment(columnDto.getColumnComment()); + detail.setDbLen(columnDto.getLen()); + detail.setDbDecimals(columnDto.getDecimals()); + + return detail; + } + + private GenDataEntityDetail buildDetail(GenDataEntityDetailVo column, + GenSimpleTableColumn columnDto) { + GenDataEntityDetail detail = new GenDataEntityDetail(); + detail.setColumnName(GenStringConverter.convertToCamelCase(GenConvertType.UNDERLINE_TO_CAMEL, + columnDto.getDbColumnName())); + detail.setIsKey(columnDto.getIsKey()); + + detail.setName(column.getName()); + detail.setDataType(EnumUtil.getByCode(GenDataType.class, column.getDataType())); + detail.setDescription(column.getDescription()); + detail.setViewType(EnumUtil.getByCode(GenViewType.class, column.getViewType())); + detail.setFixEnum(column.getFixEnum()); + detail.setEnumBack(column.getEnumBack()); + detail.setEnumFront(column.getEnumFront()); + detail.setRegularExpression(column.getRegularExpression()); + detail.setIsOrder(column.getIsOrder()); + detail.setOrderType(EnumUtil.getByCode(GenOrderType.class, column.getOrderType())); + detail.setLen(column.getLen()); + detail.setDecimals(column.getDecimals()); + detail.setDataDicId(StringPool.EMPTY_STR); + detail.setCustomSelectorId(StringPool.EMPTY_STR); + if (!StringUtil.isBlank(column.getDataDicId()) + && detail.getViewType() == GenViewType.DATA_DIC) { + detail.setDataDicId(column.getDataDicId()); + } + if (!StringUtil.isBlank(column.getCustomSelectorId()) + && detail.getViewType() == GenViewType.CUSTOM_SELECTOR) { + detail.setCustomSelectorId(column.getCustomSelectorId()); + } + detail.setDbColumnName(columnDto.getDbColumnName()); + detail.setDbDataType(columnDto.getDataType()); + detail.setIsNullable(columnDto.getIsNullable()); + detail.setColumnDefault(columnDto.getColumnDefault()); + detail.setOrdinalPosition(columnDto.getOrdinalPosition()); + detail.setColumnComment(columnDto.getColumnComment()); + detail.setDbLen(columnDto.getLen()); + detail.setDbDecimals(columnDto.getDecimals()); + + if (!genViewTypeConverter.canConvert(detail.getViewType(), detail.getDataType())) { + List viewTypes = genViewTypeConverter.convert(detail.getDataType()); + throw new DefaultClientException( + "字段【" + detail.getName() + "】数据类型和显示类型不匹配,当前数据类型为【" + detail.getDataType().getDesc() + + "】," + (!CollectionUtil.isEmpty(viewTypes) ? "显示类型只能为【" + CollectionUtil.join( + genViewTypeConverter.convert(detail.getDataType()).stream().map(GenViewType::getDesc) + .collect(Collectors.toList()), StringPool.STR_SPLIT_CN) + "】" : "暂不支持显示此数据类型")); + } + + return detail; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjCategoryServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjCategoryServiceImpl.java new file mode 100644 index 0000000..0748e51 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjCategoryServiceImpl.java @@ -0,0 +1,132 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.mappers.GenDataObjCategoryMapper; +import com.lframework.starter.web.gen.service.GenDataObjCategoryService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import com.lframework.starter.web.gen.vo.data.obj.category.CreateGenDataObjCategoryVo; +import com.lframework.starter.web.gen.vo.data.obj.category.GenDataObjCategorySelectorVo; +import com.lframework.starter.web.gen.vo.data.obj.category.UpdateGenDataObjCategoryVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDataObjCategoryServiceImpl extends + BaseMpServiceImpl implements + GenDataObjCategoryService { + + @Autowired + private GenDataObjService genDataObjService; + + @Cacheable(value = GenDataObjCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List queryList() { + return getBaseMapper().query(); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenDataObjCategorySelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenDataObjCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenDataObjCategory findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenDataObjCategoryVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(GenDataObjCategory.class) + .eq(GenDataObjCategory::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenDataObjCategory.class) + .eq(GenDataObjCategory::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenDataObjCategory record = new GenDataObjCategory(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenDataObjCategoryVo vo) { + Wrapper checkWrapper = Wrappers.lambdaQuery(GenDataObjCategory.class) + .eq(GenDataObjCategory::getCode, vo.getCode()) + .ne(GenDataObjCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(GenDataObjCategory.class) + .eq(GenDataObjCategory::getName, vo.getName()) + .ne(GenDataObjCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + GenDataObjCategory record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("数据对象分类不存在!"); + } + + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.updateById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataObj.class) + .eq(GenDataObj::getCategoryId, id); + if (genDataObjService.count(queryWrapper) > 0) { + throw new DefaultClientException("此分类下存在数据对象,无法删除!"); + } + + this.removeById(id); + } + + @CacheEvict(value = GenDataObjCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjDetailServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjDetailServiceImpl.java new file mode 100644 index 0000000..4637baa --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjDetailServiceImpl.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.mappers.GenDataObjDetailMapper; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDataObjDetailServiceImpl extends + BaseMpServiceImpl implements + GenDataObjDetailService { + + @Override + public List getByObjId(String objId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataObjDetail.class) + .eq(GenDataObjDetail::getDataObjId, objId).orderByAsc(GenDataObjDetail::getOrderNo); + return this.list(queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByObjId(String objId) { + Wrapper deleteWrapper = Wrappers.lambdaQuery(GenDataObjDetail.class) + .eq(GenDataObjDetail::getDataObjId, objId); + getBaseMapper().delete(deleteWrapper); + } + + @Override + public Boolean entityDetailIsRela(String entityDetailId) { + return getBaseMapper().entityDetailIsRela(entityDetailId); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjQueryDetailServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjQueryDetailServiceImpl.java new file mode 100644 index 0000000..6bbb92b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjQueryDetailServiceImpl.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.gen.mappers.GenDataObjQueryDetailMapper; +import com.lframework.starter.web.gen.service.GenDataObjQueryDetailService; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDataObjQueryDetailServiceImpl extends + BaseMpServiceImpl implements + GenDataObjQueryDetailService { + + @Override + public List getByObjId(String objId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataObjQueryDetail.class) + .eq(GenDataObjQueryDetail::getDataObjId, objId) + .orderByAsc(GenDataObjQueryDetail::getOrderNo); + return this.list(queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByObjId(String objId) { + Wrapper deleteWrapper = Wrappers.lambdaQuery(GenDataObjQueryDetail.class) + .eq(GenDataObjQueryDetail::getDataObjId, objId); + getBaseMapper().delete(deleteWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjServiceImpl.java new file mode 100644 index 0000000..4b6768a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDataObjServiceImpl.java @@ -0,0 +1,308 @@ +package com.lframework.starter.web.gen.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.common.utils.ThreadUtil; +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryObj; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenRelaMode; +import com.lframework.starter.web.gen.enums.GenRelaType; +import com.lframework.starter.web.gen.event.DataObjDeleteEvent; +import com.lframework.starter.web.gen.event.DataObjQueryDetailDeleteEvent; +import com.lframework.starter.web.gen.mappers.GenDataObjMapper; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.gen.service.GenDataObjQueryDetailService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import com.lframework.starter.web.gen.vo.data.obj.CreateGenDataObjVo; +import com.lframework.starter.web.gen.vo.data.obj.GenDataObjDetailVo; +import com.lframework.starter.web.gen.vo.data.obj.GenDataObjQueryDetailVo; +import com.lframework.starter.web.gen.vo.data.obj.GenDataObjSelectorVo; +import com.lframework.starter.web.gen.vo.data.obj.QueryGenDataObjVo; +import com.lframework.starter.web.gen.vo.data.obj.UpdateGenDataObjVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import lombok.NonNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDataObjServiceImpl extends + BaseMpServiceImpl implements GenDataObjService { + + @Autowired + private GenDataObjDetailService genDataObjDetailService; + + @Autowired + private GenDataObjQueryDetailService genDataObjQueryDetailService; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, QueryGenDataObjVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QueryGenDataObjVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + GenDataObjSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = GenDataObj.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public GenDataObj findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateGenDataObjVo data) { + + GenDataObj record = new GenDataObj(); + record.setId(IdUtil.getId()); + record.setName(data.getName()); + if (!StringUtil.isBlank(data.getCategoryId())) { + record.setCategoryId(data.getCategoryId()); + } + record.setMainTableId(data.getMainTableId()); + record.setMainTableAlias(data.getMainTableAlias()); + record.setAvailable(Boolean.TRUE); + record.setDescription( + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR : data.getDescription()); + + this.save(record); + + int orderNo = 1; + if (!CollectionUtil.isEmpty(data.getColumns())) { + for (GenDataObjDetailVo column : data.getColumns()) { + GenDataObjDetail detail = new GenDataObjDetail(); + detail.setId(IdUtil.getId()); + detail.setDataObjId(record.getId()); + detail.setMainTableDetailIds( + CollectionUtil.join(column.getMainTableDetailIds(), StringPool.STR_SPLIT)); + detail.setRelaType(EnumUtil.getByCode(GenRelaType.class, column.getRelaType())); + detail.setRelaMode(EnumUtil.getByCode(GenRelaMode.class, column.getRelaMode())); + detail.setSubTableId(column.getSubTableId()); + detail.setSubTableAlias(column.getSubTableAlias()); + detail.setSubTableDetailIds( + CollectionUtil.join(column.getSubTableDetailIds(), StringPool.STR_SPLIT)); + detail.setOrderNo(orderNo); + + genDataObjDetailService.save(detail); + + orderNo++; + } + } + + if (!CollectionUtil.isEmpty(data.getQueryColumns())) { + orderNo = 1; + for (GenDataObjQueryDetailVo queryColumn : data.getQueryColumns()) { + GenDataObjQueryDetail detail = new GenDataObjQueryDetail(); + detail.setId(IdUtil.getId()); + detail.setDataObjId(record.getId()); + detail.setCustomName(queryColumn.getCustomName()); + detail.setCustomSql(queryColumn.getCustomSql()); + detail.setCustomAlias(queryColumn.getCustomAlias()); + detail.setDataType(EnumUtil.getByCode(GenDataType.class, queryColumn.getDataType())); + detail.setOrderNo(orderNo); + + genDataObjQueryDetailService.save(detail); + + orderNo++; + } + } + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateGenDataObjVo data) { + + GenDataObj record = this.getById(data.getId()); + if (record == null) { + throw new DefaultClientException("数据对象不存在!"); + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(GenDataObj.class) + .eq(GenDataObj::getId, record.getId()).set(GenDataObj::getName, data.getName()) + .set(GenDataObj::getMainTableAlias, data.getMainTableAlias()).set(GenDataObj::getCategoryId, + StringUtil.isBlank(data.getCategoryId()) ? null : data.getCategoryId()) + .set(GenDataObj::getDescription, + StringUtil.isBlank(data.getDescription()) ? StringPool.EMPTY_STR + : data.getDescription()).set(GenDataObj::getAvailable, data.getAvailable()); + this.update(updateWrapper); + + List queryDetails = genDataObjQueryDetailService.getByObjId( + record.getId()); + + Wrapper deleteDetailWrapper = Wrappers.lambdaQuery(GenDataObjDetail.class) + .eq(GenDataObjDetail::getDataObjId, record.getId()); + genDataObjDetailService.remove(deleteDetailWrapper); + + Wrapper deleteQueryDetailWrapper = Wrappers.lambdaQuery( + GenDataObjQueryDetail.class).eq(GenDataObjQueryDetail::getDataObjId, record.getId()); + genDataObjQueryDetailService.remove(deleteQueryDetailWrapper); + + int orderNo = 1; + if (!CollectionUtil.isEmpty(data.getColumns())) { + for (GenDataObjDetailVo column : data.getColumns()) { + GenDataObjDetail detail = new GenDataObjDetail(); + detail.setId(column.getId()); + detail.setDataObjId(record.getId()); + detail.setMainTableDetailIds( + CollectionUtil.join(column.getMainTableDetailIds(), StringPool.STR_SPLIT)); + detail.setRelaType(EnumUtil.getByCode(GenRelaType.class, column.getRelaType())); + detail.setRelaMode(EnumUtil.getByCode(GenRelaMode.class, column.getRelaMode())); + detail.setSubTableId(column.getSubTableId()); + detail.setSubTableAlias(column.getSubTableAlias()); + detail.setSubTableDetailIds( + CollectionUtil.join(column.getSubTableDetailIds(), StringPool.STR_SPLIT)); + detail.setOrderNo(orderNo); + + genDataObjDetailService.save(detail); + + orderNo++; + } + } + + List newQueryDetailIds = new ArrayList<>(); + if (!CollectionUtil.isEmpty(data.getQueryColumns())) { + orderNo = 1; + for (GenDataObjQueryDetailVo queryColumn : data.getQueryColumns()) { + GenDataObjQueryDetail detail = new GenDataObjQueryDetail(); + detail.setId(queryColumn.getId()); + detail.setDataObjId(record.getId()); + detail.setCustomName(queryColumn.getCustomName()); + detail.setCustomSql(queryColumn.getCustomSql()); + detail.setCustomAlias(queryColumn.getCustomAlias()); + detail.setDataType(EnumUtil.getByCode(GenDataType.class, queryColumn.getDataType())); + detail.setOrderNo(orderNo); + + genDataObjQueryDetailService.save(detail); + + orderNo++; + + newQueryDetailIds.add(detail.getId()); + } + } + + List deleteQueryDetailIds = queryDetails.stream().map(GenDataObjQueryDetail::getId) + .filter(t -> !newQueryDetailIds.contains(t)).collect( + Collectors.toList()); + + if (!CollectionUtil.isEmpty(deleteQueryDetailIds)) { + for (String deleteDetailId : deleteQueryDetailIds) { + DataObjQueryDetailDeleteEvent event = new DataObjQueryDetailDeleteEvent(this); + event.setId(deleteDetailId); + event.setName( + queryDetails.stream().filter(t -> t.getId().equals(deleteDetailId)).findFirst().get() + .getCustomName()); + + ApplicationUtil.publishEvent(event); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(@NonNull String id) { + GenDataObj record = this.getById(id); + if (record == null) { + return; + } + + List details = genDataObjDetailService.getByObjId(id); + List queryDetails = genDataObjQueryDetailService.getByObjId(id); + + getBaseMapper().deleteById(id); + + genDataObjDetailService.deleteByObjId(id); + + genDataObjQueryDetailService.deleteByObjId(id); + + DataObjDeleteEvent event = new DataObjDeleteEvent(this); + event.setId(id); + event.setName(record.getName()); + event.setDetailIds(details.stream().map(GenDataObjDetail::getId).collect(Collectors.toList())); + event.setQueryDetailIds(queryDetails.stream().map(GenDataObjQueryDetail::getId).collect( + Collectors.toList())); + + ApplicationUtil.publishEvent(event); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenDataObj.class) + .set(GenDataObj::getAvailable, Boolean.TRUE).eq(GenDataObj::getId, id); + getBaseMapper().update(wrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(String id) { + + Wrapper wrapper = Wrappers.lambdaUpdate(GenDataObj.class) + .set(GenDataObj::getAvailable, Boolean.FALSE).eq(GenDataObj::getId, id); + getBaseMapper().update(wrapper); + } + + @Override + public List getRelaGenDataEntityIds(String entityId) { + return getBaseMapper().getRelaGenDataEntityIds(entityId); + } + + @CacheEvict(value = {GenDataObj.CACHE_NAME, DataObjectQueryObj.CACHE_NAME}, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + ThreadUtil.execAsync(() -> { + GenCustomListService genCustomListService = ApplicationUtil.getBean(GenCustomListService.class); + List ids = genCustomListService.getRelaGenDataObjIds(String.valueOf(key)); + if (CollectionUtil.isNotEmpty(ids)) { + genCustomListService.cleanCacheByKeys(ids); + } + }); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDetailColumnConfigServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDetailColumnConfigServiceImpl.java new file mode 100644 index 0000000..dd59897 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenDetailColumnConfigServiceImpl.java @@ -0,0 +1,73 @@ +package com.lframework.starter.web.gen.impl; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.dto.gen.GenDetailColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenDetailColumnConfig; +import com.lframework.starter.web.gen.mappers.GenDetailColumnConfigMapper; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenDetailColumnConfigService; +import com.lframework.starter.web.gen.vo.UpdateDetailColumnConfigVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenDetailColumnConfigServiceImpl + extends BaseMpServiceImpl + implements GenDetailColumnConfigService { + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Override + public List getByDataEntityId(String entityId) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (CollectionUtil.isEmpty(columns)) { + return CollectionUtil.emptyList(); + } + + return getBaseMapper().getByIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateGenerate(String entityId, List vo) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (!CollectionUtil.isEmpty(columns)) { + getBaseMapper().deleteBatchIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + if (!CollectionUtil.isEmpty(vo)) { + int orderNo = 1; + for (UpdateDetailColumnConfigVo updateDetailColumnConfigVo : vo) { + GenDetailColumnConfig record = new GenDetailColumnConfig(); + record.setId(updateDetailColumnConfigVo.getId()); + record.setSpan(updateDetailColumnConfigVo.getSpan()); + record.setOrderNo(orderNo++); + + getBaseMapper().insert(record); + } + } + } + + @Override + public GenDetailColumnConfigDto findById(String id) { + + return getBaseMapper().findById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + getBaseMapper().deleteById(id); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryColumnConfigServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryColumnConfigServiceImpl.java new file mode 100644 index 0000000..e4afd03 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryColumnConfigServiceImpl.java @@ -0,0 +1,78 @@ +package com.lframework.starter.web.gen.impl; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.dto.gen.GenQueryColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenQueryColumnConfig; +import com.lframework.starter.web.gen.enums.GenQueryWidthType; +import com.lframework.starter.web.gen.mappers.GenQueryColumnConfigMapper; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenQueryColumnConfigService; +import com.lframework.starter.web.gen.vo.UpdateQueryColumnConfigVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.EnumUtil; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenQueryColumnConfigServiceImpl extends + BaseMpServiceImpl + implements GenQueryColumnConfigService { + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Override + public List getByDataEntityId(String entityId) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (CollectionUtil.isEmpty(columns)) { + return CollectionUtil.emptyList(); + } + + return getBaseMapper().getByIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateGenerate(String entityId, List vo) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (!CollectionUtil.isEmpty(columns)) { + getBaseMapper().deleteBatchIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + if (!CollectionUtil.isEmpty(vo)) { + int orderNo = 1; + for (UpdateQueryColumnConfigVo updateQueryColumnConfigVo : vo) { + GenQueryColumnConfig record = new GenQueryColumnConfig(); + record.setId(updateQueryColumnConfigVo.getId()); + record.setWidthType( + EnumUtil.getByCode(GenQueryWidthType.class, updateQueryColumnConfigVo.getWidthType())); + record.setWidth(updateQueryColumnConfigVo.getWidth()); + record.setSortable(updateQueryColumnConfigVo.getSortable()); + record.setOrderNo(orderNo++); + + getBaseMapper().insert(record); + } + } + } + + @Override + public GenQueryColumnConfigDto findById(String id) { + + return getBaseMapper().findById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + getBaseMapper().deleteById(id); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryParamsColumnConfigServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryParamsColumnConfigServiceImpl.java new file mode 100644 index 0000000..6af6239 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenQueryParamsColumnConfigServiceImpl.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.gen.impl; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.dto.gen.GenQueryParamsColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenQueryParamsColumnConfig; +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.gen.mappers.GenQueryParamsColumnConfigMapper; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenQueryParamsColumnConfigService; +import com.lframework.starter.web.gen.vo.UpdateQueryParamsColumnConfigVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.EnumUtil; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenQueryParamsColumnConfigServiceImpl + extends BaseMpServiceImpl + implements GenQueryParamsColumnConfigService { + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Override + public List getByDataEntityId(String entityId) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (CollectionUtil.isEmpty(columns)) { + return CollectionUtil.emptyList(); + } + + return getBaseMapper().getByIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateGenerate(String entityId, List vo) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (!CollectionUtil.isEmpty(columns)) { + getBaseMapper().deleteBatchIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + if (!CollectionUtil.isEmpty(vo)) { + int orderNo = 1; + for (UpdateQueryParamsColumnConfigVo updateQueryParamsColumnConfigVo : vo) { + GenQueryParamsColumnConfig record = new GenQueryParamsColumnConfig(); + record.setId(updateQueryParamsColumnConfigVo.getId()); + record.setQueryType( + EnumUtil.getByCode(GenQueryType.class, updateQueryParamsColumnConfigVo.getQueryType())); + record.setOrderNo(orderNo++); + + getBaseMapper().insert(record); + } + } + } + + @Override + public GenQueryParamsColumnConfigDto findById(String id) { + + return getBaseMapper().findById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + getBaseMapper().deleteById(id); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenUpdateColumnConfigServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenUpdateColumnConfigServiceImpl.java new file mode 100644 index 0000000..605cb53 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenUpdateColumnConfigServiceImpl.java @@ -0,0 +1,73 @@ +package com.lframework.starter.web.gen.impl; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.gen.dto.gen.GenUpdateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.entity.GenUpdateColumnConfig; +import com.lframework.starter.web.gen.mappers.GenUpdateColumnConfigMapper; +import com.lframework.starter.web.gen.service.GenDataEntityDetailService; +import com.lframework.starter.web.gen.service.GenUpdateColumnConfigService; +import com.lframework.starter.web.gen.vo.UpdateUpdateColumnConfigVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenUpdateColumnConfigServiceImpl + extends BaseMpServiceImpl + implements GenUpdateColumnConfigService { + + @Autowired + private GenDataEntityDetailService genDataEntityDetailService; + + @Override + public List getByDataEntityId(String entityId) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (CollectionUtil.isEmpty(columns)) { + return CollectionUtil.emptyList(); + } + + return getBaseMapper().getByIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateGenerate(String entityId, List vo) { + + List columns = genDataEntityDetailService.getByEntityId(entityId); + if (!CollectionUtil.isEmpty(columns)) { + getBaseMapper().deleteBatchIds( + columns.stream().map(GenDataEntityDetail::getId).collect(Collectors.toList())); + } + + if (!CollectionUtil.isEmpty(vo)) { + int orderNo = 1; + for (UpdateUpdateColumnConfigVo updateUpdateColumnConfigVo : vo) { + GenUpdateColumnConfig record = new GenUpdateColumnConfig(); + record.setId(updateUpdateColumnConfigVo.getId()); + record.setRequired(updateUpdateColumnConfigVo.getRequired()); + record.setOrderNo(orderNo++); + + getBaseMapper().insert(record); + } + } + } + + @Override + public GenUpdateColumnConfigDto findById(String id) { + + return getBaseMapper().findById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + getBaseMapper().deleteById(id); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenerateInfoServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenerateInfoServiceImpl.java new file mode 100644 index 0000000..a812a38 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/GenerateInfoServiceImpl.java @@ -0,0 +1,67 @@ +package com.lframework.starter.web.gen.impl; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import com.lframework.starter.web.gen.entity.GenGenerateInfo; +import com.lframework.starter.web.gen.enums.GenKeyType; +import com.lframework.starter.web.gen.enums.GenTemplateType; +import com.lframework.starter.web.gen.mappers.GenGenerateInfoMapper; +import com.lframework.starter.web.gen.service.GenerateInfoService; +import com.lframework.starter.web.gen.vo.UpdateGenerateInfoVo; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.EnumUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GenerateInfoServiceImpl extends + BaseMpServiceImpl + implements GenerateInfoService { + + @Override + public GenGenerateInfoDto getByEntityId(String entityId) { + + return getBaseMapper().getByDataObjId(entityId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateGenerate(String dataObjId, UpdateGenerateInfoVo vo) { + + GenGenerateInfo data = getBaseMapper().selectById(dataObjId); + if (data != null) { + getBaseMapper().deleteById(data.getId()); + } else { + data = new GenGenerateInfo(); + } + data.setId(dataObjId); + data.setTemplateType(EnumUtil.getByCode(GenTemplateType.class, vo.getTemplateType())); + data.setPackageName(vo.getPackageName()); + data.setModuleName(vo.getModuleName()); + data.setBizName(vo.getBizName()); + data.setClassName(vo.getClassName()); + data.setClassDescription(vo.getClassDescription()); + if (!StringUtil.isBlank(vo.getParentMenuId())) { + data.setParentMenuId(vo.getParentMenuId()); + } + data.setKeyType(EnumUtil.getByCode(GenKeyType.class, vo.getKeyType())); + + if (!StringUtil.isBlank(vo.getAuthor())) { + data.setAuthor(vo.getAuthor()); + } + data.setMenuCode(vo.getMenuCode()); + data.setMenuName(vo.getMenuName()); + data.setDetailSpan(vo.getDetailSpan()); + data.setIsCache(vo.getIsCache()); + data.setHasDelete(vo.getHasDelete()); + + getBaseMapper().insert(data); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByEntityId(String entityId) { + + getBaseMapper().deleteById(entityId); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleDBServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleDBServiceImpl.java new file mode 100644 index 0000000..bdaacf1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleDBServiceImpl.java @@ -0,0 +1,72 @@ +package com.lframework.starter.web.gen.impl; + +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.gen.mappers.DBMapper; +import com.lframework.starter.web.gen.mappers.SimpleDBMapper; +import com.lframework.starter.web.gen.service.SimpleDBService; +import com.lframework.starter.web.gen.service.SimpleTableColumnService; +import com.lframework.starter.web.gen.vo.simpledb.QuerySimpleTableColumnVo; +import com.lframework.starter.web.gen.vo.simpledb.SimpleTableSelectorVo; +import com.lframework.starter.web.gen.dto.simpledb.OriSimpleTableDto; +import com.lframework.starter.web.gen.dto.simpledb.SimpleDBDto; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SimpleDBServiceImpl implements SimpleDBService { + + @Autowired + private SimpleDBMapper simpleDBMapper; + + @Autowired + private DBMapper dbMapper; + + @Autowired + private SimpleTableColumnService simpleTableColumnService; + + @Override + public String getCurrentDBName() { + return dbMapper.getCurrentDBName(); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SimpleTableSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = simpleDBMapper.selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public OriSimpleTableDto getByTableName(String tableName) { + OriSimpleTableDto table = simpleDBMapper.getByTableName(tableName); + if (ObjectUtil.isNull(table)) { + return table; + } + + QuerySimpleTableColumnVo queryVo = new QuerySimpleTableColumnVo(); + queryVo.setTableName(tableName); + + List columns = simpleTableColumnService.query(queryVo); + table.setColumns(columns); + + return table; + } + + @Override + public List listByIds(List tableNames) { + return simpleDBMapper.listByIds(tableNames); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleTableColumnServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleTableColumnServiceImpl.java new file mode 100644 index 0000000..8de198a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/impl/SimpleTableColumnServiceImpl.java @@ -0,0 +1,53 @@ +package com.lframework.starter.web.gen.impl; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.gen.mappers.GenSimpleTableColumnMapper; +import com.lframework.starter.web.gen.service.SimpleDBService; +import com.lframework.starter.web.gen.service.SimpleTableColumnService; +import com.lframework.starter.web.gen.vo.simpledb.QuerySimpleTableColumnVo; +import com.lframework.starter.web.gen.dto.simpledb.OriSimpleTableColumnDto; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.IdUtil; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SimpleTableColumnServiceImpl extends + BaseMpServiceImpl + implements SimpleTableColumnService { + + @Autowired + private SimpleDBService simpleDBService; + + @Override + public List query(QuerySimpleTableColumnVo vo) { + if (StringUtil.isBlank(vo.getTableSchema())) { + vo.setTableSchema(simpleDBService.getCurrentDBName()); + } + List columns = getBaseMapper().query(vo); + if (!CollectionUtil.isEmpty(columns)) { + + return columns.stream().map(t -> { + GenSimpleTableColumn column = new GenSimpleTableColumn(); + column.setId(IdUtil.getId()); + column.setColumnName(t.getColumnName()); + column.setIsNullable(t.getIsNullable()); + column.setIsKey(t.getIsKey()); + column.setColumnDefault(t.getColumnDefault()); + column.setOrdinalPosition(t.getOrdinalPosition()); + column.setColumnComment(t.getColumnComment()); + column.setDataType(t.getDataType().getDataType()); + column.setLen(t.getLen()); + column.setDecimals(t.getDecimals()); + + return column; + }).collect(Collectors.toList()); + } + + return null; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/CreateColumnConfigListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/CreateColumnConfigListener.java new file mode 100644 index 0000000..65b9cfc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/CreateColumnConfigListener.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.listeners; + +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.service.GenCreateColumnConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class CreateColumnConfigListener { + + @Component + public static class DeleteEntityListener implements ApplicationListener { + + @Autowired + private GenCreateColumnConfigService genCreateColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDeleteEvent event) { + + for (String columnId : event.getColumnIds()) { + genCreateColumnConfigService.deleteById(columnId); + } + } + } + + @Component + public static class DeleteEntityDetailListener implements + ApplicationListener { + + @Autowired + private GenCreateColumnConfigService genCreateColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDetailDeleteEvent event) { + + genCreateColumnConfigService.deleteById(event.getId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/DetailColumnConfigListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/DetailColumnConfigListener.java new file mode 100644 index 0000000..4297d94 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/DetailColumnConfigListener.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.listeners; + +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.service.GenDetailColumnConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class DetailColumnConfigListener { + + @Component + public static class DeleteEntityListener implements ApplicationListener { + + @Autowired + private GenDetailColumnConfigService genDetailColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDeleteEvent event) { + + for (String columnId : event.getColumnIds()) { + genDetailColumnConfigService.deleteById(columnId); + } + } + } + + @Component + public static class DeleteEntityDetailListener implements + ApplicationListener { + + @Autowired + private GenDetailColumnConfigService genDetailColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDetailDeleteEvent event) { + + genDetailColumnConfigService.deleteById(event.getId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomListListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomListListener.java new file mode 100644 index 0000000..b7e78bb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomListListener.java @@ -0,0 +1,90 @@ +package com.lframework.starter.web.gen.listeners; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.entity.GenCustomListDetail; +import com.lframework.starter.web.gen.entity.GenCustomListQueryParams; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.event.DataObjDeleteEvent; +import com.lframework.starter.web.gen.event.DataObjQueryDetailDeleteEvent; +import com.lframework.starter.web.gen.service.GenCustomListDetailService; +import com.lframework.starter.web.gen.service.GenCustomListQueryParamsService; +import com.lframework.starter.web.gen.service.GenCustomListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class GenCustomListListener { + + @Component + public static class DataObjDeleteListener implements ApplicationListener { + + @Autowired + private GenCustomListService genCustomListService; + + @Override + public void onApplicationEvent(DataObjDeleteEvent event) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenCustomList.class) + .eq(GenCustomList::getDataObjId, event.getId()); + if (genCustomListService.count(queryWrapper) > 0) { + throw new DefaultClientException("数据对象【" + event.getName() + "】已关联自定义列表,无法删除!"); + } + } + } + + @Component + public static class DataEntityDetailDeleteListener implements + ApplicationListener { + + @Autowired + private GenCustomListDetailService genCustomListDetailService; + + @Autowired + private GenCustomListQueryParamsService genCustomListQueryParamsService; + + @Override + public void onApplicationEvent(DataEntityDetailDeleteEvent event) { + + Wrapper queryDetailWrapper = Wrappers.lambdaQuery( + GenCustomListDetail.class).eq(GenCustomListDetail::getDataEntityId, event.getId()); + if (genCustomListDetailService.count(queryDetailWrapper) > 0) { + throw new DefaultClientException("字段【" + event.getName() + "】已关联自定义列表,无法删除!"); + } + + Wrapper queryQueryDetailWrapper = Wrappers.lambdaQuery( + GenCustomListQueryParams.class).eq(GenCustomListQueryParams::getRelaId, event.getId()); + if (genCustomListQueryParamsService.count(queryQueryDetailWrapper) > 0) { + throw new DefaultClientException("字段【" + event.getName() + "】已关联自定义列表,无法删除!"); + } + } + } + + @Component + public static class DataObjQueryDetailDeleteListener implements + ApplicationListener { + + @Autowired + private GenCustomListDetailService genCustomListDetailService; + + @Autowired + private GenCustomListQueryParamsService genCustomListQueryParamsService; + + @Override + public void onApplicationEvent(DataObjQueryDetailDeleteEvent event) { + Wrapper queryDetailWrapper = Wrappers.lambdaQuery( + GenCustomListDetail.class).eq(GenCustomListDetail::getDataEntityId, event.getId()); + if (genCustomListDetailService.count(queryDetailWrapper) > 0) { + throw new DefaultClientException("字段【" + event.getName() + "】已关联自定义列表,无法删除!"); + } + + Wrapper queryQueryDetailWrapper = Wrappers.lambdaQuery( + GenCustomListQueryParams.class).eq(GenCustomListQueryParams::getRelaId, event.getId()); + if (genCustomListQueryParamsService.count(queryQueryDetailWrapper) > 0) { + throw new DefaultClientException("字段【" + event.getName() + "】已关联自定义列表,无法删除!"); + } + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomSelectorListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomSelectorListener.java new file mode 100644 index 0000000..738371b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenCustomSelectorListener.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.listeners; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.event.CustomListDeleteEvent; +import com.lframework.starter.web.gen.service.GenCustomSelectorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class GenCustomSelectorListener { + + @Component + public static class CustomListDeleteListener implements + ApplicationListener { + + @Autowired + private GenCustomSelectorService genCustomSelectorService; + + @Override + public void onApplicationEvent(CustomListDeleteEvent event) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenCustomSelector.class) + .eq(GenCustomSelector::getCustomListId, event.getId()); + if (genCustomSelectorService.count(queryWrapper) > 0) { + throw new DefaultClientException("自定义列表【" + event.getName() + "】已关联自定义选择器,无法删除!"); + } + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenDataObjListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenDataObjListener.java new file mode 100644 index 0000000..0af75b4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenDataObjListener.java @@ -0,0 +1,59 @@ +package com.lframework.starter.web.gen.listeners; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.service.GenDataObjDetailService; +import com.lframework.starter.web.gen.service.GenDataObjService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class GenDataObjListener { + + @Component + public static class DataEntityDeleteListener implements + ApplicationListener { + + @Autowired + private GenDataObjService genDataObjService; + + @Autowired + private GenDataObjDetailService genDataObjDetailService; + + @Override + public void onApplicationEvent(DataEntityDeleteEvent event) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(GenDataObj.class) + .eq(GenDataObj::getMainTableId, event.getId()); + if (genDataObjService.count(queryWrapper) > 0) { + throw new DefaultClientException("数据实体【" + event.getName() + "】已关联数据对象,无法删除!"); + } + + Wrapper queryDetailWrapper = Wrappers.lambdaQuery(GenDataObjDetail.class) + .eq(GenDataObjDetail::getSubTableId, event.getId()); + if (genDataObjDetailService.count(queryDetailWrapper) > 0) { + throw new DefaultClientException("数据实体【" + event.getName() + "】已关联数据对象,无法删除!"); + } + } + } + + @Component + public static class DataEntityDetailDeleteListener implements + ApplicationListener { + + @Autowired + private GenDataObjDetailService genDataObjDetailService; + + @Override + public void onApplicationEvent(DataEntityDetailDeleteEvent event) { + if (genDataObjDetailService.entityDetailIsRela(event.getId())) { + throw new DefaultClientException("字段【" + event.getName() + "】已关联数据对象,无法删除!"); + } + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenTenantListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenTenantListener.java new file mode 100644 index 0000000..05ab241 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenTenantListener.java @@ -0,0 +1,39 @@ +package com.lframework.starter.web.gen.listeners; + +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; +import com.lframework.starter.web.core.utils.DataSourceUtil; +import com.lframework.starter.web.core.event.ReloadTenantEvent; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; +import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource; + +public class GenTenantListener { + + @Component + public static class ReloadTenantListener implements ApplicationListener, + Ordered { + + @Autowired + private MagicDynamicDataSource magicDynamicDataSource; + + @Autowired + private DynamicDataSourceProperties dynamicDataSourceProperties; + + @Override + public void onApplicationEvent(ReloadTenantEvent event) { + DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource() + .get("master"); + magicDynamicDataSource.add(String.valueOf(event.getTenantId()), + DataSourceUtil.createDataSource(dataSourceProperty, event.getJdbcUrl(), + event.getJdbcUsername(), event.getJdbcPassword(), event.getDriver())); + } + + @Override + public int getOrder() { + return Integer.MAX_VALUE; + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenerateInfoListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenerateInfoListener.java new file mode 100644 index 0000000..f443914 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/GenerateInfoListener.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.gen.listeners; + +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.service.GenerateInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class GenerateInfoListener { + + @Component + public static class DeleteEntityListener implements ApplicationListener { + + @Autowired + private GenerateInfoService generateInfoService; + + @Override + public void onApplicationEvent(DataEntityDeleteEvent event) { + + generateInfoService.deleteByEntityId(event.getId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryColumnConfigListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryColumnConfigListener.java new file mode 100644 index 0000000..b26614c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryColumnConfigListener.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.listeners; + +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.service.GenQueryColumnConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class QueryColumnConfigListener { + + @Component + public static class DeleteEntityListener implements ApplicationListener { + + @Autowired + private GenQueryColumnConfigService genQueryColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDeleteEvent event) { + + for (String columnId : event.getColumnIds()) { + genQueryColumnConfigService.deleteById(columnId); + } + } + } + + @Component + public static class DeleteEntityDetailListener implements + ApplicationListener { + + @Autowired + private GenQueryColumnConfigService genQueryColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDetailDeleteEvent event) { + + genQueryColumnConfigService.deleteById(event.getId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryParamsColumnConfigListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryParamsColumnConfigListener.java new file mode 100644 index 0000000..a574b0c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/QueryParamsColumnConfigListener.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.listeners; + +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.service.GenQueryParamsColumnConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class QueryParamsColumnConfigListener { + + @Component + public static class DeleteEntityListener implements ApplicationListener { + + @Autowired + private GenQueryParamsColumnConfigService genQueryParamsColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDeleteEvent event) { + + for (String columnId : event.getColumnIds()) { + genQueryParamsColumnConfigService.deleteById(columnId); + } + } + } + + @Component + public static class DeleteEntityDetailListener implements + ApplicationListener { + + @Autowired + private GenQueryParamsColumnConfigService genQueryParamsColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDetailDeleteEvent event) { + + genQueryParamsColumnConfigService.deleteById(event.getId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/UpdateColumnConfigListener.java b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/UpdateColumnConfigListener.java new file mode 100644 index 0000000..e08c06d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/listeners/UpdateColumnConfigListener.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.listeners; + +import com.lframework.starter.web.gen.event.DataEntityDeleteEvent; +import com.lframework.starter.web.gen.event.DataEntityDetailDeleteEvent; +import com.lframework.starter.web.gen.service.GenUpdateColumnConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +public class UpdateColumnConfigListener { + + @Component + public static class DeleteEntityListener implements ApplicationListener { + + @Autowired + private GenUpdateColumnConfigService genUpdateColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDeleteEvent event) { + + for (String columnId : event.getColumnIds()) { + genUpdateColumnConfigService.deleteById(columnId); + } + } + } + + @Component + public static class DeleteEntityDetailListener implements + ApplicationListener { + + @Autowired + private GenUpdateColumnConfigService genUpdateColumnConfigService; + + @Override + public void onApplicationEvent(DataEntityDetailDeleteEvent event) { + + genUpdateColumnConfigService.deleteById(event.getId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/DBMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/DBMapper.java new file mode 100644 index 0000000..8282e39 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/DBMapper.java @@ -0,0 +1,13 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface DBMapper extends BaseMapper { + + /** + * 查询当前数据库名称 + * + * @return + */ + String getCurrentDBName(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCreateColumnConfigMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCreateColumnConfigMapper.java new file mode 100644 index 0000000..7cbb988 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCreateColumnConfigMapper.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.gen.dto.gen.GenCreateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenCreateColumnConfig; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-12-10 + */ +public interface GenCreateColumnConfigMapper extends BaseMapper { + + /** + * 根据数据对象ID查询 + * + * @param ids + * @return + */ + List getByIds(@Param("ids") List ids); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCreateColumnConfigDto findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListCategoryMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListCategoryMapper.java new file mode 100644 index 0000000..387d797 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListCategoryMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.vo.custom.list.category.GenCustomListCategorySelectorVo; +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 自定义列表分类 Mapper 接口 + *

+ * + * @author zmj + */ +public interface GenCustomListCategoryMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + List query(); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenCustomListCategorySelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListDetailMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListDetailMapper.java new file mode 100644 index 0000000..83913c0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListDetailMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenCustomListDetail; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface GenCustomListDetailMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListHandleColumnMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListHandleColumnMapper.java new file mode 100644 index 0000000..772a9e0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListHandleColumnMapper.java @@ -0,0 +1,17 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenCustomListHandleColumn; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface GenCustomListHandleColumnMapper extends BaseMapper { + + /** + * 根据自定义列表ID查询 + * + * @param customListId + * @return + */ + List getByCustomListId(@Param("customListId") String customListId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListMapper.java new file mode 100644 index 0000000..12ecb80 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListMapper.java @@ -0,0 +1,52 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListSelectorVo; +import com.lframework.starter.web.gen.vo.custom.list.QueryGenCustomListVo; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 自定义列表 Mapper 接口 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +public interface GenCustomListMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QueryGenCustomListVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenCustomListSelectorVo vo); + + /** + * 查询所有关联了数据对象的自定义列表ID + * + * @param objId + * @return + */ + List getRelaGenDataObjIds(@Param("objId") String objId); + + /** + * 查询所有关联了数据实体的自定义列表ID + * + * @param entityId + * @return + */ + List getRelaGenDataEntityIds(@Param("entityId") String entityId); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListQueryParamsMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListQueryParamsMapper.java new file mode 100644 index 0000000..7522491 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListQueryParamsMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenCustomListQueryParams; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface GenCustomListQueryParamsMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListToolbarMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListToolbarMapper.java new file mode 100644 index 0000000..2a37ac7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomListToolbarMapper.java @@ -0,0 +1,17 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenCustomListToolbar; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface GenCustomListToolbarMapper extends BaseMapper { + + /** + * 根据自定义列表ID查询 + * + * @param customListId + * @return + */ + List getByCustomListId(@Param("customListId") String customListId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageCategoryMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageCategoryMapper.java new file mode 100644 index 0000000..b438db6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageCategoryMapper.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; + +/** + *

+ * 自定义页面分类 Mapper 接口 + *

+ * + * @author zmj + */ +public interface GenCustomPageCategoryMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + List query(); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageMapper.java new file mode 100644 index 0000000..d9fe686 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomPageMapper.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.vo.custom.page.GenCustomPageSelectorVo; +import com.lframework.starter.web.gen.vo.custom.page.QueryGenCustomPageVo; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 自定义页面 Mapper 接口 + *

+ * + * @author zmj + * @since 2023-06-20 + */ +public interface GenCustomPageMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QueryGenCustomPageVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenCustomPageSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorCategoryMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorCategoryMapper.java new file mode 100644 index 0000000..3828bb9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorCategoryMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.vo.custom.selector.category.GenCustomSelectorCategorySelectorVo; +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 自定义选择器分类 Mapper 接口 + *

+ * + * @author zmj + */ +public interface GenCustomSelectorCategoryMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + List query(); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenCustomSelectorCategorySelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorMapper.java new file mode 100644 index 0000000..a3cca0b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenCustomSelectorMapper.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.vo.custom.selector.GenCustomSelectorSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.QueryGenCustomSelectorVo; +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 自定义选择器 Mapper 接口 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +public interface GenCustomSelectorMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QueryGenCustomSelectorVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenCustomSelectorSelectorVo vo); + + /** + * 查询所有关联了自定义列表的自定义选择器ID + * + * @return + */ + List getRelaGenCustomListIds(@Param("customListId") String customListId); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityCategoryMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityCategoryMapper.java new file mode 100644 index 0000000..8d34dd6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityCategoryMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.vo.data.entity.category.GenDataEntityCategorySelectorVo; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据实体分类 Mapper 接口 + *

+ * + * @author zmj + */ +public interface GenDataEntityCategoryMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + List query(); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenDataEntityCategorySelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityDetailMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityDetailMapper.java new file mode 100644 index 0000000..b3984fd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityDetailMapper.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.core.mapper.BaseMapper; + +/** + *

+ * 数据实体明细 Mapper 接口 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +public interface GenDataEntityDetailMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityMapper.java new file mode 100644 index 0000000..6dc95d5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataEntityMapper.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntitySelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.QueryDataEntityVo; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据实体 Mapper 接口 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +public interface GenDataEntityMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QueryDataEntityVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenDataEntitySelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjCategoryMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjCategoryMapper.java new file mode 100644 index 0000000..b89560c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjCategoryMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.vo.data.obj.category.GenDataObjCategorySelectorVo; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据对象分类 Mapper 接口 + *

+ * + * @author zmj + */ +public interface GenDataObjCategoryMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + List query(); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenDataObjCategorySelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjDetailMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjDetailMapper.java new file mode 100644 index 0000000..b9f3e56 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjDetailMapper.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据对象明细 Mapper 接口 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +public interface GenDataObjDetailMapper extends BaseMapper { + + /** + * 实体明细ID是否已关联数据对象 + * + * @param entityDetailId + * @return + */ + Boolean entityDetailIsRela(@Param("entityDetailId") String entityDetailId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjMapper.java new file mode 100644 index 0000000..7cb57c0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjMapper.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.vo.data.obj.GenDataObjSelectorVo; +import com.lframework.starter.web.gen.vo.data.obj.QueryGenDataObjVo; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据对象 Mapper 接口 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +public interface GenDataObjMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QueryGenDataObjVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") GenDataObjSelectorVo vo); + + /** + * 查询所有关联了数据实体的数据对象ID + * @param entityId + * @return + */ + List getRelaGenDataEntityIds(@Param("entityId") String entityId); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjQueryDetailMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjQueryDetailMapper.java new file mode 100644 index 0000000..b580b90 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDataObjQueryDetailMapper.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.core.mapper.BaseMapper; + +/** + *

+ * 数据对象自定义查询明细 Mapper 接口 + *

+ * + * @author zmj + * @since 2022-09-17 + */ +public interface GenDataObjQueryDetailMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDetailColumnConfigMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDetailColumnConfigMapper.java new file mode 100644 index 0000000..5b69b16 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenDetailColumnConfigMapper.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.dto.gen.GenDetailColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDetailColumnConfig; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-12-10 + */ +public interface GenDetailColumnConfigMapper extends BaseMapper { + + /** + * 根据数据对象ID查询 + * + * @param ids + * @return + */ + List getByIds(@Param("ids") List ids); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenDetailColumnConfigDto findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenGenerateInfoMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenGenerateInfoMapper.java new file mode 100644 index 0000000..5bd55de --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenGenerateInfoMapper.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import com.lframework.starter.web.gen.entity.GenGenerateInfo; +import com.lframework.starter.web.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-12-08 + */ +public interface GenGenerateInfoMapper extends BaseMapper { + + /** + * 根据数据对象ID查询 + * + * @param dataObjId + * @return + */ + GenGenerateInfoDto getByDataObjId(String dataObjId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenMapper.java new file mode 100644 index 0000000..01f6651 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenMapper.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.components.data.obj.DataObjectQueryObj; +import java.util.List; +import java.util.Map; +import org.apache.ibatis.annotations.Param; + +public interface GenMapper { + + List> findList(@Param("obj") DataObjectQueryObj obj); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryColumnConfigMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryColumnConfigMapper.java new file mode 100644 index 0000000..227ea5d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryColumnConfigMapper.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.dto.gen.GenQueryColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenQueryColumnConfig; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-12-10 + */ +public interface GenQueryColumnConfigMapper extends BaseMapper { + + /** + * 根据数据对象ID查询 + * + * @param ids + * @return + */ + List getByIds(@Param("ids") List ids); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenQueryColumnConfigDto findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryParamsColumnConfigMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryParamsColumnConfigMapper.java new file mode 100644 index 0000000..c952e4b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenQueryParamsColumnConfigMapper.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.dto.gen.GenQueryParamsColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenQueryParamsColumnConfig; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-12-10 + */ +public interface GenQueryParamsColumnConfigMapper extends BaseMapper { + + /** + * 根据数据对象ID查询 + * + * @param ids + * @return + */ + List getByIds(@Param("ids") List ids); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenQueryParamsColumnConfigDto findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableColumnMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableColumnMapper.java new file mode 100644 index 0000000..badf7ad --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableColumnMapper.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.vo.simpledb.QuerySimpleTableColumnVo; +import com.lframework.starter.web.gen.dto.simpledb.OriSimpleTableColumnDto; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-05-28 + */ +public interface GenSimpleTableColumnMapper extends BaseMapper { + + /** + * 根据创建Vo查询 + * + * @param vo + * @return + */ + List query(QuerySimpleTableColumnVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableMapper.java new file mode 100644 index 0000000..ebf9609 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenSimpleTableMapper.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.dto.simpledb.SimpleTableDto; +import com.lframework.starter.web.gen.entity.GenSimpleTable; +import com.lframework.starter.web.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-05-28 + */ +public interface GenSimpleTableMapper extends BaseMapper { + + /** + * 根据数据实体ID查询 + * + * @param id + * @return + */ + SimpleTableDto getByEntityId(@Param("id") String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenUpdateColumnConfigMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenUpdateColumnConfigMapper.java new file mode 100644 index 0000000..51562b5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/GenUpdateColumnConfigMapper.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.dto.gen.GenUpdateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenUpdateColumnConfig; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-12-10 + */ +public interface GenUpdateColumnConfigMapper extends BaseMapper { + + /** + * 根据数据对象ID查询 + * + * @param ids + * @return + */ + List getByIds(@Param("ids") List ids); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenUpdateColumnConfigDto findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/SimpleDBMapper.java b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/SimpleDBMapper.java new file mode 100644 index 0000000..6a5663f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/mappers/SimpleDBMapper.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.mappers; + +import com.lframework.starter.web.gen.vo.simpledb.SimpleTableSelectorVo; +import com.lframework.starter.web.gen.dto.simpledb.OriSimpleTableDto; +import com.lframework.starter.web.gen.dto.simpledb.SimpleDBDto; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SimpleDBMapper extends BaseMapper { + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(SimpleTableSelectorVo vo); + + /** + * 根据TableName查询 + * + * @param tableName + * @return + */ + OriSimpleTableDto getByTableName(@Param("tableName") String tableName); + + /** + * 批量查询 + * + * @param tableNames + * @return + */ + List listByIds(@Param("tableNames") List tableNames); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCreateColumnConfigService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCreateColumnConfigService.java new file mode 100644 index 0000000..fbc0c5e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCreateColumnConfigService.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.dto.gen.GenCreateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenCreateColumnConfig; +import com.lframework.starter.web.gen.vo.UpdateCreateColumnConfigVo; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenCreateColumnConfigService extends BaseMpService { + + /** + * 根据数据实体ID查询 + * + * @param entityId + * @return + */ + List getByDataEntityId(String entityId); + + /** + * 修改生成器配置信息 + * + * @param vo + */ + void updateGenerate(String entityId, List vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCreateColumnConfigDto findById(String id); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListCategoryService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListCategoryService.java new file mode 100644 index 0000000..64452fd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListCategoryService.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomListCategory; +import com.lframework.starter.web.gen.vo.custom.list.category.CreateGenCustomListCategoryVo; +import com.lframework.starter.web.gen.vo.custom.list.category.GenCustomListCategorySelectorVo; +import com.lframework.starter.web.gen.vo.custom.list.category.UpdateGenCustomListCategoryVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +/** + * 自定义列表分类 Service + * + * @author zmj + */ +public interface GenCustomListCategoryService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + List queryList(); + + /** + * 选择器 + * + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomListCategorySelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCustomListCategory findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateGenCustomListCategoryVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateGenCustomListCategoryVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListDetailService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListDetailService.java new file mode 100644 index 0000000..e3d89f0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListDetailService.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomListDetail; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenCustomListDetailService extends BaseMpService { + + /** + * 根据自定义列表ID查询 + * @param customListId + * @return + */ + List getByCustomListId(String customListId); + + /** + * 根据自定义列表ID删除 + * @param customListId + */ + void deleteByCustomListId(String customListId); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListHandleColumnService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListHandleColumnService.java new file mode 100644 index 0000000..7a7033f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListHandleColumnService.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomListHandleColumn; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenCustomListHandleColumnService extends + BaseMpService { + + /** + * 根据自定义列表ID查询 + * + * @param customListId + * @return + */ + List getByCustomListId(String customListId); + + /** + * 根据自定义列表ID删除 + * + * @param customListId + */ + void deleteByCustomListId(String customListId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListQueryParamsService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListQueryParamsService.java new file mode 100644 index 0000000..6ba0c79 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListQueryParamsService.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomListQueryParams; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenCustomListQueryParamsService extends BaseMpService { + + /** + * 根据自定义列表ID查询 + * @param customListId + * @return + */ + List getByCustomListId(String customListId); + + /** + * 根据自定义列表ID删除 + * @param customListId + */ + void deleteByCustomListId(String customListId); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListService.java new file mode 100644 index 0000000..51aecc9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListService.java @@ -0,0 +1,97 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.vo.custom.list.CreateGenCustomListVo; +import com.lframework.starter.web.gen.vo.custom.list.GenCustomListSelectorVo; +import com.lframework.starter.web.gen.vo.custom.list.QueryGenCustomListVo; +import com.lframework.starter.web.gen.vo.custom.list.UpdateGenCustomListVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenCustomListService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QueryGenCustomListVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QueryGenCustomListVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomListSelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCustomList findById(String id); + + /** + * 新增 + * + * @param data + * @return + */ + String create(CreateGenCustomListVo data); + + /** + * 修改 + * + * @param data + */ + void update(UpdateGenCustomListVo data); + + /** + * 根据ID删除 + * @param id + */ + void delete(String id); + + /** + * 启用 + * + * @param id + */ + void enable(String id); + + /** + * 停用 + * + * @param id + */ + void unable(String id); + + /** + * 查询所有关联了数据对象的自定义列表ID + * @return + */ + List getRelaGenDataObjIds(String objId); + + /** + * 查询所有关联了数据实体的自定义列表ID + * @return + */ + List getRelaGenDataEntityIds(String entityId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListToolbarService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListToolbarService.java new file mode 100644 index 0000000..ecf66f7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomListToolbarService.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomListToolbar; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenCustomListToolbarService extends BaseMpService { + + /** + * 根据自定义列表ID查询 + * + * @param customListId + * @return + */ + List getByCustomListId(String customListId); + + /** + * 根据自定义列表ID删除 + * + * @param customListId + */ + void deleteByCustomListId(String customListId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageCategoryService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageCategoryService.java new file mode 100644 index 0000000..0adc9d5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageCategoryService.java @@ -0,0 +1,52 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.vo.custom.page.category.CreateGenCustomPageCategoryVo; +import com.lframework.starter.web.gen.vo.custom.page.category.UpdateGenCustomPageCategoryVo; +import com.lframework.starter.web.gen.entity.GenCustomPageCategory; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +/** + * 自定义页面分类 Service + * + * @author zmj + */ +public interface GenCustomPageCategoryService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + List queryList(); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCustomPageCategory findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateGenCustomPageCategoryVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateGenCustomPageCategoryVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageService.java new file mode 100644 index 0000000..35f1707 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomPageService.java @@ -0,0 +1,73 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.gen.entity.GenCustomPage; +import com.lframework.starter.web.gen.vo.custom.page.CreateGenCustomPageVo; +import com.lframework.starter.web.gen.vo.custom.page.GenCustomPageSelectorVo; +import com.lframework.starter.web.gen.vo.custom.page.QueryGenCustomPageVo; +import com.lframework.starter.web.gen.vo.custom.page.UpdateGenCustomPageVo; +import java.util.List; + +public interface GenCustomPageService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, + QueryGenCustomPageVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QueryGenCustomPageVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomPageSelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCustomPage findById(Integer id); + + /** + * 新增 + * + * @param data + * @return + */ + Integer create(CreateGenCustomPageVo data); + + /** + * 修改 + * + * @param data + */ + void update(UpdateGenCustomPageVo data); + + /** + * 根据ID删除 + * + * @param id + */ + void delete(Integer id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorCategoryService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorCategoryService.java new file mode 100644 index 0000000..c6734a0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorCategoryService.java @@ -0,0 +1,64 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomSelectorCategory; +import com.lframework.starter.web.gen.vo.custom.selector.category.CreateGenCustomSelectorCategoryVo; +import com.lframework.starter.web.gen.vo.custom.selector.category.GenCustomSelectorCategorySelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.category.UpdateGenCustomSelectorCategoryVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +/** + * 自定义选择器分类 Service + * + * @author zmj + */ +public interface GenCustomSelectorCategoryService extends + BaseMpService { + + /** + * 查询列表 + * + * @return + */ + List queryList(); + + /** + * 选择器 + * + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomSelectorCategorySelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCustomSelectorCategory findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateGenCustomSelectorCategoryVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateGenCustomSelectorCategoryVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorService.java new file mode 100644 index 0000000..b8572e1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenCustomSelectorService.java @@ -0,0 +1,94 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenCustomSelector; +import com.lframework.starter.web.gen.vo.custom.selector.CreateGenCustomSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.GenCustomSelectorSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.QueryGenCustomSelectorVo; +import com.lframework.starter.web.gen.vo.custom.selector.UpdateGenCustomSelectorVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenCustomSelectorService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, + QueryGenCustomSelectorVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QueryGenCustomSelectorVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenCustomSelectorSelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenCustomSelector findById(String id); + + /** + * 新增 + * + * @param data + * @return + */ + String create(CreateGenCustomSelectorVo data); + + /** + * 修改 + * + * @param data + */ + void update(UpdateGenCustomSelectorVo data); + + /** + * 根据ID删除 + * + * @param id + */ + void delete(String id); + + /** + * 启用 + * + * @param id + */ + void enable(String id); + + /** + * 停用 + * + * @param id + */ + void unable(String id); + + /** + * 查询所有关联了自定义列表的自定义选择器ID + * + * @return + */ + List getRelaGenCustomListIds(String customListId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityCategoryService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityCategoryService.java new file mode 100644 index 0000000..467f1b7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityCategoryService.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenDataEntityCategory; +import com.lframework.starter.web.gen.vo.data.entity.category.CreateGenDataEntityCategoryVo; +import com.lframework.starter.web.gen.vo.data.entity.category.GenDataEntityCategorySelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.category.UpdateGenDataEntityCategoryVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +/** + * 数据实体分类 Service + * + * @author zmj + */ +public interface GenDataEntityCategoryService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + List queryList(); + + /** + * 选择器 + * + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenDataEntityCategorySelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenDataEntityCategory findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateGenDataEntityCategoryVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateGenDataEntityCategoryVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityDetailService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityDetailService.java new file mode 100644 index 0000000..8f140b0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityDetailService.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenDataEntityDetail; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntityDetailSelectorVo; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenDataEntityDetailService extends BaseMpService { + + /** + * 根据实体ID查询 + * + * @param entityId + * @return + */ + List getByEntityId(String entityId); + + /** + * 根据实体ID删除 + * + * @param entityId + */ + void deleteByEntityId(String entityId); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(GenDataEntityDetailSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityService.java new file mode 100644 index 0000000..2371c6d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataEntityService.java @@ -0,0 +1,111 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.dto.data.entity.DataEntityGenerateDto; +import com.lframework.starter.web.gen.entity.GenDataEntity; +import com.lframework.starter.web.gen.vo.data.entity.CreateDataEntityVo; +import com.lframework.starter.web.gen.vo.data.entity.GenDataEntitySelectorVo; +import com.lframework.starter.web.gen.vo.data.entity.QueryDataEntityVo; +import com.lframework.starter.web.gen.vo.data.entity.UpdateDataEntityGenerateVo; +import com.lframework.starter.web.gen.vo.data.entity.UpdateDataEntityVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenDataEntityService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QueryDataEntityVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QueryDataEntityVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenDataEntitySelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenDataEntity findById(String id); + + /** + * 创建 + * + * @param data + * @return + */ + String create(CreateDataEntityVo data); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateDataEntityVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void delete(String id); + + /** + * 启用 + * + * @param id + */ + void enable(String id); + + /** + * 停用 + * + * @param id + */ + void unable(String id); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + DataEntityGenerateDto getGenerateById(String id); + + /** + * 修改生成器配置信息 + * + * @param vo + */ + void updateGenerate(UpdateDataEntityGenerateVo vo); + + /** + * 同步数据表 + * + * @param id + */ + void syncTable(String id); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjCategoryService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjCategoryService.java new file mode 100644 index 0000000..f4087f2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjCategoryService.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenDataObjCategory; +import com.lframework.starter.web.gen.vo.data.obj.category.CreateGenDataObjCategoryVo; +import com.lframework.starter.web.gen.vo.data.obj.category.GenDataObjCategorySelectorVo; +import com.lframework.starter.web.gen.vo.data.obj.category.UpdateGenDataObjCategoryVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +/** + * 数据对象分类 Service + * + * @author zmj + */ +public interface GenDataObjCategoryService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + List queryList(); + + /** + * 选择器 + * + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + GenDataObjCategorySelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenDataObjCategory findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateGenDataObjCategoryVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateGenDataObjCategoryVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjDetailService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjDetailService.java new file mode 100644 index 0000000..ea7379f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjDetailService.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenDataObjDetail; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenDataObjDetailService extends BaseMpService { + + /** + * 根据数据对象ID查询 + * + * @param objId + * @return + */ + List getByObjId(String objId); + + /** + * 根据数据对象ID删除 + * + * @param objId + */ + void deleteByObjId(String objId); + + /** + * 实体明细ID是否已关联数据对象 + * + * @param entityDetailId + * @return + */ + Boolean entityDetailIsRela(String entityDetailId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjQueryDetailService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjQueryDetailService.java new file mode 100644 index 0000000..0eb8733 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjQueryDetailService.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenDataObjQueryDetail; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenDataObjQueryDetailService extends BaseMpService { + + /** + * 根据数据对象ID查询 + * + * @param objId + * @return + */ + List getByObjId(String objId); + + /** + * 根据数据对象ID删除 + * + * @param objId + */ + void deleteByObjId(String objId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjService.java new file mode 100644 index 0000000..d471f23 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDataObjService.java @@ -0,0 +1,91 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.entity.GenDataObj; +import com.lframework.starter.web.gen.vo.data.obj.CreateGenDataObjVo; +import com.lframework.starter.web.gen.vo.data.obj.GenDataObjSelectorVo; +import com.lframework.starter.web.gen.vo.data.obj.QueryGenDataObjVo; +import com.lframework.starter.web.gen.vo.data.obj.UpdateGenDataObjVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenDataObjService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QueryGenDataObjVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QueryGenDataObjVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, GenDataObjSelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenDataObj findById(String id); + + /** + * 新增 + * + * @param data + * @return + */ + String create(CreateGenDataObjVo data); + + /** + * 修改 + * + * @param data + */ + void update(UpdateGenDataObjVo data); + + /** + * 根据ID删除 + * + * @param id + */ + void delete(String id); + + /** + * 启用 + * + * @param id + */ + void enable(String id); + + /** + * 停用 + * + * @param id + */ + void unable(String id); + + /** + * 查询所有关联了数据实体的数据对象ID + * @return + */ + List getRelaGenDataEntityIds(String entityId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDetailColumnConfigService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDetailColumnConfigService.java new file mode 100644 index 0000000..b30fa98 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenDetailColumnConfigService.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.dto.gen.GenDetailColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenDetailColumnConfig; +import com.lframework.starter.web.gen.vo.UpdateDetailColumnConfigVo; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenDetailColumnConfigService extends BaseMpService { + + /** + * 根据数据实体ID查询 + * + * @param entityId + * @return + */ + List getByDataEntityId(String entityId); + + /** + * 修改生成器配置信息 + * + * @param vo + */ + void updateGenerate(String entityId, List vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenDetailColumnConfigDto findById(String id); + + /** + * 根据ID查询 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryColumnConfigService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryColumnConfigService.java new file mode 100644 index 0000000..cb8792a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryColumnConfigService.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.dto.gen.GenQueryColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenQueryColumnConfig; +import com.lframework.starter.web.gen.vo.UpdateQueryColumnConfigVo; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenQueryColumnConfigService extends BaseMpService { + + /** + * 根据数据对象ID查询 + * + * @param entityId + * @return + */ + List getByDataEntityId(String entityId); + + /** + * 修改生成器配置信息 + * + * @param vo + */ + void updateGenerate(String entityId, List vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenQueryColumnConfigDto findById(String id); + + /** + * 根据ID查询 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryParamsColumnConfigService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryParamsColumnConfigService.java new file mode 100644 index 0000000..d97d808 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenQueryParamsColumnConfigService.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.dto.gen.GenQueryParamsColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenQueryParamsColumnConfig; +import com.lframework.starter.web.gen.vo.UpdateQueryParamsColumnConfigVo; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenQueryParamsColumnConfigService extends + BaseMpService { + + /** + * 根据数据实体ID查询 + * + * @param entityId + * @return + */ + List getByDataEntityId(String entityId); + + /** + * 修改生成器配置信息 + * + * @param vo + */ + void updateGenerate(String entityId, List vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenQueryParamsColumnConfigDto findById(String id); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenUpdateColumnConfigService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenUpdateColumnConfigService.java new file mode 100644 index 0000000..103f88a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenUpdateColumnConfigService.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.dto.gen.GenUpdateColumnConfigDto; +import com.lframework.starter.web.gen.entity.GenUpdateColumnConfig; +import com.lframework.starter.web.gen.vo.UpdateUpdateColumnConfigVo; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface GenUpdateColumnConfigService extends BaseMpService { + + /** + * 根据数据实体ID查询 + * + * @param entityId + * @return + */ + List getByDataEntityId(String entityId); + + /** + * 修改生成器配置信息 + * + * @param vo + */ + void updateGenerate(String entityId, List vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + GenUpdateColumnConfigDto findById(String id); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenerateInfoService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenerateInfoService.java new file mode 100644 index 0000000..4522cd7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/GenerateInfoService.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.dto.gen.GenGenerateInfoDto; +import com.lframework.starter.web.gen.entity.GenGenerateInfo; +import com.lframework.starter.web.gen.vo.UpdateGenerateInfoVo; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface GenerateInfoService extends BaseMpService { + + /** + * 根据数据实体ID查询 + * + * @param entityId + * @return + */ + GenGenerateInfoDto getByEntityId(String entityId); + + /** + * 修改生成器配置信息 + * + * @param vo + */ + void updateGenerate(String dataObjId, UpdateGenerateInfoVo vo); + + /** + * 根据数据实体ID删除 + * + * @param entityId + */ + void deleteByEntityId(String entityId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleDBService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleDBService.java new file mode 100644 index 0000000..5a1b2f1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleDBService.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.vo.simpledb.SimpleTableSelectorVo; +import com.lframework.starter.web.gen.dto.simpledb.OriSimpleTableDto; +import com.lframework.starter.web.gen.dto.simpledb.SimpleDBDto; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseService; +import java.util.List; + +public interface SimpleDBService extends BaseService { + + /** + * 查询当前数据库名称 + * + * @return + */ + String getCurrentDBName(); + + /** + * 选择器 + * + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, SimpleTableSelectorVo vo); + + /** + * 根据表名查询 + * + * @return + */ + OriSimpleTableDto getByTableName(String tableName); + + /** + * 批量查询 + * + * @param tableNames + * @return + */ + List listByIds(List tableNames); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleTableColumnService.java b/web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleTableColumnService.java new file mode 100644 index 0000000..719bc73 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/service/SimpleTableColumnService.java @@ -0,0 +1,17 @@ +package com.lframework.starter.web.gen.service; + +import com.lframework.starter.web.gen.vo.simpledb.QuerySimpleTableColumnVo; +import com.lframework.starter.web.gen.entity.GenSimpleTableColumn; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface SimpleTableColumnService extends BaseMpService { + + /** + * 查询列信息 + * + * @param vo + * @return + */ + List query(QuerySimpleTableColumnVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateCreateColumnConfigVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateCreateColumnConfigVo.java new file mode 100644 index 0000000..2ccdc4c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateCreateColumnConfigVo.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.vo; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateCreateColumnConfigVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private String id; + + /** + * 是否必填 + */ + @ApiModelProperty(value = "是否必填", required = true) + @NotNull(message = "是否必填不能为空!") + private Boolean required; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateDetailColumnConfigVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateDetailColumnConfigVo.java new file mode 100644 index 0000000..ccb5e16 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateDetailColumnConfigVo.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.vo; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateDetailColumnConfigVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private String id; + + /** + * 列宽 + */ + @ApiModelProperty(value = "列宽", required = true) + @NotNull(message = "列宽不能为空!") + private Integer span; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateGenerateInfoVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateGenerateInfoVo.java new file mode 100644 index 0000000..1ec1af9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateGenerateInfoVo.java @@ -0,0 +1,117 @@ +package com.lframework.starter.web.gen.vo; + +import com.lframework.starter.web.gen.enums.GenKeyType; +import com.lframework.starter.web.gen.enums.GenTemplateType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenerateInfoVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 生成模板类型 + */ + @ApiModelProperty(value = "生成模板类型", required = true) + @NotNull(message = "生成模板类型不能为空!") + @IsEnum(message = "生成模板类型格式不正确!", enumClass = GenTemplateType.class) + private Integer templateType; + + /** + * 包名 + */ + @ApiModelProperty(value = "包名", required = true) + @NotBlank(message = "包名不能为空!") + private String packageName; + + /** + * 模块名称 + */ + @ApiModelProperty(value = "模块名称", required = true) + @NotBlank(message = "模块名称不能为空!") + private String moduleName; + + /** + * 业务名称 + */ + @ApiModelProperty(value = "业务名称", required = true) + @NotBlank(message = "业务名称不能为空!") + private String bizName; + + /** + * 类名 + */ + @ApiModelProperty(value = "类名", required = true) + @NotBlank(message = "类名不能为空!") + private String className; + + /** + * 类描述 + */ + @ApiModelProperty(value = "类描述", required = true) + @NotBlank(message = "类描述不能为空!") + private String classDescription; + + /** + * 父级菜单ID + */ + @ApiModelProperty("父级菜单ID") + private String parentMenuId; + + /** + * 主键类型 + */ + @ApiModelProperty(value = "主键类型", required = true) + @NotNull(message = "主键类型不能为空!") + @IsEnum(message = "主键类型格式不正确!", enumClass = GenKeyType.class) + private Integer keyType; + + /** + * 作者 + */ + @ApiModelProperty("作者") + private String author; + + /** + * 本级菜单编号 + */ + @ApiModelProperty(value = "本级菜单编号", required = true) + @NotNull(message = "本级菜单编号不能为空!") + private String menuCode; + + /** + * 本级菜单名称 + */ + @ApiModelProperty(value = "本级菜单名称", required = true) + @NotNull(message = "本级菜单名称不能为空!") + private String menuName; + + /** + * 详情页Span总数量 + */ + @ApiModelProperty(value = "详情页Span总数量", required = true) + @NotNull(message = "详情页Span总数量不能为空!") + @Min(value = 1, message = "详情页Span总数量必须大于0!") + private Integer detailSpan; + + /** + * 是否应用缓存 + */ + @ApiModelProperty(value = "是否应用缓存", required = true) + @NotNull(message = "是否应用缓存不能为空!") + private Boolean isCache; + + /** + * 是否内置删除功能 + */ + @ApiModelProperty(value = "是否内置删除功能", required = true) + @NotNull(message = "是否内置删除功能不能为空!") + private Boolean hasDelete; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryColumnConfigVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryColumnConfigVo.java new file mode 100644 index 0000000..1fd7181 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryColumnConfigVo.java @@ -0,0 +1,46 @@ +package com.lframework.starter.web.gen.vo; + +import com.lframework.starter.web.gen.enums.GenQueryWidthType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateQueryColumnConfigVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private String id; + + /** + * 宽度类型 + */ + @ApiModelProperty(value = "宽度类型", required = true) + @NotNull(message = "宽度类型不能为空!") + @IsEnum(message = "宽度类型不能为空!", enumClass = GenQueryWidthType.class) + private Integer widthType; + + /** + * 是否页面排序 + */ + @ApiModelProperty(value = "是否页面排序", required = true) + @NotNull(message = "请选择是否页面排序!") + private Boolean sortable; + + /** + * 宽度 + */ + @ApiModelProperty(value = "宽度", required = true) + @NotNull(message = "宽度不能为空!") + @Min(value = 1, message = "宽度必须大于0!") + private Integer width; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryParamsColumnConfigVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryParamsColumnConfigVo.java new file mode 100644 index 0000000..aa9e6ee --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateQueryParamsColumnConfigVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.gen.vo; + +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateQueryParamsColumnConfigVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private String id; + + /** + * 查询类型 + */ + @ApiModelProperty(value = "查询类型", required = true) + @NotNull(message = "查询类型不能为空!") + @IsEnum(message = "查询类型不能为空!", enumClass = GenQueryType.class) + private Integer queryType; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateUpdateColumnConfigVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateUpdateColumnConfigVo.java new file mode 100644 index 0000000..9ba786e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/UpdateUpdateColumnConfigVo.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.gen.vo; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateUpdateColumnConfigVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private String id; + + /** + * 是否必填 + */ + @ApiModelProperty(value = "是否必填", required = true) + @NotNull(message = "是否必填不能为空!") + private Boolean required; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/CreateGenCustomListVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/CreateGenCustomListVo.java new file mode 100644 index 0000000..9f2107c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/CreateGenCustomListVo.java @@ -0,0 +1,174 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.gen.enums.GenCustomListType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateGenCustomListVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 列表类型 + */ + @ApiModelProperty(value = "列表类型", required = true) + @NotNull(message = "列表类型不能为空!") + @IsEnum(message = "列表类型不能为空!", enumClass = GenCustomListType.class) + private Integer listType; + + /** + * 数据对象ID + */ + @ApiModelProperty(value = "数据对象ID", required = true) + @NotBlank(message = "数据对象ID不能为空!") + private String dataObjId; + + /** + * 表单Label宽度 + */ + @ApiModelProperty(value = "表单Label宽度", required = true) + @NotNull(message = "表单Label宽度不能为空!") + @Min(value = 1, message = "表单Label宽度不允许小于0!") + private Integer labelWidth; + + /** + * 是否分页 + */ + @ApiModelProperty(value = "是否分页", required = true) + @NotNull(message = "是否分页不能为空!") + private Boolean hasPage; + + /** + * 是否树形列表 + */ + @ApiModelProperty(value = "是否树形列表", required = true) + @NotNull(message = "是否树形列表不能为空!") + private Boolean treeData; + + /** + * ID字段 + */ + @ApiModelProperty(value = "ID字段", required = true) + @NotBlank(message = "ID字段不能为空!") + private String idColumn; + + /** + * ID字段关联ID + */ + @ApiModelProperty(value = "ID字段关联ID", required = true) + @NotBlank(message = "ID字段不能为空!") + private String idColumnRelaId; + + /** + * 父级ID字段 + */ + @ApiModelProperty("父级ID字段") + private String treePidColumn; + + /** + * 父级ID字段关联ID + */ + @ApiModelProperty("父级ID字段关联ID") + private String treePidColumnRelaId; + + /** + * 树形节点字段 + */ + @ApiModelProperty("树形节点字段") + private String treeNodeColumn; + + /** + * 树形节点字段关联ID + */ + @ApiModelProperty("树形节点字段关联ID") + private String treeNodeColumnRelaId; + + /** + * 子节点Key值 + */ + @ApiModelProperty("子节点Key值") + private String treeChildrenKey; + + /** + * 是否允许导出 + */ + @ApiModelProperty("是否允许导出") + @NotNull(message = "是否允许导出不能为空!") + private Boolean allowExport; + + /** + * 查询条件 + */ + @ApiModelProperty("查询条件") + @Valid + private List queryParams; + + /** + * 列表配置 + */ + @ApiModelProperty(value = "列表配置", required = true) + @NotEmpty(message = "列表配置不能为空!") + @Valid + private List details; + + /** + * 查询前置SQL + */ + @ApiModelProperty("查询前置SQL") + private String queryPrefixSql; + + /** + * 查询后置SQL + */ + @ApiModelProperty("查询后置SQL") + private String querySuffixSql; + + /** + * 后置SQL + */ + @ApiModelProperty("后置SQL") + private String suffixSql; + + /** + * 工具栏 + */ + @Valid + @ApiModelProperty("工具栏") + private List toolbars; + + /** + * 操作列 + */ + @Valid + @ApiModelProperty("操作列") + private List handleColumns; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListDetailVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListDetailVo.java new file mode 100644 index 0000000..4978cea --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListDetailVo.java @@ -0,0 +1,67 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.gen.enums.GenQueryWidthType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class GenCustomListDetailVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private String id; + + /** + * 关联ID + */ + @ApiModelProperty(value = "关联ID") + private String relaId; + + /** + * 宽度类型 + */ + @ApiModelProperty(value = "宽度类型", required = true) + @NotNull(message = "宽度类型不能为空!") + @IsEnum(message = "宽度类型不能为空!", enumClass = GenQueryWidthType.class) + private Integer widthType; + + /** + * 是否页面排序 + */ + @ApiModelProperty(value = "是否页面排序", required = true) + @NotNull(message = "请选择是否页面排序!") + private Boolean sortable; + + /** + * 宽度 + */ + @ApiModelProperty(value = "宽度", required = true) + @NotNull(message = "宽度不能为空!") + @Min(value = 1, message = "宽度必须大于0!") + private Integer width; + + /** + * 类型 + */ + @ApiModelProperty(value = "类型", required = true) + @NotNull(message = "类型不能为空!") + @IsEnum(message = "类型不能为空!", enumClass = GenCustomListDetailType.class) + private Integer type; + + /** + * 格式化脚本 + */ + @ApiModelProperty("格式化脚本") + private String formatter; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListHandleColumnVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListHandleColumnVo.java new file mode 100644 index 0000000..f167c7a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListHandleColumnVo.java @@ -0,0 +1,66 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.gen.enums.GenCustomListBtnType; +import com.lframework.starter.web.gen.enums.GenCustomListBtnViewType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class GenCustomListHandleColumnVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + @NotNull(message = "显示名称不能为空!") + private String name; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + @NotNull(message = "显示类型不能为空!") + @IsEnum(enumClass = GenCustomListBtnViewType.class, message = "显示类型格式错误!") + private String viewType; + + /** + * 按钮类型 + */ + @ApiModelProperty("按钮类型") + @NotNull(message = "按钮类型不能为空!") + @IsEnum(enumClass = GenCustomListBtnType.class, message = "显示类型格式错误!") + private Integer btnType; + + /** + * 按钮配置 + */ + @ApiModelProperty("按钮配置") + private String btnConfig; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 请求参数 + */ + @ApiModelProperty("请求参数") + private String requestParam; + + /** + * 宽度 + */ + @ApiModelProperty(value = "宽度", required = true) + @NotNull(message = "宽度不能为空!") + @Min(value = 0, message = "宽度必须大于0!") + private Integer width; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListQueryParamsVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListQueryParamsVo.java new file mode 100644 index 0000000..ba8b1ba --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListQueryParamsVo.java @@ -0,0 +1,71 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.gen.enums.GenCustomListDetailType; +import com.lframework.starter.web.gen.enums.GenQueryType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class GenCustomListQueryParamsVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 关联ID + */ + @ApiModelProperty(value = "关联ID", required = true) + @NotBlank(message = "关联ID不能为空!") + private String relaId; + + /** + * 前端显示 + */ + @ApiModelProperty(value = "前端显示", required = true) + @NotNull(message = "前端显示不能为空!") + private Boolean frontShow; + + /** + * 查询类型 + */ + @ApiModelProperty(value = "查询类型", required = true) + @NotNull(message = "查询类型不能为空!") + @IsEnum(message = "查询类型不能为空!", enumClass = GenQueryType.class) + private Integer queryType; + + /** + * 表单宽度 + */ + @ApiModelProperty(value = "表单宽度", required = true) + @NotNull(message = "表单宽度不能为空!") + @Min(value = 1, message = "表单宽度不允许小于0!") + @Max(value = 24, message = "表单宽度不允许大于24!") + private Integer formWidth; + + /** + * 默认值 + */ + @ApiModelProperty("默认值") + private Object defaultValue; + + /** + * 类型 + */ + @ApiModelProperty(value = "类型", required = true) + @NotNull(message = "类型不能为空!") + @IsEnum(message = "类型不能为空!", enumClass = GenCustomListDetailType.class) + private Integer type; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListSelectorVo.java new file mode 100644 index 0000000..75565ff --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListSelectorVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomListSelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListToolbarVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListToolbarVo.java new file mode 100644 index 0000000..51c6ba6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/GenCustomListToolbarVo.java @@ -0,0 +1,57 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.gen.enums.GenCustomListBtnType; +import com.lframework.starter.web.gen.enums.GenCustomListBtnViewType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class GenCustomListToolbarVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 显示名称 + */ + @ApiModelProperty("显示名称") + @NotNull(message = "显示名称不能为空!") + private String name; + + /** + * 显示类型 + */ + @ApiModelProperty("显示类型") + @NotNull(message = "显示类型不能为空!") + @IsEnum(enumClass = GenCustomListBtnViewType.class, message = "显示类型格式错误!") + private String viewType; + + /** + * 按钮类型 + */ + @ApiModelProperty("按钮类型") + @NotNull(message = "按钮类型不能为空!") + @IsEnum(enumClass = GenCustomListBtnType.class, message = "显示类型格式错误!") + private Integer btnType; + + /** + * 按钮配置 + */ + @ApiModelProperty("按钮配置") + private String btnConfig; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 请求参数 + */ + @ApiModelProperty("请求参数") + private String requestParam; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/QueryGenCustomListVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/QueryGenCustomListVo.java new file mode 100644 index 0000000..8ed403d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/QueryGenCustomListVo.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 查询自定义列表Vo + */ +@Data +public class QueryGenCustomListVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/UpdateGenCustomListVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/UpdateGenCustomListVo.java new file mode 100644 index 0000000..d0c94fc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/UpdateGenCustomListVo.java @@ -0,0 +1,187 @@ +package com.lframework.starter.web.gen.vo.custom.list; + +import com.lframework.starter.web.gen.enums.GenCustomListType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenCustomListVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 列表类型 + */ + @ApiModelProperty(value = "列表类型", required = true) + @NotNull(message = "列表类型不能为空!") + @IsEnum(message = "列表类型不能为空!", enumClass = GenCustomListType.class) + private Integer listType; + + /** + * 表单Label宽度 + */ + @ApiModelProperty(value = "表单Label宽度", required = true) + @NotNull(message = "表单Label宽度不能为空!") + @Min(value = 1, message = "表单Label宽度不允许小于0!") + private Integer labelWidth; + + /** + * 是否分页 + */ + @ApiModelProperty(value = "是否分页", required = true) + @NotNull(message = "是否分页不能为空!") + private Boolean hasPage; + + /** + * 是否树形列表 + */ + @ApiModelProperty(value = "是否树形列表", required = true) + @NotNull(message = "是否树形列表不能为空!") + private Boolean treeData; + + /** + * ID字段 + */ + @ApiModelProperty(value = "ID字段", required = true) + @NotBlank(message = "ID字段不能为空!") + private String idColumn; + + /** + * ID字段关联ID + */ + @ApiModelProperty(value = "ID字段关联ID", required = true) + @NotBlank(message = "ID字段不能为空!") + private String idColumnRelaId; + + /** + * 父级ID字段 + */ + @ApiModelProperty("父级ID字段") + private String treePidColumn; + + /** + * 父级ID字段关联ID + */ + @ApiModelProperty("父级ID字段关联ID") + private String treePidColumnRelaId; + + /** + * 树形节点字段 + */ + @ApiModelProperty("树形节点字段") + private String treeNodeColumn; + + /** + * 树形节点字段关联ID + */ + @ApiModelProperty("树形节点字段关联ID") + private String treeNodeColumnRelaId; + + /** + * 子节点Key值 + */ + @ApiModelProperty("子节点Key值") + private String treeChildrenKey; + + /** + * 默认值 + */ + @ApiModelProperty("默认值") + private String defaultValue; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 是否允许导出 + */ + @ApiModelProperty("是否允许导出") + @NotNull(message = "是否允许导出不能为空!") + private Boolean allowExport; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; + + /** + * 查询条件 + */ + @ApiModelProperty("查询条件") + @Valid + private List queryParams; + + /** + * 列表配置 + */ + @ApiModelProperty(value = "列表配置", required = true) + @NotEmpty(message = "列表配置不能为空!") + @Valid + private List details; + + /** + * 查询前置SQL + */ + @ApiModelProperty("查询前置SQL") + private String queryPrefixSql; + + /** + * 查询后置SQL + */ + @ApiModelProperty("查询后置SQL") + private String querySuffixSql; + + /** + * 后置SQL + */ + @ApiModelProperty("后置SQL") + private String suffixSql; + + /** + * 工具栏 + */ + @Valid + @ApiModelProperty("工具栏") + private List toolbars; + + /** + * 操作列 + */ + @Valid + @ApiModelProperty("操作列") + private List handleColumns; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/CreateGenCustomListCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/CreateGenCustomListCategoryVo.java new file mode 100644 index 0000000..a6bad82 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/CreateGenCustomListCategoryVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.custom.list.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenCustomListCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/GenCustomListCategorySelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/GenCustomListCategorySelectorVo.java new file mode 100644 index 0000000..e43b150 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/GenCustomListCategorySelectorVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.gen.vo.custom.list.category; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomListCategorySelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/UpdateGenCustomListCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/UpdateGenCustomListCategoryVo.java new file mode 100644 index 0000000..f58c17e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/list/category/UpdateGenCustomListCategoryVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.vo.custom.list.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenCustomListCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/CreateGenCustomPageVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/CreateGenCustomPageVo.java new file mode 100644 index 0000000..c09f634 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/CreateGenCustomPageVo.java @@ -0,0 +1,46 @@ +package com.lframework.starter.web.gen.vo.custom.page; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenCustomPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 页面代码 + */ + @ApiModelProperty(value = "页面代码", required = true) + @NotBlank(message = "页面代码不能为空!") + private String pageCode; + + /** + * 脚本代码 + */ + @ApiModelProperty(value = "脚本代码", required = true) + @NotBlank(message = "脚本代码不能为空!") + private String scriptCode; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/GenCustomPageSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/GenCustomPageSelectorVo.java new file mode 100644 index 0000000..f19aa52 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/GenCustomPageSelectorVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.custom.page; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomPageSelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/QueryGenCustomPageVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/QueryGenCustomPageVo.java new file mode 100644 index 0000000..43a4202 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/QueryGenCustomPageVo.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.vo.custom.page; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 查询自定义页面Vo + */ +@Data +public class QueryGenCustomPageVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/UpdateGenCustomPageVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/UpdateGenCustomPageVo.java new file mode 100644 index 0000000..b980167 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/UpdateGenCustomPageVo.java @@ -0,0 +1,47 @@ +package com.lframework.starter.web.gen.vo.custom.page; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenCustomPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private Integer id; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 页面代码 + */ + @ApiModelProperty(value = "页面代码", required = true) + @NotBlank(message = "页面代码不能为空!") + private String pageCode; + + /** + * 脚本代码 + */ + @ApiModelProperty(value = "脚本代码", required = true) + @NotBlank(message = "脚本代码不能为空!") + private String scriptCode; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/CreateGenCustomPageCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/CreateGenCustomPageCategoryVo.java new file mode 100644 index 0000000..e1b2eca --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/CreateGenCustomPageCategoryVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.gen.vo.custom.page.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenCustomPageCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * 父级ID + */ + @ApiModelProperty(value = "父级ID") + private String parentId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/UpdateGenCustomPageCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/UpdateGenCustomPageCategoryVo.java new file mode 100644 index 0000000..fb35a4a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/page/category/UpdateGenCustomPageCategoryVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.vo.custom.page.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenCustomPageCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/CreateGenCustomSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/CreateGenCustomSelectorVo.java new file mode 100644 index 0000000..a595373 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/CreateGenCustomSelectorVo.java @@ -0,0 +1,86 @@ +package com.lframework.starter.web.gen.vo.custom.selector; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenCustomSelectorVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 自定义列表ID + */ + @ApiModelProperty(value = "自定义列表ID", required = true) + @NotBlank(message = "自定义列表ID不能为空!") + private String customListId; + + /** + * 对话框标题 + */ + @ApiModelProperty(value = "对话框标题") + private String dialogTittle; + + /** + * 对话框宽度 + */ + @ApiModelProperty(value = "对话框宽度", required = true) + @NotBlank(message = "对话框宽度不能为空!") + private String dialogWidth; + + /** + * 占位符 + */ + @ApiModelProperty("占位符") + private String placeholder; + + /** + * ID字段 + */ + @ApiModelProperty(value = "ID字段", required = true) + @NotBlank(message = "ID字段不能为空!") + private String idColumn; + + /** + * ID字段关联ID + */ + @ApiModelProperty(value = "ID字段关联ID", required = true) + @NotBlank(message = "ID字段不能为空!") + private String idColumnRelaId; + + /** + * 名称字段 + */ + @ApiModelProperty(value = "名称字段", required = true) + @NotBlank(message = "名称字段不能为空!") + private String nameColumn; + + /** + * 名称字段关联ID + */ + @ApiModelProperty(value = "名称字段关联ID", required = true) + @NotBlank(message = "名称字段不能为空!") + private String nameColumnRelaId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/GenCustomSelectorSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/GenCustomSelectorSelectorVo.java new file mode 100644 index 0000000..7cb0a95 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/GenCustomSelectorSelectorVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.custom.selector; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomSelectorSelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/QueryGenCustomSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/QueryGenCustomSelectorVo.java new file mode 100644 index 0000000..dff05ac --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/QueryGenCustomSelectorVo.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.vo.custom.selector; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 查询自定义选择器Vo + */ +@Data +public class QueryGenCustomSelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/UpdateGenCustomSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/UpdateGenCustomSelectorVo.java new file mode 100644 index 0000000..ab5f371 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/UpdateGenCustomSelectorVo.java @@ -0,0 +1,90 @@ +package com.lframework.starter.web.gen.vo.custom.selector; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenCustomSelectorVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 对话框标题 + */ + @ApiModelProperty(value = "对话框标题") + private String dialogTittle; + + /** + * 对话框宽度 + */ + @ApiModelProperty(value = "对话框宽度", required = true) + @NotBlank(message = "对话框宽度不能为空!") + private String dialogWidth; + + /** + * 占位符 + */ + @ApiModelProperty("占位符") + private String placeholder; + + /** + * ID字段 + */ + @ApiModelProperty("ID字段") + private String idColumn; + + /** + * ID字段关联ID + */ + @ApiModelProperty("ID字段关联ID") + private String idColumnRelaId; + + /** + * 名称字段 + */ + @ApiModelProperty("名称字段") + private String nameColumn; + + /** + * 名称字段关联ID + */ + @ApiModelProperty("名称字段关联ID") + private String nameColumnRelaId; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/CreateGenCustomSelectorCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/CreateGenCustomSelectorCategoryVo.java new file mode 100644 index 0000000..98e8b0d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/CreateGenCustomSelectorCategoryVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.custom.selector.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenCustomSelectorCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/GenCustomSelectorCategorySelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/GenCustomSelectorCategorySelectorVo.java new file mode 100644 index 0000000..c99d391 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/GenCustomSelectorCategorySelectorVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.gen.vo.custom.selector.category; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenCustomSelectorCategorySelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/UpdateGenCustomSelectorCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/UpdateGenCustomSelectorCategoryVo.java new file mode 100644 index 0000000..1a8f89a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/custom/selector/category/UpdateGenCustomSelectorCategoryVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.vo.custom.selector.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenCustomSelectorCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/CreateDataEntityVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/CreateDataEntityVo.java new file mode 100644 index 0000000..9bd1d32 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/CreateDataEntityVo.java @@ -0,0 +1,50 @@ +package com.lframework.starter.web.gen.vo.data.entity; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import lombok.Data; + +@Data +public class CreateDataEntityVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 数据表 + */ + @ApiModelProperty(value = "数据表", required = true) + @NotBlank(message = "数据表不能为空!") + private String tableName; + + /** + * 字段信息 + */ + @ApiModelProperty(value = "字段信息", required = true) + @Valid + @NotEmpty(message = "字段信息不能为空!") + private List columns; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailSelectorVo.java new file mode 100644 index 0000000..4210844 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailSelectorVo.java @@ -0,0 +1,20 @@ +package com.lframework.starter.web.gen.vo.data.entity; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class GenDataEntityDetailSelectorVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 数据实体ID + */ + @ApiModelProperty("数据实体ID") + @NotBlank(message = "数据实体ID不能为空!") + private String entityId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailVo.java new file mode 100644 index 0000000..2ea1eb3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntityDetailVo.java @@ -0,0 +1,119 @@ +package com.lframework.starter.web.gen.vo.data.entity; + +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.gen.enums.GenOrderType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class GenDataEntityDetailVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 字段显示名称 + */ + @ApiModelProperty(value = "字段显示名称", required = true) + @NotBlank(message = "显示名称不能为空!") + private String name; + + /** + * 数据类型 + */ + @ApiModelProperty(value = "数据类型", required = true) + @NotNull(message = "数据类型不能为空!") + @IsEnum(message = "数据类型格式不正确!", enumClass = GenDataType.class) + private Integer dataType; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 显示类型 + */ + @ApiModelProperty(value = "显示类型", required = true) + @NotNull(message = "显示类型不能为空!") + @IsEnum(message = "显示类型格式不正确!", enumClass = GenDataType.class) + private Integer viewType; + + /** + * 是否内置枚举 + */ + @ApiModelProperty(value = "是否内置枚举", required = true) + @NotNull(message = "是否内置枚举不能为空!") + private Boolean fixEnum; + + /** + * 后端枚举名 + */ + @ApiModelProperty("后端枚举名") + private String enumBack; + + /** + * 前端枚举名 + */ + @ApiModelProperty("前端枚举名") + private String enumFront; + + /** + * 正则表达式 + */ + @ApiModelProperty("正则表达式") + private String regularExpression; + + /** + * 是否排序字段 + */ + @ApiModelProperty(value = "是否排序字段", required = true) + @NotNull(message = "是否排序字段不能为空!") + private Boolean isOrder; + + /** + * 排序类型 + */ + @ApiModelProperty("排序类型") + @IsEnum(message = "排序类型格式不正确!", enumClass = GenOrderType.class) + private String orderType; + + /** + * 数据字典ID + */ + @ApiModelProperty("数据字典ID") + private String dataDicId; + + /** + * 自定义选择器ID + */ + @ApiModelProperty("自定义选择器ID") + private String customSelectorId; + + /** + * 长度 + */ + @ApiModelProperty("长度") + @Min(value = 1, message = "长度必须大于0!") + private Long len; + + /** + * 小数位数 + */ + @ApiModelProperty("小数位数") + @Min(value = 1, message = "小数位数必须大于0!") + private Integer decimals; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntitySelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntitySelectorVo.java new file mode 100644 index 0000000..c4e8902 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/GenDataEntitySelectorVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.data.entity; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataEntitySelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/QueryDataEntityVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/QueryDataEntityVo.java new file mode 100644 index 0000000..a6204a8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/QueryDataEntityVo.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.vo.data.entity; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 查询数据实体列表Vo + */ +@Data +public class QueryDataEntityVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityGenerateVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityGenerateVo.java new file mode 100644 index 0000000..d20fd79 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityGenerateVo.java @@ -0,0 +1,72 @@ +package com.lframework.starter.web.gen.vo.data.entity; + +import com.lframework.starter.web.gen.vo.UpdateCreateColumnConfigVo; +import com.lframework.starter.web.gen.vo.UpdateDetailColumnConfigVo; +import com.lframework.starter.web.gen.vo.UpdateGenerateInfoVo; +import com.lframework.starter.web.gen.vo.UpdateQueryColumnConfigVo; +import com.lframework.starter.web.gen.vo.UpdateQueryParamsColumnConfigVo; +import com.lframework.starter.web.gen.vo.UpdateUpdateColumnConfigVo; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateDataEntityGenerateVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 基础设置 + */ + @ApiModelProperty(value = "基础设置", required = true) + @Valid + @NotNull(message = "基本设置不能为空!") + private UpdateGenerateInfoVo generateInfo; + + /** + * 新增配置 + */ + @ApiModelProperty("新增配置") + @Valid + private List createConfigs; + + /** + * 修改配置 + */ + @ApiModelProperty("修改配置") + @Valid + private List updateConfigs; + + /** + * 查询配置 + */ + @ApiModelProperty("查询配置") + @Valid + private List queryConfigs; + + /** + * 查询参数配置 + */ + @ApiModelProperty("查询参数配置") + @Valid + private List queryParamsConfigs; + + /** + * 详情配置 + */ + @ApiModelProperty("详情配置") + @Valid + private List detailConfigs; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityVo.java new file mode 100644 index 0000000..81ffeb4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/UpdateDataEntityVo.java @@ -0,0 +1,58 @@ +package com.lframework.starter.web.gen.vo.data.entity; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateDataEntityVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; + + /** + * 字段信息 + */ + @ApiModelProperty(value = "字段信息", required = true) + @Valid + @NotEmpty(message = "字段信息不能为空!") + private List columns; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/CreateGenDataEntityCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/CreateGenDataEntityCategoryVo.java new file mode 100644 index 0000000..19fab0a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/CreateGenDataEntityCategoryVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.data.entity.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenDataEntityCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/GenDataEntityCategorySelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/GenDataEntityCategorySelectorVo.java new file mode 100644 index 0000000..5dedee2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/GenDataEntityCategorySelectorVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.gen.vo.data.entity.category; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataEntityCategorySelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/UpdateGenDataEntityCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/UpdateGenDataEntityCategoryVo.java new file mode 100644 index 0000000..6147519 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/entity/category/UpdateGenDataEntityCategoryVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.vo.data.entity.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenDataEntityCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/CreateGenDataObjVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/CreateGenDataObjVo.java new file mode 100644 index 0000000..6ae7a42 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/CreateGenDataObjVo.java @@ -0,0 +1,62 @@ +package com.lframework.starter.web.gen.vo.data.obj; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenDataObjVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 主表 + */ + @ApiModelProperty(value = "主表", required = true) + @NotBlank(message = "主表不能为空!") + private String mainTableId; + + /** + * 主表别名 + */ + @ApiModelProperty(value = "主表别名", required = true) + @NotBlank(message = "主表别名不能为空!") + private String mainTableAlias; + + /** + * 关联信息 + */ + @ApiModelProperty(value = "关联信息") + @Valid + private List columns; + + /** + * 自定义查询 + */ + @ApiModelProperty(value = "自定义查询") + @Valid + private List queryColumns; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjDetailVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjDetailVo.java new file mode 100644 index 0000000..77faca0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjDetailVo.java @@ -0,0 +1,70 @@ +package com.lframework.starter.web.gen.vo.data.obj; + +import com.lframework.starter.web.gen.enums.GenRelaMode; +import com.lframework.starter.web.gen.enums.GenRelaType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class GenDataObjDetailVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 主表字段 + */ + @ApiModelProperty(value = "主表字段", required = true) + @NotEmpty(message = "主表字段不能为空!") + private List mainTableDetailIds; + + /** + * 关联类型 + */ + @ApiModelProperty(value = "关联类型", required = true) + @NotNull(message = "关联类型不能为空!") + @IsEnum(message = "关联类型不能为空!", enumClass = GenRelaType.class) + private Integer relaType; + + /** + * 关联方式 + */ + @ApiModelProperty(value = "关联方式", required = true) + @NotNull(message = "关联方式不能为空!") + @IsEnum(message = "关联方式不能为空!", enumClass = GenRelaMode.class) + private Integer relaMode; + + /** + * 子表ID + */ + @ApiModelProperty(value = "子表ID", required = true) + @NotBlank(message = "子表ID不能为空!") + private String subTableId; + + /** + * 子表别名 + */ + @ApiModelProperty(value = "子表别名", required = true) + @NotBlank(message = "子表别名不能为空!") + private String subTableAlias; + + /** + * 子表字段 + */ + @ApiModelProperty(value = "子表字段", required = true) + @NotEmpty(message = "子表字段不能为空!") + private List subTableDetailIds; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjQueryDetailVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjQueryDetailVo.java new file mode 100644 index 0000000..22ca42a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjQueryDetailVo.java @@ -0,0 +1,53 @@ +package com.lframework.starter.web.gen.vo.data.obj; + +import com.lframework.starter.web.gen.enums.GenDataType; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class GenDataObjQueryDetailVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 显示名称 + */ + @ApiModelProperty(value = "显示名称", required = true) + @NotBlank(message = "显示名称不能为空!") + private String customName; + + /** + * 自定义SQL + */ + @ApiModelProperty(value = "自定义SQL", required = true) + @NotBlank(message = "自定义SQL不能为空!") + private String customSql; + + /** + * 别名 + */ + @ApiModelProperty(value = "别名", required = true) + @NotBlank(message = "别名不能为空!") + private String customAlias; + + /** + * 数据类型 + */ + @ApiModelProperty(value = "数据类型", required = true) + @NotNull(message = "数据类型不能为空!") + @IsEnum(message = "数据类型格式不正确!", enumClass = GenDataType.class) + private Integer dataType; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjSelectorVo.java new file mode 100644 index 0000000..c820715 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/GenDataObjSelectorVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.data.obj; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataObjSelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/QueryGenDataObjVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/QueryGenDataObjVo.java new file mode 100644 index 0000000..5379dde --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/QueryGenDataObjVo.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.gen.vo.data.obj; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 查询数据对象列表Vo + */ +@Data +public class QueryGenDataObjVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/UpdateGenDataObjVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/UpdateGenDataObjVo.java new file mode 100644 index 0000000..5a9aeb0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/UpdateGenDataObjVo.java @@ -0,0 +1,70 @@ +package com.lframework.starter.web.gen.vo.data.obj; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenDataObjVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 主表别名 + */ + @ApiModelProperty(value = "主表别名", required = true) + @NotBlank(message = "主表别名不能为空!") + private String mainTableAlias; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; + + /** + * 关联信息 + */ + @ApiModelProperty(value = "关联信息") + @Valid + private List columns; + + /** + * 自定义查询 + */ + @ApiModelProperty(value = "自定义查询") + @Valid + private List queryColumns; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/CreateGenDataObjCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/CreateGenDataObjCategoryVo.java new file mode 100644 index 0000000..241477e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/CreateGenDataObjCategoryVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.gen.vo.data.obj.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateGenDataObjCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/GenDataObjCategorySelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/GenDataObjCategorySelectorVo.java new file mode 100644 index 0000000..c52bc2a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/GenDataObjCategorySelectorVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.gen.vo.data.obj.category; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GenDataObjCategorySelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/UpdateGenDataObjCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/UpdateGenDataObjCategoryVo.java new file mode 100644 index 0000000..043b34c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/data/obj/category/UpdateGenDataObjCategoryVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.gen.vo.data.obj.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateGenDataObjCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/QuerySimpleTableColumnVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/QuerySimpleTableColumnVo.java new file mode 100644 index 0000000..cdc1b65 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/QuerySimpleTableColumnVo.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.gen.vo.simpledb; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class QuerySimpleTableColumnVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 数据表所属的数据库名 + */ + @ApiModelProperty(value = "数据表所属的数据库名", required = true) + private String tableSchema; + + /** + * 数据库表名 + */ + @ApiModelProperty(value = "数据库表名", required = true) + @NotBlank(message = "请输入数据库表名!") + private String tableName; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/SimpleTableSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/SimpleTableSelectorVo.java new file mode 100644 index 0000000..0d9efa3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/vo/simpledb/SimpleTableSelectorVo.java @@ -0,0 +1,17 @@ +package com.lframework.starter.web.gen.vo.simpledb; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SimpleTableSelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/CollectMenuBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/CollectMenuBo.java new file mode 100644 index 0000000..fe17120 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/CollectMenuBo.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.inner.bo.auth; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.VoidDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CollectMenuBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 路由路径 + */ + @ApiModelProperty("路由路径") + private String path; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/ForgetPswUserInfoBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/ForgetPswUserInfoBo.java new file mode 100644 index 0000000..f7414b1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/ForgetPswUserInfoBo.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.inner.bo.auth; + +import com.lframework.starter.web.core.bo.SuperBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ForgetPswUserInfoBo implements SuperBo { + + /** + * 用户名 + */ + @ApiModelProperty("用户名") + private String username; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱,脱敏") + private String email; + + /** + * 联系电话 + */ + @ApiModelProperty("联系电话,脱敏") + private String telephone; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/LoginBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/LoginBo.java new file mode 100644 index 0000000..238ce18 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/LoginBo.java @@ -0,0 +1,62 @@ +package com.lframework.starter.web.inner.bo.auth; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.dto.system.LoginDto; +import com.lframework.starter.web.inner.dto.system.LoginDto.UserInfoDto; +import io.swagger.annotations.ApiModelProperty; +import java.util.Set; +import lombok.Data; + +@Data +public class LoginBo extends BaseBo { + + /** + * Token + */ + @ApiModelProperty("Token") + private String token; + + /** + * 用户信息 + */ + @ApiModelProperty("用户信息") + private UserInfoBo user; + + /** + * 角色 + */ + @ApiModelProperty("角色") + private Set roles; + + public LoginBo() { + } + + public LoginBo(LoginDto dto) { + super(dto); + } + + @Override + protected void afterInit(LoginDto dto) { + + this.user = new UserInfoBo(dto.getUser()); + } + + @Data + public static class UserInfoBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + public UserInfoBo() { + } + + public UserInfoBo(UserInfoDto dto) { + super(dto); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/MenuBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/MenuBo.java new file mode 100644 index 0000000..6ad3eb4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/MenuBo.java @@ -0,0 +1,114 @@ +package com.lframework.starter.web.inner.bo.auth; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.VoidDto; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +@Data +public class MenuBo extends BaseBo { + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 组件 + */ + @ApiModelProperty("组件") + private String component; + + /** + * 子节点 + */ + @ApiModelProperty("子节点") + private List children; + + /** + * 路由路径 + */ + @ApiModelProperty("路由路径") + private String path; + + /** + * 元数据 + */ + @ApiModelProperty("元数据") + private MetaBo meta; + + public MenuBo() { + } + + @Data + public static class MetaBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 是否隐藏 + */ + @ApiModelProperty("是否隐藏") + private Boolean hideMenu; + + /** + * 是否不缓存 + */ + @ApiModelProperty("是否不缓存") + private Boolean ignoreKeepAlive; + + /** + * 是否固定 + */ + @ApiModelProperty("是否固定") + private Boolean affix = Boolean.FALSE; + + /** + * 是否外部链接 + */ + @ApiModelProperty("是否外部链接") + private Boolean isLink = Boolean.FALSE; + + /** + * 是否收藏 + */ + @ApiModelProperty("是否收藏") + private Boolean isCollect = Boolean.FALSE; + + /** + * 内嵌链接地址 + */ + @ApiModelProperty("内嵌链接地址") + private String frameSrc; + + /** + * 自定义列表ID + */ + @ApiModelProperty("自定义列表ID") + private String customListId; + + /** + * 自定义页面ID + */ + @ApiModelProperty("自定义页面ID") + private String customPageId; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/TelephoneLoginBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/TelephoneLoginBo.java new file mode 100644 index 0000000..145492c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/auth/TelephoneLoginBo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.bo.auth; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.dto.system.LoginDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 手机号登录Bo + * + * @author zmj + * @since 2022/4/25 + */ +@Data +public class TelephoneLoginBo extends BaseBo { + + /** + * 登录信息 + */ + @ApiModelProperty("登录信息") + private LoginBo loginInfo; + + /** + * 是否绑定用户 + */ + @ApiModelProperty("是否绑定用户") + private Boolean isBind = Boolean.TRUE; + + public TelephoneLoginBo() { + + } + + public TelephoneLoginBo(LoginDto dto) { + + this.afterInit(dto); + } + + @Override + protected void afterInit(LoginDto dto) { + + this.loginInfo = new LoginBo(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/oplog/OpLogInUserCenterBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/oplog/OpLogInUserCenterBo.java new file mode 100644 index 0000000..238dee8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/oplog/OpLogInUserCenterBo.java @@ -0,0 +1,53 @@ +package com.lframework.starter.web.inner.bo.oplog; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.OpLogs; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class OpLogInUserCenterBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 日志名称 + */ + @ApiModelProperty("日志名称") + private String name; + + /** + * 类别 + */ + @ApiModelProperty("类别") + private Integer logType; + + /** + * IP + */ + @ApiModelProperty("IP") + private String ip; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + public OpLogInUserCenterBo() { + + } + + public OpLogInUserCenterBo(OpLogs dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/GetQrtzBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/GetQrtzBo.java new file mode 100644 index 0000000..add592f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/GetQrtzBo.java @@ -0,0 +1,100 @@ +package com.lframework.starter.web.inner.bo.qrtz; + +import com.lframework.starter.web.inner.dto.qrtz.QrtzDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +@Data +public class GetQrtzBo extends BaseBo { + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分组 + */ + @ApiModelProperty("分组") + private String group; + + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + private Integer tenantId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 执行类名 + */ + @ApiModelProperty("执行类名") + private String targetClassName; + + /** + * 执行方法名 + */ + @ApiModelProperty("执行方法名") + private String targetMethodName; + + /** + * 执行参数类型 + */ + @ApiModelProperty("执行参数类型") + private List targetParamTypes; + + /** + * 执行参数 + */ + @ApiModelProperty("执行参数") + private List targetParams; + + /** + * 脚本 + */ + @ApiModelProperty("脚本") + private String script; + + /** + * 任务类型 + */ + @ApiModelProperty("任务类型") + private Integer jobType; + + /** + * Cron表达式 + */ + @ApiModelProperty("Cron表达式") + private String cron; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private String state; + + public GetQrtzBo(QrtzDto dto) { + super(dto); + } + + @Override + public BaseBo convert(QrtzDto dto) { + return super.convert(dto, GetQrtzBo::getState); + } + + @Override + protected void afterInit(QrtzDto dto) { + this.jobType = dto.getJobType().getCode(); + if (dto.getState() != null) { + this.state = dto.getState().getCode(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/QueryQrtzBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/QueryQrtzBo.java new file mode 100644 index 0000000..7e01a42 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/qrtz/QueryQrtzBo.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.inner.bo.qrtz; + +import com.lframework.starter.web.inner.dto.qrtz.QrtzDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryQrtzBo extends BaseBo { + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分组 + */ + @ApiModelProperty("分组") + private String group; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 任务类型 + */ + @ApiModelProperty("任务类型") + private Integer jobType; + + /** + * Cron表达式 + */ + @ApiModelProperty("Cron表达式") + private String cron; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private String state; + + public QueryQrtzBo(QrtzDto dto) { + super(dto); + } + + @Override + public BaseBo convert(QrtzDto dto) { + return super.convert(dto, QueryQrtzBo::getState); + } + + @Override + protected void afterInit(QrtzDto dto) { + this.jobType = dto.getJobType().getCode(); + if (dto.getState() != null) { + this.state = dto.getState().getCode(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/GetSysDeptBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/GetSysDeptBo.java new file mode 100644 index 0000000..ce6456f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/GetSysDeptBo.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.inner.bo.system.dept; + +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysDeptBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 简称 + */ + @ApiModelProperty("简称") + private String shortName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetSysDeptBo() { + + } + + public GetSysDeptBo(SysDept dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptSelectorBo.java new file mode 100644 index 0000000..6178eaa --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptSelectorBo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.bo.system.dept; + +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDeptSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public SysDeptSelectorBo() { + + } + + public SysDeptSelectorBo(SysDept dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptTreeBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptTreeBo.java new file mode 100644 index 0000000..a3b7e0f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dept/SysDeptTreeBo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.bo.system.dept; + +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDeptTreeBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public SysDeptTreeBo() { + + } + + public SysDeptTreeBo(SysDept dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/GetSysDataDicBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/GetSysDataDicBo.java new file mode 100644 index 0000000..d6814da --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/GetSysDataDicBo.java @@ -0,0 +1,64 @@ +package com.lframework.starter.web.inner.bo.system.dic; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.inner.service.system.SysDataDicCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysDataDicBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + + public GetSysDataDicBo() { + + } + + public GetSysDataDicBo(SysDataDic dto) { + + super(dto); + } + + @Override + protected void afterInit(SysDataDic dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + SysDataDicCategoryService sysDataDicCategoryService = ApplicationUtil.getBean( + SysDataDicCategoryService.class); + SysDataDicCategory category = sysDataDicCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/QuerySysDataDicBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/QuerySysDataDicBo.java new file mode 100644 index 0000000..0f69212 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/QuerySysDataDicBo.java @@ -0,0 +1,64 @@ +package com.lframework.starter.web.inner.bo.system.dic; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.inner.service.system.SysDataDicCategoryService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySysDataDicBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 分类名称 + */ + @ApiModelProperty("分类名称") + private String categoryName; + + + public QuerySysDataDicBo() { + + } + + public QuerySysDataDicBo(SysDataDic dto) { + + super(dto); + } + + @Override + protected void afterInit(SysDataDic dto) { + if (!StringUtil.isBlank(dto.getCategoryId())) { + SysDataDicCategoryService sysDataDicCategoryService = ApplicationUtil.getBean( + SysDataDicCategoryService.class); + SysDataDicCategory category = sysDataDicCategoryService.findById(dto.getCategoryId()); + this.categoryName = category.getName(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/SysDataDicSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/SysDataDicSelectorBo.java new file mode 100644 index 0000000..d8fafca --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/SysDataDicSelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.bo.system.dic; + +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDataDicSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public SysDataDicSelectorBo() { + } + + public SysDataDicSelectorBo(SysDataDic dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/GetSysDataDicCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/GetSysDataDicCategoryBo.java new file mode 100644 index 0000000..64a969c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/GetSysDataDicCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.bo.system.dic.category; + +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysDataDicCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public GetSysDataDicCategoryBo() { + + } + + public GetSysDataDicCategoryBo(SysDataDicCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/QuerySysDataDicCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/QuerySysDataDicCategoryBo.java new file mode 100644 index 0000000..f4ea6cd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/QuerySysDataDicCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.bo.system.dic.category; + +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySysDataDicCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public QuerySysDataDicCategoryBo() { + + } + + public QuerySysDataDicCategoryBo(SysDataDicCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/SysDataDicCategorySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/SysDataDicCategorySelectorBo.java new file mode 100644 index 0000000..0137dd4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/category/SysDataDicCategorySelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.bo.system.dic.category; + +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDataDicCategorySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public SysDataDicCategorySelectorBo() { + } + + public SysDataDicCategorySelectorBo(SysDataDicCategory dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/GetSysDataDicItemBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/GetSysDataDicItemBo.java new file mode 100644 index 0000000..52c8f9a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/GetSysDataDicItemBo.java @@ -0,0 +1,50 @@ +package com.lframework.starter.web.inner.bo.system.dic.item; + +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysDataDicItemBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 字典ID + */ + @ApiModelProperty("字典ID") + private String dicId; + + /** + * 排序 + */ + @ApiModelProperty("排序") + private Integer orderNo; + + + public GetSysDataDicItemBo() { + + } + + public GetSysDataDicItemBo(SysDataDicItem dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/QuerySysDataDicItemBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/QuerySysDataDicItemBo.java new file mode 100644 index 0000000..0acb6bd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/QuerySysDataDicItemBo.java @@ -0,0 +1,50 @@ +package com.lframework.starter.web.inner.bo.system.dic.item; + +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySysDataDicItemBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 字典ID + */ + @ApiModelProperty("字典ID") + private String dicId; + + /** + * 排序 + */ + @ApiModelProperty("排序") + private Integer orderNo; + + + public QuerySysDataDicItemBo() { + + } + + public QuerySysDataDicItemBo(SysDataDicItem dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/SysDataDicItemBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/SysDataDicItemBo.java new file mode 100644 index 0000000..197b9e8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/dic/item/SysDataDicItemBo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.inner.bo.system.dic.item; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDataDicItemBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public SysDataDicItemBo() { + + } + + public SysDataDicItemBo(SysDataDicItem dto) { + + super(dto); + } + + @Override + protected void afterInit(SysDataDicItem dto) { + SysDataDicService sysDataDicService = ApplicationUtil.getBean(SysDataDicService.class); + SysDataDic dataDic = sysDataDicService.findById(dto.getDicId()); + this.id = dataDic.getCode() + StringPool.DATA_DIC_SPLIT + this.code; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/GetSysGenerateCodeBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/GetSysGenerateCodeBo.java new file mode 100644 index 0000000..19acbea --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/GetSysGenerateCodeBo.java @@ -0,0 +1,64 @@ +package com.lframework.starter.web.inner.bo.system.generate; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.core.dto.GenerateCodeDto; +import com.lframework.starter.web.inner.service.GenerateCodeService; +import com.lframework.starter.web.inner.entity.SysGenerateCode; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 编号规则 GetBo + *

+ * + * @author zmj + */ +@Data +public class GetSysGenerateCodeBo extends BaseBo { + + /** + * ID + */ + @JsonSerialize(using = ToStringSerializer.class) + @ApiModelProperty("ID") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 配置规则 + */ + @ApiModelProperty("配置规则") + private String configStr; + + public GetSysGenerateCodeBo() { + + } + + public GetSysGenerateCodeBo(SysGenerateCode dto) { + + super(dto); + } + + @Override + protected void afterInit(SysGenerateCode dto) { + if (!StringUtil.isBlank(dto.getConfigStr())) { + GenerateCodeService generateCodeService = ApplicationUtil.getBean(GenerateCodeService.class); + GenerateCodeDto generateCodeDto = new GenerateCodeDto(); + generateCodeDto.setId(dto.getId()); + generateCodeDto.setConfigStr(dto.getConfigStr()); + + this.configStr = JsonUtil.toJsonString(generateCodeService.getRules(generateCodeDto)); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/QuerySysGenerateCodeBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/QuerySysGenerateCodeBo.java new file mode 100644 index 0000000..0e803b8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/generate/QuerySysGenerateCodeBo.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.inner.bo.system.generate; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysGenerateCode; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 编号规则 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QuerySysGenerateCodeBo extends BaseBo { + + /** + * ID + */ + @JsonSerialize(using = ToStringSerializer.class) + @ApiModelProperty("ID") + private Long id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public QuerySysGenerateCodeBo() { + + } + + public QuerySysGenerateCodeBo(SysGenerateCode dto) { + + super(dto); + } + + @Override + protected void afterInit(SysGenerateCode dto) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/GetSysMenuBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/GetSysMenuBo.java new file mode 100644 index 0000000..a833030 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/GetSysMenuBo.java @@ -0,0 +1,192 @@ +package com.lframework.starter.web.inner.bo.system.menu; + +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.gen.entity.GenCustomList; +import com.lframework.starter.web.gen.service.GenCustomListService; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.inner.enums.system.SysMenuComponentType; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysMenuBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称(前端使用) + */ + @ApiModelProperty("名称(前端使用)") + private String name; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 组件类型 + */ + @ApiModelProperty("组件类型(前端使用)") + private Integer componentType; + + /** + * 组件(前端使用) + */ + @ApiModelProperty("组件(前端使用)") + private String component; + + /** + * 自定义列表ID + */ + @ApiModelProperty("自定义列表ID") + private String customListId; + + /** + * 自定义列表名称 + */ + @ApiModelProperty("自定义列表名称") + private String customListName; + + /** + * 自定义表单ID + */ + @ApiModelProperty("自定义表单ID") + private String customFormId; + + /** + * 自定义表单名称 + */ + @ApiModelProperty("自定义表单名称") + private String customFormName; + + /** + * 自定义请求参数 + */ + @ApiModelProperty("自定义请求参数") + private String requestParam; + + /** + * 自定义页面ID + */ + @ApiModelProperty("自定义页面ID") + private String customPageId; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 父级名称 + */ + @ApiModelProperty("父级名称") + private String parentName; + + /** + * 路由路径(前端使用) + */ + @ApiModelProperty("路由路径(前端使用)") + private String path; + + /** + * 是否缓存(前端使用) + */ + @ApiModelProperty("是否缓存(前端使用)") + private Boolean noCache; + + /** + * 类型 0-目录 1-菜单 2-功能 + */ + @ApiModelProperty("类型 0-目录 1-菜单 2-功能") + private Integer display; + + /** + * 是否隐藏(前端使用) + */ + @ApiModelProperty("是否隐藏(前端使用)") + private Boolean hidden; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 是否特殊菜单 + */ + @ApiModelProperty("是否特殊菜单") + private Boolean isSpecial; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetSysMenuBo() { + + } + + public GetSysMenuBo(SysMenu dto) { + + super(dto); + } + + @Override + public
BaseBo convert(SysMenu dto) { + + return super.convert(dto, GetSysMenuBo::getDisplay); + } + + @Override + protected void afterInit(SysMenu dto) { + + this.display = dto.getDisplay().getCode(); + if (!StringUtil.isBlank(dto.getParentId())) { + SysMenuService sysMenuService = ApplicationUtil.getBean(SysMenuService.class); + this.parentName = sysMenuService.findById(dto.getParentId()).getTitle(); + } + + this.componentType = dto.getComponentType() == null ? null : dto.getComponentType().getCode(); + if (dto.getComponentType() == SysMenuComponentType.CUSTOM_LIST) { + this.customListId = dto.getComponent(); + GenCustomListService genCustomListService = ApplicationUtil + .getBean(GenCustomListService.class); + GenCustomList customList = genCustomListService.findById(dto.getComponent()); + this.customListName = customList.getName(); + } else if (dto.getComponentType() == SysMenuComponentType.CUSTOM_PAGE) { + this.customPageId = dto.getComponent(); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/QuerySysMenuBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/QuerySysMenuBo.java new file mode 100644 index 0000000..73af617 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/QuerySysMenuBo.java @@ -0,0 +1,93 @@ +package com.lframework.starter.web.inner.bo.system.menu; + +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySysMenuBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 类型 + */ + @ApiModelProperty("类型") + private Integer display; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 是否特殊菜单 + */ + @ApiModelProperty("是否特殊菜单") + private Boolean isSpecial; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public QuerySysMenuBo() { + + } + + public QuerySysMenuBo(SysMenu dto) { + + super(dto); + } + + @Override + public BaseBo convert(SysMenu dto) { + + return super.convert(dto, QuerySysMenuBo::getDisplay); + } + + @Override + protected void afterInit(SysMenu dto) { + + this.display = dto.getDisplay().getCode(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/SysMenuSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/SysMenuSelectorBo.java new file mode 100644 index 0000000..4b1cbe7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/menu/SysMenuSelectorBo.java @@ -0,0 +1,39 @@ +package com.lframework.starter.web.inner.bo.system.menu; + +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysMenuSelectorBo extends BaseBo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + public SysMenuSelectorBo() { + + } + + public SysMenuSelectorBo(SysMenu dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/GetSysMailMessageBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/GetSysMailMessageBo.java new file mode 100644 index 0000000..dd412e6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/GetSysMailMessageBo.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.inner.bo.system.message.mail; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysMailMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 邮件消息 GetBo + *

+ * + * @author zmj + */ +@Data +public class GetSysMailMessageBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 内容 + */ + @ApiModelProperty("内容") + private String content; + + public GetSysMailMessageBo() { + + } + + public GetSysMailMessageBo(SysMailMessage dto) { + + super(dto); + } + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/QuerySysMailMessageBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/QuerySysMailMessageBo.java new file mode 100644 index 0000000..924dacc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/mail/QuerySysMailMessageBo.java @@ -0,0 +1,69 @@ +package com.lframework.starter.web.inner.bo.system.message.mail; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.annotations.constants.EncryType; +import com.lframework.starter.web.core.annotations.convert.EncryptConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysMailMessage; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 邮件消息 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QuerySysMailMessageBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 接收邮箱 + */ + @ApiModelProperty("接收邮箱") + @EncryptConvert(type = EncryType.EMAIL) + private String mail; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 发送状态 + */ + @ApiModelProperty("发送状态") + private Integer sendStatus; + + public QuerySysMailMessageBo() { + + } + + public QuerySysMailMessageBo(SysMailMessage dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/GetSysSiteMessageBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/GetSysSiteMessageBo.java new file mode 100644 index 0000000..ebd0e32 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/GetSysSiteMessageBo.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.inner.bo.system.message.site; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 站内信 GetBo + *

+ * + * @author zmj + */ +@Data +public class GetSysSiteMessageBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 内容 + */ + @ApiModelProperty("内容") + private String content; + + public GetSysSiteMessageBo() { + + } + + public GetSysSiteMessageBo(SysSiteMessage dto) { + + super(dto); + } + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QueryMySysSiteMessageBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QueryMySysSiteMessageBo.java new file mode 100644 index 0000000..d37afe7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QueryMySysSiteMessageBo.java @@ -0,0 +1,54 @@ +package com.lframework.starter.web.inner.bo.system.message.site; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 我的站内信 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QueryMySysSiteMessageBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 是否已读 + */ + @ApiModelProperty("是否已读") + private Boolean readed; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + public QueryMySysSiteMessageBo() { + + } + + public QueryMySysSiteMessageBo(SysSiteMessage dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QuerySysSiteMessageBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QuerySysSiteMessageBo.java new file mode 100644 index 0000000..a6a8137 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/message/site/QuerySysSiteMessageBo.java @@ -0,0 +1,83 @@ +package com.lframework.starter.web.inner.bo.system.message.site; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.service.system.SysUserService; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 站内信 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QuerySysSiteMessageBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 接收人姓名 + */ + @ApiModelProperty("接收人姓名") + private String receiverName; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 是否已读 + */ + @ApiModelProperty("是否已读") + private Boolean readed; + + /** + * 已读时间 + */ + @ApiModelProperty("已读时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime readTime; + + public QuerySysSiteMessageBo() { + + } + + public QuerySysSiteMessageBo(SysSiteMessage dto) { + + super(dto); + } + + @Override + protected void afterInit(SysSiteMessage dto) { + SysUserService sysUserService = ApplicationUtil.getBean(SysUserService.class); + SysUser receiver = sysUserService.findById(dto.getReceiverId()); + this.receiverName = receiver.getName(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/module/QuerySysModuleBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/module/QuerySysModuleBo.java new file mode 100644 index 0000000..a662896 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/module/QuerySysModuleBo.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.inner.bo.system.module; + +import com.lframework.starter.web.inner.entity.SysModule; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysModuleBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 是否启用 + */ + @ApiModelProperty("是否启用") + private Boolean enabled; + + /** + * 过期时间 + */ + @ApiModelProperty("过期时间") + private LocalDateTime expireTime; + + public QuerySysModuleBo(SysModule dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/GetSysNoticeBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/GetSysNoticeBo.java new file mode 100644 index 0000000..56dec93 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/GetSysNoticeBo.java @@ -0,0 +1,57 @@ +package com.lframework.starter.web.inner.bo.system.notice; + +import com.lframework.starter.web.inner.entity.SysNotice; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 系统通知 GetBo + *

+ * + * @author zmj + */ +@Data +public class GetSysNoticeBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 内容 + */ + @ApiModelProperty("内容") + private String content; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 是否发布 + */ + @ApiModelProperty("是否发布") + private Boolean published; + + public GetSysNoticeBo() { + + } + + public GetSysNoticeBo(SysNotice dto) { + + super(dto); + } + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QueryMySysNoticeBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QueryMySysNoticeBo.java new file mode 100644 index 0000000..81adcb1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QueryMySysNoticeBo.java @@ -0,0 +1,54 @@ +package com.lframework.starter.web.inner.bo.system.notice; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.inner.dto.system.notice.QuerySysNoticeByUserDto; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 我的系统通知 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QueryMySysNoticeBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 是否已读 + */ + @ApiModelProperty("是否已读") + private Boolean readed; + + /** + * 发布时间 + */ + @ApiModelProperty("发布时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime publishTime; + + public QueryMySysNoticeBo() { + + } + + public QueryMySysNoticeBo(QuerySysNoticeByUserDto dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QuerySysNoticeBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QuerySysNoticeBo.java new file mode 100644 index 0000000..8bd1435 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notice/QuerySysNoticeBo.java @@ -0,0 +1,89 @@ +package com.lframework.starter.web.inner.bo.system.notice; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.inner.entity.SysNotice; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 系统通知 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QuerySysNoticeBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 是否发布 + */ + @ApiModelProperty("是否发布") + private Boolean published; + + /** + * 发布时间 + */ + @ApiModelProperty("发布时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime publishTime; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 已读人数 + */ + @ApiModelProperty("已读人数") + private Integer readedNum; + + /** + * 未读人数 + */ + @ApiModelProperty("未读人数") + private Integer unReadNum; + + public QuerySysNoticeBo() { + + } + + public QuerySysNoticeBo(SysNotice dto) { + + super(dto); + } + + @Override + protected void afterInit(SysNotice dto) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/GetSysNotifyGroupBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/GetSysNotifyGroupBo.java new file mode 100644 index 0000000..b82fe48 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/GetSysNotifyGroupBo.java @@ -0,0 +1,94 @@ +package com.lframework.starter.web.inner.bo.system.notify; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.service.system.SysNotifyGroupReceiverService; +import io.swagger.annotations.ApiModelProperty; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import lombok.Data; + +/** + *

+ * 消息通知组 GetBo + *

+ * + * @author zmj + */ +@Data +public class GetSysNotifyGroupBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 接收者类型 + */ + @ApiModelProperty("接收者类型") + private Integer receiverType; + + /** + * 接收者ID + */ + @ApiModelProperty("接收者ID") + private List receiverIds; + + /** + * 消息类型 + */ + @ApiModelProperty("消息类型") + private List messageType; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public GetSysNotifyGroupBo() { + + } + + public GetSysNotifyGroupBo(SysNotifyGroup dto) { + + super(dto); + } + + @Override + public BaseBo convert(SysNotifyGroup dto) { + return super.convert(dto, GetSysNotifyGroupBo::getReceiverType, + GetSysNotifyGroupBo::getMessageType); + } + + @Override + protected void afterInit(SysNotifyGroup dto) { + + this.receiverType = dto.getReceiverType().getCode(); + + SysNotifyGroupReceiverService sysNotifyGroupReceiverService = ApplicationUtil.getBean( + SysNotifyGroupReceiverService.class); + this.receiverIds = sysNotifyGroupReceiverService.getReceiverIdsByGroupId(dto.getId()); + + this.messageType = Arrays.stream(dto.getMessageType().split(StringPool.STR_SPLIT)) + .map(Integer::valueOf).collect( + Collectors.toList()); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/QuerySysNotifyGroupBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/QuerySysNotifyGroupBo.java new file mode 100644 index 0000000..ad8a47c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/QuerySysNotifyGroupBo.java @@ -0,0 +1,98 @@ +package com.lframework.starter.web.inner.bo.system.notify; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.enums.system.SysNotifyMessageType; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.stream.Collectors; +import lombok.Data; + +/** + *

+ * 消息通知组 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QuerySysNotifyGroupBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 接收者类型 + */ + @ApiModelProperty("接收者类型") + private String receiverType; + + /** + * 消息类型 + */ + @ApiModelProperty("消息类型") + private String messageType; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public QuerySysNotifyGroupBo() { + + } + + public QuerySysNotifyGroupBo(SysNotifyGroup dto) { + + super(dto); + } + + @Override + public BaseBo convert(SysNotifyGroup dto) { + return super.convert(dto, QuerySysNotifyGroupBo::getReceiverType, + QuerySysNotifyGroupBo::getMessageType); + } + + @Override + protected void afterInit(SysNotifyGroup dto) { + + this.receiverType = dto.getReceiverType().getDesc(); + this.messageType = Arrays.stream(dto.getMessageType().split(StringPool.STR_SPLIT)) + .map(Integer::valueOf).map( + t -> EnumUtil.getDesc(SysNotifyMessageType.class, t)) + .collect(Collectors.joining(StringPool.STR_SPLIT_CN)); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/SysNotifyGroupSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/SysNotifyGroupSelectorBo.java new file mode 100644 index 0000000..51601dc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/notify/SysNotifyGroupSelectorBo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.bo.system.notify; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysNotifyGroupSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public SysNotifyGroupSelectorBo() { + + } + + public SysNotifyGroupSelectorBo(SysNotifyGroup dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/GetSysOpenDomainBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/GetSysOpenDomainBo.java new file mode 100644 index 0000000..ce02790 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/GetSysOpenDomainBo.java @@ -0,0 +1,57 @@ +package com.lframework.starter.web.inner.bo.system.open; + +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.core.annotations.convert.EncryptConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysOpenDomainBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * API密钥 + */ + @ApiModelProperty("API密钥") + @EncryptConvert + private String apiSecret; + + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + private Integer tenantId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetSysOpenDomainBo() { + + } + + public GetSysOpenDomainBo(SysOpenDomain dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/QuerySysOpenDomainBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/QuerySysOpenDomainBo.java new file mode 100644 index 0000000..c7ac73b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/QuerySysOpenDomainBo.java @@ -0,0 +1,57 @@ +package com.lframework.starter.web.inner.bo.system.open; + +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.core.annotations.convert.EncryptConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySysOpenDomainBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * API密钥 + */ + @ApiModelProperty("API密钥") + @EncryptConvert + private String apiSecret; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + private Integer tenantId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public QuerySysOpenDomainBo() { + + } + + public QuerySysOpenDomainBo(SysOpenDomain dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/SysOpenDomainSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/SysOpenDomainSelectorBo.java new file mode 100644 index 0000000..8d5e571 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/open/SysOpenDomainSelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.bo.system.open; + +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysOpenDomainSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public SysOpenDomainSelectorBo() { + } + + public SysOpenDomainSelectorBo(SysOpenDomain dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/GetOpLogBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/GetOpLogBo.java new file mode 100644 index 0000000..0fb8025 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/GetOpLogBo.java @@ -0,0 +1,65 @@ +package com.lframework.starter.web.inner.bo.system.oplog; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.OpLogs; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class GetOpLogBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 日志名称 + */ + @ApiModelProperty("日志名称") + private String name; + + /** + * 类别 + */ + @ApiModelProperty("类别") + private Integer logType; + + /** + * IP地址 + */ + @ApiModelProperty("IP地址") + private String ip; + + /** + * 补充信息 + */ + @ApiModelProperty("补充信息") + private String extra; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + public GetOpLogBo() { + + } + + public GetOpLogBo(OpLogs dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/QueryOpLogBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/QueryOpLogBo.java new file mode 100644 index 0000000..1174940 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/oplog/QueryOpLogBo.java @@ -0,0 +1,59 @@ +package com.lframework.starter.web.inner.bo.system.oplog; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.OpLogs; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QueryOpLogBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 日志名称 + */ + @ApiModelProperty("日志名称") + private String name; + + /** + * 类别 + */ + @ApiModelProperty("类别") + private Integer logType; + + /** + * IP地址 + */ + @ApiModelProperty("IP地址") + private String ip; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + public QueryOpLogBo() { + + } + + public QueryOpLogBo(OpLogs dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/GetSysParameterBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/GetSysParameterBo.java new file mode 100644 index 0000000..82257f9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/GetSysParameterBo.java @@ -0,0 +1,54 @@ +package com.lframework.starter.web.inner.bo.system.parameter; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.lframework.starter.web.inner.entity.SysParameter; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 系统参数 GetBo + *

+ * + * @author zmj + */ +@Data +public class GetSysParameterBo extends BaseBo { + + /** + * ID + */ + @JsonSerialize(using = ToStringSerializer.class) + @ApiModelProperty("ID") + private Long id; + + /** + * 键 + */ + @ApiModelProperty("键") + private String pmKey; + + /** + * 值 + */ + @ApiModelProperty("值") + private String pmValue; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetSysParameterBo() { + + } + + public GetSysParameterBo(SysParameter dto) { + + super(dto); + } + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/QuerySysParameterBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/QuerySysParameterBo.java new file mode 100644 index 0000000..7b0bc2e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/parameter/QuerySysParameterBo.java @@ -0,0 +1,73 @@ +package com.lframework.starter.web.inner.bo.system.parameter; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.inner.entity.SysParameter; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 系统参数 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QuerySysParameterBo extends BaseBo { + + /** + * ID + */ + @JsonSerialize(using = ToStringSerializer.class) + @ApiModelProperty("ID") + private Long id; + + /** + * 键 + */ + @ApiModelProperty("键") + private String pmKey; + + /** + * 值 + */ + @ApiModelProperty("值") + private String pmValue; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + public QuerySysParameterBo() { + + } + + public QuerySysParameterBo(SysParameter dto) { + + super(dto); + } + + @Override + protected void afterInit(SysParameter dto) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/QuerySysDataPermissionModelDetailBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/QuerySysDataPermissionModelDetailBo.java new file mode 100644 index 0000000..cb65a09 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/QuerySysDataPermissionModelDetailBo.java @@ -0,0 +1,94 @@ +package com.lframework.starter.web.inner.bo.system.permission; + +import com.lframework.starter.web.core.annotations.convert.EnumConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.VoidDto; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +@Data +public class QuerySysDataPermissionModelDetailBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 明细ID + */ + @ApiModelProperty("明细ID") + private Integer detailId; + + /** + * 节点类型 + */ + @ApiModelProperty("节点类型") + private Integer nodeType; + + /** + * 计算类型 + */ + @ApiModelProperty("计算类型") + private Integer calcType; + + /** + * 值 + */ + @ApiModelProperty("值") + private String value; + + /** + * 值 + */ + @ApiModelProperty("值") + private List values; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 模型ID + */ + @ApiModelProperty("模型ID") + private Integer modelId; + + /** + * 条件 + */ + @ApiModelProperty("条件") + private Integer[] conditionTypes; + + /** + * 输入类型 + */ + @ApiModelProperty("输入类型") + @EnumConvert + private Integer inputType; + + /** + * 条件类型 + */ + @ApiModelProperty("条件类型") + private Integer conditionType; + + /** + * 前段枚举名 + */ + @ApiModelProperty("前端枚举名") + private String enumName; + + /** + * 子节点 + */ + @ApiModelProperty("子节点") + private List children; + + public QuerySysDataPermissionModelDetailBo() { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/SysDataPermissionModelDetailBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/SysDataPermissionModelDetailBo.java new file mode 100644 index 0000000..9360af5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/permission/SysDataPermissionModelDetailBo.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.inner.bo.system.permission; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.annotations.convert.EnumConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysDataPermissionModelDetail; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDataPermissionModelDetailBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 模型ID + */ + @ApiModelProperty("模型ID") + private Integer modelId; + + /** + * 条件 + */ + @ApiModelProperty("条件") + private String[] conditionTypes; + + /** + * 输入类型 + */ + @ApiModelProperty("输入类型") + @EnumConvert + private Integer inputType; + + /** + * 前段枚举名 + */ + @ApiModelProperty("前端枚举名") + private String enumName; + + public SysDataPermissionModelDetailBo() { + } + + public SysDataPermissionModelDetailBo(SysDataPermissionModelDetail dto) { + super(dto); + } + + @Override + protected void afterInit(SysDataPermissionModelDetail dto) { + this.conditionTypes = dto.getConditionType().split(StringPool.STR_SPLIT); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/GetSysRoleBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/GetSysRoleBo.java new file mode 100644 index 0000000..5156a46 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/GetSysRoleBo.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.inner.bo.system.role; + +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysRoleBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetSysRoleBo() { + + } + + public GetSysRoleBo(SysRole dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QueryRoleMenuBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QueryRoleMenuBo.java new file mode 100644 index 0000000..09e3991 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QueryRoleMenuBo.java @@ -0,0 +1,85 @@ +package com.lframework.starter.web.inner.bo.system.role; + +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryRoleMenuBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 类型 + */ + @ApiModelProperty("类型") + private Integer display; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 是否选择 + */ + @ApiModelProperty("是否选择") + private Boolean selected = Boolean.FALSE; + + public QueryRoleMenuBo() { + + } + + public QueryRoleMenuBo(SysMenu dto) { + + super(dto); + } + + @Override + public
BaseBo convert(SysMenu dto) { + + return super.convert(dto, QueryRoleMenuBo::getDisplay); + } + + @Override + protected void afterInit(SysMenu dto) { + + this.display = dto.getDisplay().getCode(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QuerySysRoleBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QuerySysRoleBo.java new file mode 100644 index 0000000..85a7ace --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/QuerySysRoleBo.java @@ -0,0 +1,88 @@ +package com.lframework.starter.web.inner.bo.system.role; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysRoleBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 修改人 + */ + @ApiModelProperty("修改人") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime updateTime; + + public QuerySysRoleBo() { + + } + + public QuerySysRoleBo(SysRole dto) { + + super(dto); + } + + @Override + protected void afterInit(SysRole dto) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/SysRoleSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/SysRoleSelectorBo.java new file mode 100644 index 0000000..abd4aca --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/SysRoleSelectorBo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.bo.system.role; + +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysRoleSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public SysRoleSelectorBo() { + + } + + public SysRoleSelectorBo(SysRole dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/GetSysRoleCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/GetSysRoleCategoryBo.java new file mode 100644 index 0000000..e4212b8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/GetSysRoleCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.bo.system.role.category; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetSysRoleCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public GetSysRoleCategoryBo() { + + } + + public GetSysRoleCategoryBo(SysRoleCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/QuerySysRoleCategoryBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/QuerySysRoleCategoryBo.java new file mode 100644 index 0000000..a9739e0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/QuerySysRoleCategoryBo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.bo.system.role.category; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySysRoleCategoryBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + + public QuerySysRoleCategoryBo() { + + } + + public QuerySysRoleCategoryBo(SysRoleCategory dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/SysRoleCategorySelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/SysRoleCategorySelectorBo.java new file mode 100644 index 0000000..f9fcfd4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/role/category/SysRoleCategorySelectorBo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.bo.system.role.category; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysRoleCategorySelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + public SysRoleCategorySelectorBo() { + } + + public SysRoleCategorySelectorBo(SysRoleCategory dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/GetTenantBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/GetTenantBo.java new file mode 100644 index 0000000..c16be94 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/GetTenantBo.java @@ -0,0 +1,55 @@ +package com.lframework.starter.web.inner.bo.system.tenant; + +import com.lframework.starter.web.core.annotations.constants.EncryType; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.core.annotations.convert.EncryptConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class GetTenantBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * JdbcUrl + */ + @ApiModelProperty("JdbcUrl") + @EncryptConvert + private String jdbcUrl; + + /** + * Jdbc用户名 + */ + @ApiModelProperty("Jdbc用户名") + @EncryptConvert + private String jdbcUsername; + + /** + * Jdbc密码 + */ + @ApiModelProperty("Jdbc密码") + @EncryptConvert(type = EncryType.PASSWORD) + private String jdbcPassword; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public GetTenantBo(Tenant dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/QueryTenantBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/QueryTenantBo.java new file mode 100644 index 0000000..6e3b061 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/QueryTenantBo.java @@ -0,0 +1,55 @@ +package com.lframework.starter.web.inner.bo.system.tenant; + +import com.lframework.starter.web.core.annotations.constants.EncryType; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.core.annotations.convert.EncryptConvert; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryTenantBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * JdbcUrl + */ + @ApiModelProperty("JdbcUrl") + @EncryptConvert + private String jdbcUrl; + + /** + * Jdbc用户名 + */ + @ApiModelProperty("Jdbc用户名") + @EncryptConvert + private String jdbcUsername; + + /** + * Jdbc密码 + */ + @ApiModelProperty("Jdbc密码") + @EncryptConvert(type = EncryType.PASSWORD) + private String jdbcPassword; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public QueryTenantBo(Tenant dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/TenantSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/TenantSelectorBo.java new file mode 100644 index 0000000..832828d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/tenant/TenantSelectorBo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.bo.system.tenant; + +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class TenantSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public TenantSelectorBo() { + + } + + public TenantSelectorBo(Tenant dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/GetSysUserBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/GetSysUserBo.java new file mode 100644 index 0000000..c9fb5e0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/GetSysUserBo.java @@ -0,0 +1,148 @@ +package com.lframework.starter.web.inner.bo.system.user; + +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.inner.service.system.SysDeptService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import lombok.Data; + +@Data +public class GetSysUserBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 用户名 + */ + @ApiModelProperty("用户名") + private String username; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + private String email; + + /** + * 联系电话 + */ + @ApiModelProperty("联系电话") + private String telephone; + + /** + * 性别 + */ + @ApiModelProperty("性别") + private Integer gender; + + /** + * 部门 + */ + @ApiModelProperty("部门") + private List depts; + + /** + * 部门名称 + */ + @ApiModelProperty("部门名称") + private String deptName; + + + /** + * 角色 + */ + @ApiModelProperty("角色") + private List roles; + + /** + * 角色名称 + */ + @ApiModelProperty("角色名称") + private String roleName; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 是否锁定 + */ + @ApiModelProperty("是否锁定") + private Boolean lockStatus; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + public GetSysUserBo() { + + } + + public GetSysUserBo(SysUser dto) { + + super(dto); + } + + @Override + protected void afterInit(SysUser dto) { + SysUserDeptService sysUserDeptService = ApplicationUtil.getBean(SysUserDeptService.class); + List userDepts = sysUserDeptService.getByUserId(dto.getId()); + if (!CollectionUtil.isEmpty(userDepts)) { + SysDeptService sysDeptService = ApplicationUtil.getBean(SysDeptService.class); + this.depts = userDepts.stream().map(SysUserDept::getDeptId) + .collect(Collectors.toList()); + + this.deptName = StringUtil.join(StringPool.STR_SPLIT_CN, + userDepts.stream().map(t -> sysDeptService.findById(t.getDeptId())) + .filter(Objects::nonNull).map(SysDept::getName) + .collect(Collectors.toList())); + } + + SysUserRoleService sysUserRoleService = ApplicationUtil.getBean(SysUserRoleService.class); + List userRoles = sysUserRoleService.getByUserId(dto.getId()); + if (!CollectionUtil.isEmpty(userRoles)) { + SysRoleService sysRoleService = ApplicationUtil.getBean(SysRoleService.class); + this.roles = userRoles.stream().map(SysUserRole::getRoleId) + .collect(Collectors.toList()); + + this.roleName = StringUtil.join(StringPool.STR_SPLIT_CN, + userRoles.stream().map(t -> sysRoleService.findById(t.getRoleId())) + .filter(Objects::nonNull).map(SysRole::getName) + .collect(Collectors.toList())); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QuerySysUserBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QuerySysUserBo.java new file mode 100644 index 0000000..7d40a72 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QuerySysUserBo.java @@ -0,0 +1,162 @@ +package com.lframework.starter.web.inner.bo.system.user; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.inner.service.system.SysDeptService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import lombok.Data; + +@Data +public class QuerySysUserBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 部门名称 + */ + @ApiModelProperty("部门名称") + private String deptName; + + /** + * 角色名称 + */ + @ApiModelProperty("角色名称") + private String roleName; + + /** + * 用户名 + */ + @ApiModelProperty("用户名") + private String username; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + private String email; + + /** + * 联系电话 + */ + @ApiModelProperty("联系电话") + private String telephone; + + /** + * 性别 + */ + @ApiModelProperty("性别") + private Integer gender; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 是否锁定 + */ + @ApiModelProperty("是否锁定") + private Boolean lockStatus; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 修改人 + */ + @ApiModelProperty("修改人") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty("修改时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime updateTime; + + public QuerySysUserBo() { + + } + + public QuerySysUserBo(SysUser dto) { + + super(dto); + } + + @Override + protected void afterInit(SysUser dto) { + SysUserDeptService sysUserDeptService = ApplicationUtil.getBean(SysUserDeptService.class); + List userDepts = sysUserDeptService.getByUserId(dto.getId()); + if (!CollectionUtil.isEmpty(userDepts)) { + SysDeptService sysDeptService = ApplicationUtil.getBean(SysDeptService.class); + List deptNames = new ArrayList<>(userDepts.size()); + for (SysUserDept userDept : userDepts) { + SysDept dept = sysDeptService.findById(userDept.getDeptId()); + deptNames.add(dept.getName()); + } + + this.deptName = StringUtil.join(StringPool.STR_SPLIT_CN, deptNames); + } + + SysUserRoleService sysUserRoleService = ApplicationUtil.getBean(SysUserRoleService.class); + List userRoles = sysUserRoleService.getByUserId(dto.getId()); + if (!CollectionUtil.isEmpty(userRoles)) { + SysRoleService sysRoleService = ApplicationUtil.getBean(SysRoleService.class); + List roleNames = new ArrayList<>(userRoles.size()); + for (SysUserRole userRole : userRoles) { + SysRole role = sysRoleService.findById(userRole.getRoleId()); + roleNames.add(role.getName()); + } + + this.roleName = StringUtil.join(StringPool.STR_SPLIT_CN, roleNames); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QueryUserRoleBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QueryUserRoleBo.java new file mode 100644 index 0000000..b5f09fc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/QueryUserRoleBo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.inner.bo.system.user; + +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QueryUserRoleBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 是否选中 + */ + @ApiModelProperty("是否选中") + private Boolean selected = Boolean.FALSE; + + public QueryUserRoleBo() { + + } + + public QueryUserRoleBo(SysRole dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/SysUserSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/SysUserSelectorBo.java new file mode 100644 index 0000000..d0b888c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/SysUserSelectorBo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.bo.system.user; + +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.core.bo.BaseBo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysUserSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public SysUserSelectorBo() { + + } + + public SysUserSelectorBo(SysUser dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/GetSysUserGroupBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/GetSysUserGroupBo.java new file mode 100644 index 0000000..c939dda --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/GetSysUserGroupBo.java @@ -0,0 +1,73 @@ +package com.lframework.starter.web.inner.bo.system.user.group; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import com.lframework.starter.web.inner.service.system.SysUserGroupDetailService; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +/** + *

+ * 用户组 GetBo + *

+ * + * @author zmj + */ +@Data +public class GetSysUserGroupBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 用户ID + */ + @ApiModelProperty("用户ID") + private List userIds; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public GetSysUserGroupBo() { + + } + + public GetSysUserGroupBo(SysUserGroup dto) { + + super(dto); + } + + @Override + protected void afterInit(SysUserGroup dto) { + + SysUserGroupDetailService sysUserGroupDetailService = ApplicationUtil.getBean( + SysUserGroupDetailService.class); + this.userIds = sysUserGroupDetailService.getUserIdsByGroupId(dto.getId()); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/QuerySysUserGroupBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/QuerySysUserGroupBo.java new file mode 100644 index 0000000..1802d3e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/QuerySysUserGroupBo.java @@ -0,0 +1,72 @@ +package com.lframework.starter.web.inner.bo.system.user.group; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 用户组 QueryBo + *

+ * + * @author zmj + */ +@Data +public class QuerySysUserGroupBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + private LocalDateTime createTime; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public QuerySysUserGroupBo() { + + } + + public QuerySysUserGroupBo(SysUserGroup dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/SysUserGroupSelectorBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/SysUserGroupSelectorBo.java new file mode 100644 index 0000000..4ddec55 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/system/user/group/SysUserGroupSelectorBo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.bo.system.user.group; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysUserGroupSelectorBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + public SysUserGroupSelectorBo() { + + } + + public SysUserGroupSelectorBo(SysUserGroup dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/bo/usercenter/UserInfoBo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/usercenter/UserInfoBo.java new file mode 100644 index 0000000..ce8624c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/bo/usercenter/UserInfoBo.java @@ -0,0 +1,61 @@ +package com.lframework.starter.web.inner.bo.usercenter; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.inner.dto.system.UserInfoDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserInfoBo extends BaseBo { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 登录名 + */ + @ApiModelProperty("登录名") + private String username; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + private String email; + + /** + * 联系电话 + */ + @ApiModelProperty("联系电话") + private String telephone; + + /** + * 性别 + */ + @ApiModelProperty("性别") + private Integer gender; + + public UserInfoBo() { + + } + + public UserInfoBo(UserInfoDto dto) { + + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/AuthOpLogType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/AuthOpLogType.java new file mode 100644 index 0000000..612064b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/AuthOpLogType.java @@ -0,0 +1,12 @@ +package com.lframework.starter.web.inner.components.oplog; + + +import com.lframework.starter.web.core.components.oplog.OpLogType; + +public class AuthOpLogType implements OpLogType { + + @Override + public Integer getCode() { + return 1; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/OtherOpLogType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/OtherOpLogType.java new file mode 100644 index 0000000..9a9412a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/OtherOpLogType.java @@ -0,0 +1,12 @@ +package com.lframework.starter.web.inner.components.oplog; + + +import com.lframework.starter.web.core.components.oplog.OpLogType; + +public class OtherOpLogType implements OpLogType { + + @Override + public Integer getCode() { + return 99; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/SystemOpLogType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/SystemOpLogType.java new file mode 100644 index 0000000..3b9ff10 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/oplog/SystemOpLogType.java @@ -0,0 +1,12 @@ +package com.lframework.starter.web.inner.components.oplog; + + +import com.lframework.starter.web.core.components.oplog.OpLogType; + +public class SystemOpLogType implements OpLogType { + + @Override + public Integer getCode() { + return 2; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/OrderDataPermissionDataPermissionType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/OrderDataPermissionDataPermissionType.java new file mode 100644 index 0000000..173363a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/OrderDataPermissionDataPermissionType.java @@ -0,0 +1,14 @@ +package com.lframework.starter.web.inner.components.permission; + +import com.lframework.starter.web.core.components.permission.SysDataPermissionDataPermissionType; + +/** + * 单据数据权限 + */ +public final class OrderDataPermissionDataPermissionType implements SysDataPermissionDataPermissionType { + + @Override + public Integer getCode() { + return 2; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/ProductDataPermissionDataPermissionType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/ProductDataPermissionDataPermissionType.java new file mode 100644 index 0000000..9b57abe --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/permission/ProductDataPermissionDataPermissionType.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.inner.components.permission; + +import com.lframework.starter.web.core.components.permission.SysDataPermissionDataPermissionType; + +/** + * 商品数据权限 + */ +public final class ProductDataPermissionDataPermissionType implements + SysDataPermissionDataPermissionType { + + @Override + public Integer getCode() { + return 1; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApprovePassOrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApprovePassOrderTimeLineBizType.java new file mode 100644 index 0000000..08bbfa8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApprovePassOrderTimeLineBizType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.inner.components.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; + +public class ApprovePassOrderTimeLineBizType implements OrderTimeLineBizType { + + @Override + public Integer getCode() { + return 4; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApproveReturnOrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApproveReturnOrderTimeLineBizType.java new file mode 100644 index 0000000..3e51179 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/ApproveReturnOrderTimeLineBizType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.inner.components.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; + +public class ApproveReturnOrderTimeLineBizType implements OrderTimeLineBizType { + + @Override + public Integer getCode() { + return 5; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CancelApproveOrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CancelApproveOrderTimeLineBizType.java new file mode 100644 index 0000000..e1b6d91 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CancelApproveOrderTimeLineBizType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.inner.components.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; + +public class CancelApproveOrderTimeLineBizType implements OrderTimeLineBizType { + + @Override + public Integer getCode() { + return 6; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CreateOrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CreateOrderTimeLineBizType.java new file mode 100644 index 0000000..17d7693 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/CreateOrderTimeLineBizType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.inner.components.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; + +public class CreateOrderTimeLineBizType implements OrderTimeLineBizType { + + @Override + public Integer getCode() { + return 1; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/NormalOrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/NormalOrderTimeLineBizType.java new file mode 100644 index 0000000..1d14bac --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/NormalOrderTimeLineBizType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.inner.components.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; + +public class NormalOrderTimeLineBizType implements OrderTimeLineBizType { + + @Override + public Integer getCode() { + return 0; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/SendOrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/SendOrderTimeLineBizType.java new file mode 100644 index 0000000..9a3a3a4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/SendOrderTimeLineBizType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.inner.components.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; + +public class SendOrderTimeLineBizType implements OrderTimeLineBizType { + + @Override + public Integer getCode() { + return 3; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/UpdateOrderTimeLineBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/UpdateOrderTimeLineBizType.java new file mode 100644 index 0000000..5feb42d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/components/timeline/UpdateOrderTimeLineBizType.java @@ -0,0 +1,11 @@ +package com.lframework.starter.web.inner.components.timeline; + +import com.lframework.starter.web.core.components.timeline.OrderTimeLineBizType; + +public class UpdateOrderTimeLineBizType implements OrderTimeLineBizType { + + @Override + public Integer getCode() { + return 2; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/AuthController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/AuthController.java new file mode 100644 index 0000000..76683e5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/AuthController.java @@ -0,0 +1,626 @@ +package com.lframework.starter.web.inner.controller; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.codec.Base64; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.code.kaptcha.Producer; +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.exceptions.impl.UserLoginException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.common.utils.RegUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.config.properties.KaptchaProperties; +import com.lframework.starter.web.core.annotations.openapi.OpenApi; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.components.captcha.CaptchaValidator; +import com.lframework.starter.web.core.components.permission.SysDataPermissionDataPermissionType; +import com.lframework.starter.web.core.components.redis.RedisHandler; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.UserTokenResolver; +import com.lframework.starter.web.core.components.security.PasswordEncoderWrapper; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.security.UserDetailsService; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.dto.GenerateCaptchaDto; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.inner.bo.auth.CollectMenuBo; +import com.lframework.starter.web.inner.bo.auth.LoginBo; +import com.lframework.starter.web.inner.bo.auth.MenuBo; +import com.lframework.starter.web.inner.bo.auth.MenuBo.MetaBo; +import com.lframework.starter.web.inner.components.oplog.AuthOpLogType; +import com.lframework.starter.web.inner.dto.system.LoginDto; +import com.lframework.starter.web.inner.dto.system.MenuDto; +import com.lframework.starter.web.inner.entity.SysDataPermissionData; +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionDataBizType; +import com.lframework.starter.web.inner.enums.system.SysMenuComponentType; +import com.lframework.starter.web.inner.enums.system.SysMenuDisplay; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.inner.service.SysModuleTenantService; +import com.lframework.starter.web.inner.service.TenantService; +import com.lframework.starter.web.inner.service.system.SysDataPermissionDataService; +import com.lframework.starter.web.inner.service.system.SysDataPermissionModelDetailService; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.system.permission.SysDataPermissionModelDetailVo; +import com.lframework.starter.web.inner.vo.system.user.GetLoginCaptchaRequieVo; +import com.lframework.starter.web.inner.vo.system.user.LoginVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import javax.imageio.ImageIO; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 默认用户认证Controller + * + * @author zmj + */ +@Api(tags = "用户认证") +@Slf4j +@Validated +@RestController +public class AuthController extends DefaultBaseController { + + @Autowired + private Producer producer; + + @Autowired + private KaptchaProperties kaptchaProperties; + + @Autowired + private RedisHandler redisHandler; + + @Autowired + private CaptchaValidator captchaValidator; + + @Autowired + private PasswordEncoderWrapper passwordEncoderWrapper; + + @Autowired + private SysMenuService sysMenuService; + + @Autowired + private UserDetailsService userDetailsService; + + @Autowired + private SysUserService sysUserService; + + @Autowired + private UserTokenResolver userTokenResolver; + + @Autowired + private TenantService tenantService; + + @Autowired + private SysDataPermissionDataService sysDataPermissionDataService; + + @Autowired + private SysDataPermissionModelDetailService sysDataPermissionModelDetailService; + + @Autowired + private SysUserRoleService sysUserRoleService; + + @Autowired + private SysUserDeptService sysUserDeptService; + + @Autowired + private SysModuleTenantService sysModuleTenantService; + + @Autowired + private SysConfService sysConfService; + + /** + * 是否为多租户 + */ + @ApiOperation(value = "是否为多租户") + @OpenApi + @GetMapping("/auth/tenant/require") + public InvokeResult getTenantRequire() { + return InvokeResultBuilder.success(TenantUtil.enableTenant()); + } + + /** + * 是否需要登录验证码 + */ + @ApiOperation(value = "是否需要登录验证码") + @OpenApi + @PostMapping("/auth/captcha/require") + public InvokeResult getLoginCaptchaRequire(@Valid GetLoginCaptchaRequieVo vo) { + String username = vo.getUsername(); + String tenantId = null; + if (TenantUtil.enableTenant()) { + // 检查租户是否存在 + Wrapper queryTenantWrapper = Wrappers.lambdaQuery(Tenant.class) + .eq(Tenant::getName, vo.getTenantName()); + Tenant tenant = tenantService.getOne(queryTenantWrapper); + if (tenant == null) { + throw new DefaultClientException("用户名或密码错误!"); + } + + if (!tenant.getAvailable()) { + throw new DefaultClientException("用户已停用,无法登录!"); + } + + tenantId = tenant.getId().toString(); + + TenantContextHolder.setTenantId(tenant.getId()); + } + + String loginCaptchaEnabled = sysConfService.findByKey("login-captcha.enabled", "true"); + return InvokeResultBuilder.success(Boolean.valueOf(loginCaptchaEnabled)); + } + + /** + * 获取登录验证码 + */ + @ApiOperation(value = "获取登录验证码") + @OpenApi + @GetMapping("/auth/captcha") + public InvokeResult generateCaptcha() { + + String code = producer.createText(); + BufferedImage image = producer.createImage(code); + + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try { + ImageIO.write(image, "jpg", os); + } catch (IOException e) { + throw new DefaultClientException("验证码生成失败,请稍后重试!"); + } + + String sn = IdUtil.getUUID(); + //将验证码存至redis + redisHandler.set(StringUtil.format(StringPool.LOGIN_CAPTCHA_KEY, sn), code, + kaptchaProperties.getExpireTime() * 60 * 1000L); + + GenerateCaptchaDto resp = new GenerateCaptchaDto(); + resp.setSn(sn); + resp.setImage("data:image/jpeg;base64," + Base64.encode(os.toByteArray())); + + log.debug("获取验证码成功, SN={}, code={}", sn, code); + + return InvokeResultBuilder.success(resp); + } + + @ApiOperation("登录") + @OpenApi + @OpLog(type = AuthOpLogType.class, name = "用户登录") + @PostMapping("/auth/login") + public InvokeResult login(@Valid LoginVo vo) { + + String username = vo.getUsername(); + String password = vo.getPassword(); + String tenantId = null; + if (TenantUtil.enableTenant()) { + if (StringUtil.isBlank(vo.getTenantName())) { + throw new DefaultClientException("用户名或密码错误!"); + } + + username = vo.getUsername(); + + // 检查租户是否存在 + Wrapper queryTenantWrapper = Wrappers.lambdaQuery(Tenant.class) + .eq(Tenant::getName, vo.getTenantName()); + Tenant tenant = tenantService.getOne(queryTenantWrapper); + if (tenant == null) { + throw new DefaultClientException("用户名或密码错误!"); + } + + if (!tenant.getAvailable()) { + throw new DefaultClientException("用户已停用,无法登录!"); + } + + tenantId = tenant.getId().toString(); + + TenantContextHolder.setTenantId(tenant.getId()); + } + + log.info("用户 {} {} 开始登录", tenantId, username); + + String loginCaptchaEnabled = sysConfService.findByKey("login-captcha.enabled", "true"); + log.info("当前用户登录需要验证码 = {}", loginCaptchaEnabled); + if (Boolean.valueOf(loginCaptchaEnabled)) { + String sn = vo.getSn(); + String captcha = vo.getCaptcha(); + captchaValidator.validate(sn, captcha); + } + + this.checkUserLogin(tenantId == null ? null : Integer.valueOf(tenantId), username, password); + + AbstractUserDetails user = userDetailsService.loadUserByUsername(username); + + LoginDto dto = this.doLogin(user); + + this.addAttributesToSession(user); + + return InvokeResultBuilder.success(new LoginBo(dto)); + } + + @ApiOperation("退出登录") + @OpenApi + @OpLog(type = AuthOpLogType.class, name = "退出登录") + @PostMapping("/auth/logout") + public InvokeResult logout() { + + StpUtil.logout(); + + return InvokeResultBuilder.success(); + } + + @ApiOperation(value = "获取用户信息") + @GetMapping("/auth/info") + public InvokeResult info() { + + AbstractUserDetails user = getCurrentUser(); + LoginDto info = new LoginDto(null, user.getName(), user.getPermissions()); + + return InvokeResultBuilder.success(new LoginBo(info)); + } + + @ApiOperation("获取用户菜单") + @GetMapping("/auth/menus") + public InvokeResult> menus() { + + AbstractUserDetails user = getCurrentUser(); + // 先查询当前租户使用的module + List moduleIds = null; + if (TenantUtil.enableTenant()) { + moduleIds = sysModuleTenantService.getAvailableModuleIdsByTenantId( + TenantContextHolder.getTenantId()); + } + List menus = sysMenuService.getMenuByUserId(user.getId(), user.isAdmin(), moduleIds); + + // 组装成树形菜单 + List topMenus = menus.stream().filter(t -> StringUtil.isBlank(t.getParentId())) + .collect(Collectors.toList()); + + List results = new ArrayList<>(); + for (MenuDto topMenu : topMenus) { + MenuBo menuBo = new MenuBo(); + menuBo.setName(topMenu.getName()); + menuBo.setComponent("LAYOUT"); + menuBo.setChildren(parseChildrenMenu(topMenu, menus)); + menuBo.setPath(topMenu.getPath()); + + MenuBo.MetaBo meta = new MetaBo(); + meta.setId(topMenu.getId()); + meta.setTitle(topMenu.getMeta().getTitle()); + meta.setIcon(topMenu.getMeta().getIcon()); + meta.setHideMenu(topMenu.getHidden()); + meta.setIgnoreKeepAlive(topMenu.getMeta().getNoCache()); + meta.setIsCollect(topMenu.getIsCollect()); + + menuBo.setMeta(meta); + + results.add(menuBo); + } + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("验证当前登录人的登录密码") + @PostMapping("/auth/check/password") + public InvokeResult checkPassword( + @NotBlank(message = "登录密码不能为空!") String password) { + return InvokeResultBuilder.success(passwordEncoderWrapper.getEncoder() + .matches(password, SecurityUtil.getCurrentUser().getPassword())); + } + + private List parseChildrenMenu(MenuDto topMenu, List menus) { + List children = menus.stream() + .filter(t -> StringUtil.equals(t.getParentId(), topMenu.getId())).map(t -> { + MenuBo menuBo = new MenuBo(); + menuBo.setName(t.getName()); + menuBo.setChildren(parseChildrenMenu(t, menus)); + + menuBo.setComponent(t.getComponent()); + menuBo.setPath( + StringUtil.startWith(t.getPath(), "/") ? t.getPath().substring(1) : t.getPath()); + MenuBo.MetaBo meta = new MetaBo(); + meta.setId(t.getId()); + meta.setTitle(t.getMeta().getTitle()); + meta.setIcon(t.getMeta().getIcon()); + meta.setHideMenu(t.getHidden()); + meta.setIgnoreKeepAlive(t.getMeta().getNoCache()); + meta.setIsCollect(t.getIsCollect()); + if (RegUtil.isMatch(PatternPool.PATTERN_HTTP_URL, menuBo.getPath())) { + meta.setIsLink(Boolean.TRUE); + } + + // 如果是功能 + if (SysMenuDisplay.FUNCTION.getCode().equals(t.getDisplay())) { + // 普通 + if (SysMenuComponentType.NORMAL.getCode().equals(t.getComponentType())) { + if ("/iframes/index".equalsIgnoreCase(t.getComponent())) { + menuBo.setComponent(null); + meta.setFrameSrc(menuBo.getPath().substring(menuBo.getPath().indexOf("?src=") + 5)); + menuBo.setPath(menuBo.getPath().substring(0, menuBo.getPath().indexOf("?src="))); + } + } else if (SysMenuComponentType.CUSTOM_LIST.getCode().equals(t.getComponentType())) { + // 自定义列表 + menuBo.setComponent("CUSTOMLIST"); + meta.setCustomListId(t.getComponent()); + } else if (SysMenuComponentType.CUSTOM_PAGE.getCode().equals(t.getComponentType())) { + // 自定义页面 + menuBo.setComponent("CUSTOMPAGE"); + meta.setCustomPageId(t.getComponent()); + } + } + + menuBo.setMeta(meta); + + return menuBo; + }).collect(Collectors.toList()); + + return children; + } + + @ApiOperation("收藏菜单") + @ApiImplicitParam(value = "菜单ID", name = "menuId", paramType = "query") + @PostMapping("/menu/collect") + public InvokeResult collectMenu(String menuId) { + + AbstractUserDetails user = getCurrentUser(); + sysMenuService.collect(user.getId(), menuId); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("获取已收藏的菜单") + @GetMapping("/menu/collect") + public InvokeResult> getCollectMenus() { + AbstractUserDetails user = getCurrentUser(); + // 先查询当前租户使用的module + List moduleIds = null; + if (TenantUtil.enableTenant()) { + moduleIds = sysModuleTenantService.getAvailableModuleIdsByTenantId( + TenantContextHolder.getTenantId()); + } + List menus = sysMenuService.getMenuByUserId(user.getId(), user.isAdmin(), moduleIds); + + List collectMenus = menus.stream().filter(t -> t.getIsCollect()) + .collect(Collectors.toList()); + List results = collectMenus.stream().map(t -> { + CollectMenuBo result = new CollectMenuBo(); + result.setId(t.getId()); + result.setTitle(t.getMeta().getTitle()); + result.setIcon(t.getMeta().getIcon()); + if (StringUtil.isBlank(result.getIcon())) { + // 如果没有图标 那么就往上级找 + String icon = null; + String parentId = t.getParentId(); + while (StringUtil.isNotEmpty(parentId)) { + MenuDto parentMenu = null; + for (MenuDto m : menus) { + if (m.getId().equals(parentId)) { + parentMenu = m; + } + } + + if (parentMenu == null) { + break; + } + + if (StringUtil.isNotBlank(parentMenu.getMeta().getIcon())) { + icon = parentMenu.getMeta().getIcon(); + break; + } + + parentId = parentMenu.getParentId(); + } + result.setIcon(icon); + } + + List pathList = new ArrayList<>(); + pathList.add(t.getPath()); + String parentId = t.getParentId(); + while (StringUtil.isNotEmpty(parentId)) { + MenuDto parentMenu = null; + for (MenuDto m : menus) { + if (m.getId().equals(parentId)) { + parentMenu = m; + } + } + + if (parentMenu == null) { + break; + } + + if (StringUtil.isNotBlank(parentMenu.getPath())) { + pathList.add(parentMenu.getPath()); + } + + parentId = parentMenu.getParentId(); + } + + pathList = CollectionUtil.reverse(pathList); + result.setPath(CollectionUtil.join(pathList, "")); + + return result; + }).collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("取消收藏菜单") + @ApiImplicitParam(value = "菜单ID", name = "menuId", paramType = "query") + @PostMapping("/menu/collect/cancel") + public InvokeResult cancelCollectMenu(String menuId) { + + AbstractUserDetails user = getCurrentUser(); + sysMenuService.cancelCollect(user.getId(), menuId); + + return InvokeResultBuilder.success(); + } + + private LoginDto doLogin(AbstractUserDetails user) { + + if (!user.isAccountNonExpired()) { + throw new UserLoginException("账户已过期,不允许登录!"); + } + + if (!user.isAccountNonLocked()) { + throw new UserLoginException("账户已过期,不允许登录!"); + } + + if (!user.isAccountNonLocked()) { + throw new UserLoginException("账户已锁定,不允许登录!"); + } + + if (!user.isEnabled()) { + throw new UserLoginException("账户已停用,不允许登录!"); + } + + if (user.isNoPermission()) { + throw new UserLoginException("账户未授权,不允许登录!"); + } + // 登录 + // loginId需要唯一 + String loginId = + (user.getTenantId() == null ? "" : user.getTenantId() + "@") + user.getUsername() + "@" + + IdUtil.getUUID(); + + StpUtil.login(loginId); + + user.setLoginId(loginId); + + StpUtil.getSession().set(SecurityConstants.USER_INFO_KEY, user); + + String token = userTokenResolver.getToken(); + + return new LoginDto(token, user.getName(), user.getPermissions()); + } + + private void checkUserLogin(Integer tenantId, String username, String password) { + AbstractUserDetails user = userDetailsService.loadUserByUsername(username); + String lockKey = + (tenantId == null ? "noTenant" : tenantId) + "_" + username + "_" + DateUtil.formatDate( + LocalDate.now()) + "_LOGIN_LOCK"; + if (!passwordEncoderWrapper.getEncoder().matches(password, user.getPassword())) { + long loginErrorNum = redisHandler.incr(lockKey, 1); + redisHandler.expire(lockKey, 86400000L); + int failNum = 5; + if (loginErrorNum < failNum) { + throw new UserLoginException( + "您已经登录失败" + loginErrorNum + "次,您还可以尝试" + (failNum - loginErrorNum) + + "次!"); + } else { + sysUserService.lockById(user.getId()); + + sysUserService.cleanCacheByKey(user.getId()); + + redisHandler.expire(lockKey, 1L); + // 锁定用户 + throw new UserLoginException("用户已锁定,无法登录!"); + } + } else { + redisHandler.expire(lockKey, 1L); + } + } + + protected void addAttributesToSession(AbstractUserDetails user) { + Map dataPermissionMap = new HashMap<>(); + Map beans = ApplicationUtil.getBeansOfType(SysDataPermissionDataPermissionType.class); + Collection permissionTypes = beans.values(); + for (SysDataPermissionDataPermissionType permissionType : permissionTypes) { + List sqlTemplates = new ArrayList<>(); + + List userRoles = sysUserRoleService.getByUserId(user.getId()); + if (CollectionUtil.isNotEmpty(userRoles)) { + for (SysUserRole userRole : userRoles) { + SysDataPermissionData permissionData = sysDataPermissionDataService.getByBizId( + userRole.getRoleId(), + SysDataPermissionDataBizType.ROLE.getCode(), permissionType.getCode()); + if (permissionData != null) { + String sqlTemplate = sysDataPermissionModelDetailService.toSql( + JsonUtil.parseList(permissionData.getPermission(), + SysDataPermissionModelDetailVo.class)); + if (StringUtil.isNotBlank(sqlTemplate)) { + sqlTemplates.add(sqlTemplate); + } + } + } + } + + List userDepts = sysUserDeptService.getByUserId(user.getId()); + if (CollectionUtil.isNotEmpty(userDepts)) { + for (SysUserDept userDept : userDepts) { + SysDataPermissionData permissionData = sysDataPermissionDataService.getByBizId( + userDept.getDeptId(), + SysDataPermissionDataBizType.DEPT.getCode(), permissionType.getCode()); + if (permissionData != null) { + String sqlTemplate = sysDataPermissionModelDetailService.toSql( + JsonUtil.parseList(permissionData.getPermission(), + SysDataPermissionModelDetailVo.class)); + if (StringUtil.isNotBlank(sqlTemplate)) { + sqlTemplates.add(sqlTemplate); + } + } + } + } + + SysDataPermissionData permissionData = sysDataPermissionDataService.getByBizId( + user.getId(), + SysDataPermissionDataBizType.USER.getCode(), permissionType.getCode()); + if (permissionData != null) { + String sqlTemplate = sysDataPermissionModelDetailService.toSql( + JsonUtil.parseList(permissionData.getPermission(), + SysDataPermissionModelDetailVo.class)); + if (StringUtil.isNotBlank(sqlTemplate)) { + sqlTemplates.add(sqlTemplate); + } + } + + if (CollectionUtil.isNotEmpty(sqlTemplates)) { + dataPermissionMap.put(permissionType.getCode().toString(), + "(" + CollectionUtil.join(sqlTemplates, " AND ") + ")"); + } + } + + StpUtil.getSession().set(SecurityConstants.DATA_PERMISSION_SQL_MAP, dataPermissionMap); + + Map dataPermissionVar = new HashMap<>(); + List userDepts = sysUserDeptService.getByUserId(user.getId()); + List curDeptIds = userDepts.stream().map(SysUserDept::getDeptId) + .map(t -> "'" + t + "'").collect( + Collectors.toList()); + dataPermissionVar.put("curDeptIds", + CollectionUtil.isEmpty(curDeptIds) ? IdUtil.getId() : CollectionUtil.join(curDeptIds, ",")); + + StpUtil.getSession().set(SecurityConstants.DATA_PERMISSION_SQL_VAR, dataPermissionVar); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/QrtzController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/QrtzController.java new file mode 100644 index 0000000..ddbf4c6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/QrtzController.java @@ -0,0 +1,170 @@ +package com.lframework.starter.web.inner.controller; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.qrtz.GetQrtzBo; +import com.lframework.starter.web.inner.bo.qrtz.QueryQrtzBo; +import com.lframework.starter.web.inner.service.QrtzService; +import com.lframework.starter.web.inner.vo.qrtz.CreateQrtzVo; +import com.lframework.starter.web.inner.vo.qrtz.QueryQrtzVo; +import com.lframework.starter.web.inner.vo.qrtz.UpdateQrtzVo; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.inner.dto.qrtz.QrtzDto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "定时器管理") +@RestController +@RequestMapping("/qrtz") +public class QrtzController extends DefaultBaseController { + + @Autowired + private QrtzService qrtzService; + + /** + * 查询列表 + * + * @param vo + * @return + */ + @ApiOperation("查询列表") + @HasPermission({"development:qrtz:manage"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QueryQrtzVo vo) { + + PageResult pageResult = qrtzService.query(getPageIndex(vo), getPageSize(vo), vo); + List datas = pageResult.getDatas(); + + List results = null; + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryQrtzBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 查询 + * + * @return + */ + @ApiOperation("查询") + @HasPermission({"development:qrtz:manage"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "名称不能为空!") String name, + @NotBlank(message = "组不能为空!") String group) { + QrtzDto data = qrtzService.findById(name, group); + if (data == null) { + throw new DefaultClientException("任务不存在!"); + } + + return InvokeResultBuilder.success(new GetQrtzBo(data)); + } + + /** + * 创建 + * + * @param vo + * @return + */ + @ApiOperation("创建") + @HasPermission({"development:qrtz:manage"}) + @PostMapping + public InvokeResult create(@Valid @RequestBody CreateQrtzVo vo) { + qrtzService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改 + * + * @param vo + * @return + */ + @ApiOperation("修改") + @HasPermission({"development:qrtz:manage"}) + @PutMapping + public InvokeResult update(@Valid @RequestBody UpdateQrtzVo vo) { + qrtzService.update(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 暂停 + * + * @return + */ + @ApiOperation("暂停") + @HasPermission({"development:qrtz:manage"}) + @PutMapping("/pause") + public InvokeResult pause(@NotBlank(message = "名称不能为空!") String name, + @NotBlank(message = "组不能为空!") String group) { + qrtzService.pause(name, group); + + return InvokeResultBuilder.success(); + } + + /** + * 恢复 + * + * @return + */ + @ApiOperation("恢复") + @HasPermission({"development:qrtz:manage"}) + @PutMapping("/resume") + public InvokeResult resume(@NotBlank(message = "名称不能为空!") String name, + @NotBlank(message = "组不能为空!") String group) { + qrtzService.resume(name, group); + + return InvokeResultBuilder.success(); + } + + /** + * 触发 + * + * @return + */ + @ApiOperation("触发") + @HasPermission({"development:qrtz:manage"}) + @PutMapping("/trigger") + public InvokeResult trigger(@NotBlank(message = "名称不能为空!") String name, + @NotBlank(message = "组不能为空!") String group) { + qrtzService.trigger(name, group); + + return InvokeResultBuilder.success(); + } + + /** + * 删除 + * + * @return + */ + @ApiOperation("删除") + @HasPermission({"development:qrtz:manage"}) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "名称不能为空!") String name, + @NotBlank(message = "组不能为空!") String group) { + qrtzService.delete(name, group); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/UserCenterController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/UserCenterController.java new file mode 100644 index 0000000..eff2b66 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/UserCenterController.java @@ -0,0 +1,186 @@ +package com.lframework.starter.web.inner.controller; + +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.RegUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.PasswordEncoderWrapper; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.oplog.OpLogInUserCenterBo; +import com.lframework.starter.web.inner.bo.usercenter.UserInfoBo; +import com.lframework.starter.web.inner.components.oplog.AuthOpLogType; +import com.lframework.starter.web.inner.dto.system.UserInfoDto; +import com.lframework.starter.web.inner.entity.OpLogs; +import com.lframework.starter.web.inner.service.OpLogsService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.oplogs.QueryOpLogsVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 用户中心 + * + * @author zmj + */ +@Api(tags = "个人中心") +@Validated +@RestController +@RequestMapping("/center") +public class UserCenterController extends DefaultBaseController { + + @Autowired + private SysUserService sysUserService; + + @Autowired + private OpLogsService opLogsService; + + @Autowired + private PasswordEncoderWrapper encoderWrapper; + + /** + * 获取用户信息 + */ + @ApiOperation(value = "获取用户信息") + @GetMapping("/info") + public InvokeResult getInfo() { + + String userId = getCurrentUser().getId(); + UserInfoDto info = sysUserService.getInfo(userId); + + return InvokeResultBuilder.success(new UserInfoBo(info)); + } + + /** + * 修改密码 + */ + @ApiOperation("修改密码") + @ApiImplicitParams({ + @ApiImplicitParam(value = "旧密码", name = "oldPsw", paramType = "query", required = true), + @ApiImplicitParam(value = "新密码", name = "newPsw", paramType = "query", required = true), + @ApiImplicitParam(value = "确认密码", name = "confirmPsw", paramType = "query", required = true)}) + @OpLog(type = AuthOpLogType.class, name = "修改密码,原密码:{},新密码:{}", params = {"#oldPsw", "#newPsw"}) + @PatchMapping("/password") + public InvokeResult updatePassword(@NotBlank(message = "旧密码不能为空!") String oldPsw, + @NotBlank(message = "新密码不能为空!") String newPsw, + @NotBlank(message = "确认密码不能为空!") String confirmPsw) { + + AbstractUserDetails user = getCurrentUser(); + if (!encoderWrapper.getEncoder().matches(oldPsw, user.getPassword())) { + throw new InputErrorException("旧密码不正确,请重新输入!"); + } + + if (!StringUtil.equals(newPsw, confirmPsw)) { + throw new InputErrorException("两次密码输入不一致,请检查!"); + } + + if (!RegUtil.isMatch(PatternPool.PATTERN_PASSWORD, newPsw)) { + throw new InputErrorException("密码格式不正确,请检查!"); + } + + sysUserService.updatePassword(user.getId(), newPsw); + + //修改密码后,退出登录状态 + SecurityUtil.logout(); + + return InvokeResultBuilder.success(); + } + + /** + * 修改邮箱 + */ + @ApiOperation("修改邮箱") + @ApiImplicitParams({ + @ApiImplicitParam(value = "新邮箱地址", name = "newEmail", paramType = "query", required = true), + @ApiImplicitParam(value = "确认邮箱地址", name = "confirmEmail", paramType = "query", required = true)}) + @OpLog(type = AuthOpLogType.class, name = "修改邮箱,新邮箱:{}", params = "#newEmail") + @PatchMapping("/email") + public InvokeResult updateEmail(@NotBlank(message = "新邮箱地址不能为空!") String newEmail, + @NotBlank(message = "确认邮箱地址不能为空!") String confirmEmail) { + + AbstractUserDetails user = getCurrentUser(); + + if (!StringUtil.equals(newEmail, confirmEmail)) { + throw new InputErrorException("两次邮箱地址输入不一致,请检查!"); + } + + if (!RegUtil.isMatch(PatternPool.EMAIL, newEmail)) { + throw new InputErrorException("邮箱地址格式不正确,请检查!"); + } + + sysUserService.updateEmail(user.getId(), newEmail); + + sysUserService.cleanCacheByKey(user.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 修改联系电话 + */ + @ApiOperation("修改联系电话") + @ApiImplicitParams({ + @ApiImplicitParam(value = "新联系电话", name = "newTelephone", paramType = "query", required = true), + @ApiImplicitParam(value = "确认联系电话", name = "confirmTelephone", paramType = "query", required = true)}) + @OpLog(type = AuthOpLogType.class, name = "修改联系电话,新联系电话:{}", params = "#newTelephone") + @PatchMapping("/telephone") + public InvokeResult updateTelephone(@NotBlank(message = "新联系电话不能为空!") String newTelephone, + @NotBlank(message = "确认联系电话不能为空!") String confirmTelephone) { + + AbstractUserDetails user = getCurrentUser(); + + if (!StringUtil.equals(newTelephone, confirmTelephone)) { + throw new InputErrorException("两次联系电话输入不一致,请检查!"); + } + + if (!RegUtil.isMatch(PatternPool.PATTERN_CN_TEL, newTelephone)) { + throw new InputErrorException("联系电话格式不正确,请检查!"); + } + + sysUserService.updateTelephone(user.getId(), newTelephone); + + sysUserService.cleanCacheByKey(user.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 查询操作日志 + */ + @ApiOperation("查询操作日志") + @GetMapping("/oplog") + public InvokeResult> oplog(@Valid QueryOpLogsVo vo) { + + vo.setCreateBy(SecurityUtil.getCurrentUser().getId()); + + PageResult pageResult = opLogsService.query(getPageIndex(vo), getPageSize(vo), + vo); + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(OpLogInUserCenterBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java new file mode 100644 index 0000000..06906c5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java @@ -0,0 +1,482 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.inner.bo.system.dept.SysDeptSelectorBo; +import com.lframework.starter.web.inner.bo.system.dic.SysDataDicSelectorBo; +import com.lframework.starter.web.inner.bo.system.dic.category.SysDataDicCategorySelectorBo; +import com.lframework.starter.web.inner.bo.system.menu.SysMenuSelectorBo; +import com.lframework.starter.web.inner.bo.system.notify.SysNotifyGroupSelectorBo; +import com.lframework.starter.web.inner.bo.system.open.SysOpenDomainSelectorBo; +import com.lframework.starter.web.inner.bo.system.role.SysRoleSelectorBo; +import com.lframework.starter.web.inner.bo.system.role.category.SysRoleCategorySelectorBo; +import com.lframework.starter.web.inner.bo.system.tenant.TenantSelectorBo; +import com.lframework.starter.web.inner.bo.system.user.SysUserSelectorBo; +import com.lframework.starter.web.inner.bo.system.user.group.SysUserGroupSelectorBo; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.inner.service.SysModuleTenantService; +import com.lframework.starter.web.inner.service.TenantService; +import com.lframework.starter.web.inner.service.system.SysDataDicCategoryService; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.inner.service.system.SysDeptService; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.inner.service.system.SysNotifyGroupService; +import com.lframework.starter.web.inner.service.system.SysOpenDomainService; +import com.lframework.starter.web.inner.service.system.SysRoleCategoryService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.service.system.SysUserGroupService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.system.dic.SysDataDicSelectorVo; +import com.lframework.starter.web.inner.vo.system.dic.category.SysDataDicCategorySelectorVo; +import com.lframework.starter.web.inner.vo.system.menu.SysMenuSelectorVo; +import com.lframework.starter.web.inner.vo.system.notify.SysNotifyGroupSelectorVo; +import com.lframework.starter.web.inner.vo.system.open.SysOpenDomainSelectorVo; +import com.lframework.starter.web.inner.vo.system.role.SysRoleSelectorVo; +import com.lframework.starter.web.inner.vo.system.role.category.SysRoleCategorySelectorVo; +import com.lframework.starter.web.inner.vo.system.tenant.TenantSelectorVo; +import com.lframework.starter.web.inner.vo.system.user.SysUserSelectorVo; +import com.lframework.starter.web.inner.vo.system.user.group.SysUserGroupSelectorVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据选择器 + * + * @author zmj + */ +@Api(tags = "数据选择器") +@Validated +@RestController +@RequestMapping("/selector") +public class DefaultSysSelectorController extends DefaultBaseController { + + @Autowired + private SysUserService sysUserService; + + @Autowired + private SysMenuService sysMenuService; + + @Autowired + private SysDeptService sysDeptService; + + @Autowired + private SysRoleService sysRoleService; + + @Autowired + private SysRoleCategoryService sysRoleCategoryService; + + @Autowired + private SysDataDicCategoryService sysDataDicCategoryService; + + @Autowired + private SysDataDicService sysDataDicService; + + @Autowired + private SysOpenDomainService sysOpenDomainService; + + @Autowired + private TenantService tenantService; + + @Autowired + private SysModuleTenantService sysModuleTenantService; + + @Autowired + private SysNotifyGroupService sysNotifyGroupService; + + @Autowired + private SysUserGroupService sysUserGroupService; + + /** + * 系统菜单 + */ + @ApiOperation("系统菜单") + @GetMapping("/menu") + public InvokeResult> menu(@Valid SysMenuSelectorVo vo) { + + // 先查询当前租户使用的module + List moduleIds = null; + if (TenantUtil.enableTenant()) { + moduleIds = sysModuleTenantService.getAvailableModuleIdsByTenantId( + TenantContextHolder.getTenantId()); + } + + List results = CollectionUtil.emptyList(); + List datas = sysMenuService.selector(vo, moduleIds); + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(SysMenuSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("部门") + @GetMapping("/dept") + public InvokeResult> dept() { + + List results = CollectionUtil.emptyList(); + List datas = sysDeptService.selector(); + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(SysDeptSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("角色") + @GetMapping("/role") + public InvokeResult> role(@Valid SysRoleSelectorVo vo) { + + PageResult pageResult = sysRoleService.selector(getPageIndex(vo), getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(SysRoleSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载角色 + */ + @ApiOperation("加载角色") + @PostMapping("/role/load") + public InvokeResult> loadRole( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> sysRoleService.findById(t)).filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream().map(SysRoleSelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("角色分类") + @GetMapping("/role/category") + public InvokeResult> roleCategory( + @Valid SysRoleCategorySelectorVo vo) { + + PageResult pageResult = sysRoleCategoryService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(SysRoleCategorySelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载角色分类 + */ + @ApiOperation("加载角色分类") + @PostMapping("/role/category/load") + public InvokeResult> loadRoleCategory( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> sysRoleCategoryService.findById(t)).filter(Objects::nonNull) + .collect(Collectors.toList()); + List results = datas.stream().map(SysRoleCategorySelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("租户") + @GetMapping("/tenant") + public InvokeResult> tenant(@Valid TenantSelectorVo vo) { + + PageResult pageResult = tenantService.selector(getPageIndex(vo), getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(TenantSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载租户 + */ + @ApiOperation("加载租户") + @PostMapping("/tenant/load") + public InvokeResult> loadTenant( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(Objects::nonNull).map(t -> tenantService.findById(t)) + .filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream().map(TenantSelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("用户") + @GetMapping("/user") + public InvokeResult> user(@Valid SysUserSelectorVo vo) { + + PageResult pageResult = sysUserService.selector(getPageIndex(vo), getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(SysUserSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载用户 + */ + @ApiOperation("加载用户") + @PostMapping("/user/load") + public InvokeResult> loadUser( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> sysUserService.findById(t)).filter(Objects::nonNull).collect(Collectors.toList()); + List results = datas.stream().map(SysUserSelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("数据字典分类") + @GetMapping("/dic/category") + public InvokeResult> dataDicCategory( + @Valid SysDataDicCategorySelectorVo vo) { + + PageResult pageResult = sysDataDicCategoryService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(SysDataDicCategorySelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载数据字典分类 + */ + @ApiOperation("加载数据字典分类") + @PostMapping("/dic/category/load") + public InvokeResult> loadDataDicCategory( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> sysDataDicCategoryService.findById(t)).filter(Objects::nonNull) + .collect(Collectors.toList()); + List results = datas.stream() + .map(SysDataDicCategorySelectorBo::new).collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("数据字典") + @GetMapping("/dic") + public InvokeResult> dataDic(@Valid SysDataDicSelectorVo vo) { + + PageResult pageResult = sysDataDicService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(SysDataDicSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载数据字典 + */ + @ApiOperation("加载数据字典") + @PostMapping("/dic/load") + public InvokeResult> loadDataDic( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> sysDataDicService.findById(t)).filter(Objects::nonNull) + .collect(Collectors.toList()); + List results = datas.stream().map(SysDataDicSelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + /** + * 开放域 + */ + @ApiOperation("开放域") + @GetMapping("/openDomain") + public InvokeResult> openDomain( + @Valid SysOpenDomainSelectorVo vo) { + + PageResult pageResult = sysOpenDomainService.selector(vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(SysOpenDomainSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载开放域 + */ + @ApiOperation("加载开放域") + @PostMapping("/openDomain/load") + public InvokeResult> openDomain( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(Objects::nonNull) + .map(t -> sysOpenDomainService.findById(t)).filter(Objects::nonNull) + .collect(Collectors.toList()); + List results = datas.stream().map(SysOpenDomainSelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("消息通知组") + @GetMapping("/notify/group") + public InvokeResult> notifyGroup( + @Valid SysNotifyGroupSelectorVo vo) { + + PageResult pageResult = sysNotifyGroupService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(SysNotifyGroupSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载消息通知组 + */ + @ApiOperation("加载消息通知组") + @PostMapping("/notify/group/load") + public InvokeResult> loadNotifyGroup( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> sysNotifyGroupService.findById(t)).filter(Objects::nonNull) + .collect(Collectors.toList()); + List results = datas.stream().map(SysNotifyGroupSelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("用户组") + @GetMapping("/user/group") + public InvokeResult> userGroup( + @Valid SysUserGroupSelectorVo vo) { + + PageResult pageResult = sysUserGroupService.selector(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = null; + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(SysUserGroupSelectorBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 加载用户组 + */ + @ApiOperation("加载用户组") + @PostMapping("/user/group/load") + public InvokeResult> loadUserGroup( + @RequestBody(required = false) List ids) { + + if (CollectionUtil.isEmpty(ids)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List datas = ids.stream().filter(StringUtil::isNotBlank) + .map(t -> sysUserGroupService.findById(t)).filter(Objects::nonNull) + .collect(Collectors.toList()); + List results = datas.stream().map(SysUserGroupSelectorBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/OpLogController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/OpLogController.java new file mode 100644 index 0000000..ae2b99b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/OpLogController.java @@ -0,0 +1,83 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.inner.bo.system.oplog.GetOpLogBo; +import com.lframework.starter.web.inner.bo.system.oplog.QueryOpLogBo; +import com.lframework.starter.web.inner.entity.OpLogs; +import com.lframework.starter.web.inner.service.OpLogsService; +import com.lframework.starter.web.inner.vo.oplogs.QueryOpLogsVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 操作日志 + * + * @author zmj + */ +@Api(tags = "操作日志") +@Validated +@RestController +@RequestMapping("/system/oplog") +public class OpLogController extends DefaultBaseController { + + @Autowired + private OpLogsService opLogsService; + + /** + * 操作日志列表 + */ + @ApiOperation("操作日志列表") + @HasPermission({"system:oplog:query"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QueryOpLogsVo vo) { + + PageResult pageResult = opLogsService.query(getPageIndex(vo), getPageSize(vo), + vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryOpLogBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 操作日志详情 + */ + @ApiOperation("操作日志详情") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:oplog:query"}) + @GetMapping + public InvokeResult findById(@NotBlank(message = "ID不能为空") String id) { + + OpLogs data = opLogsService.findById(id); + + if (data == null) { + throw new DefaultClientException("操作日志不存在!"); + } + + GetOpLogBo result = new GetOpLogBo(data); + + return InvokeResultBuilder.success(result); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicCategoryController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicCategoryController.java new file mode 100644 index 0000000..d021707 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicCategoryController.java @@ -0,0 +1,122 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.bo.system.dic.category.QuerySysDataDicCategoryBo; +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.inner.service.system.SysDataDicCategoryService; +import com.lframework.starter.web.inner.vo.system.dic.category.CreateSysDataDicCategoryVo; +import com.lframework.starter.web.inner.vo.system.dic.category.UpdateSysDataDicCategoryVo; +import com.lframework.starter.web.inner.bo.system.dic.category.GetSysDataDicCategoryBo; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据字典分类 + * + * @author zmj + */ +@Api(tags = "数据字典分类") +@Validated +@RestController +@RequestMapping("/system/dic/category") +public class SysDataDicCategoryController extends DefaultBaseController { + + @Autowired + private SysDataDicCategoryService sysDataDicCategoryService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:dic-category:*"}) + @GetMapping("/query") + public InvokeResult> query() { + List datas = sysDataDicCategoryService.queryList(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysDataDicCategoryBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:dic-category:*"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysDataDicCategory data = sysDataDicCategoryService.findById(id); + if (data == null) { + throw new DefaultClientException("数据字典分类不存在!"); + } + + GetSysDataDicCategoryBo result = new GetSysDataDicCategoryBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增数据字典分类 + */ + @ApiOperation("新增数据字典分类") + @HasPermission({"system:dic-category:add"}) + @PostMapping + public InvokeResult create(@Valid CreateSysDataDicCategoryVo vo) { + + sysDataDicCategoryService.create(vo); + + sysDataDicCategoryService.cleanCacheByKey("all"); + + return InvokeResultBuilder.success(); + } + + /** + * 修改数据字典分类 + */ + @ApiOperation("修改数据字典分类") + @HasPermission({"system:dic-category:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysDataDicCategoryVo vo) { + + sysDataDicCategoryService.update(vo); + + sysDataDicCategoryService.cleanCacheByKeys(Arrays.asList("all", vo.getId())); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("删除数据字典分类") + @HasPermission({"system:dic-category:delete"}) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + sysDataDicCategoryService.deleteById(id); + + sysDataDicCategoryService.cleanCacheByKeys(Arrays.asList("all", id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicController.java new file mode 100644 index 0000000..008658a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicController.java @@ -0,0 +1,127 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.bo.system.dic.GetSysDataDicBo; +import com.lframework.starter.web.inner.bo.system.dic.QuerySysDataDicBo; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.inner.vo.system.dic.CreateSysDataDicVo; +import com.lframework.starter.web.inner.vo.system.dic.QuerySysDataDicVo; +import com.lframework.starter.web.inner.vo.system.dic.UpdateSysDataDicVo; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据字典 + * + * @author zmj + */ +@Api(tags = "数据字典") +@Validated +@RestController +@RequestMapping("/system/dic") +public class SysDataDicController extends DefaultBaseController { + + @Autowired + private SysDataDicService sysDataDicService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:dic:*"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysDataDicVo vo) { + PageResult pageResult = sysDataDicService.query(getPageIndex(vo), getPageSize(vo), + vo); + List datas = pageResult.getDatas(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysDataDicBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:dic:*"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysDataDic data = sysDataDicService.findById(id); + if (data == null) { + throw new DefaultClientException("数据字典不存在!"); + } + + GetSysDataDicBo result = new GetSysDataDicBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增数据字典 + */ + @ApiOperation("新增数据字典") + @HasPermission({"system:dic:add"}) + @PostMapping + public InvokeResult create(@Valid CreateSysDataDicVo vo) { + + sysDataDicService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改数据字典 + */ + @ApiOperation("修改数据字典") + @HasPermission({"system:dic:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysDataDicVo vo) { + + sysDataDicService.update(vo); + + sysDataDicService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 删除数据字典 + */ + @ApiOperation("删除数据字典") + @HasPermission({"system:dic:delete"}) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + sysDataDicService.deleteById(id); + + sysDataDicService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicItemController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicItemController.java new file mode 100644 index 0000000..dcf0772 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataDicItemController.java @@ -0,0 +1,162 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.service.system.SysDataDicItemService; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.inner.vo.system.dic.item.CreateSysDataDicItemVo; +import com.lframework.starter.web.inner.vo.system.dic.item.QuerySysDataDicItemVo; +import com.lframework.starter.web.inner.vo.system.dic.item.UpdateSysDataDicItemVo; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.system.dic.item.GetSysDataDicItemBo; +import com.lframework.starter.web.inner.bo.system.dic.item.QuerySysDataDicItemBo; +import com.lframework.starter.web.inner.bo.system.dic.item.SysDataDicItemBo; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据字典值 + * + * @author zmj + */ +@Api(tags = "数据字典值") +@Validated +@RestController +@RequestMapping("/system/dic/item") +public class SysDataDicItemController extends DefaultBaseController { + + @Autowired + private SysDataDicItemService sysDataDicItemService; + + @Autowired + private SysDataDicService sysDataDicService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:dic-item:*"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysDataDicItemVo vo) { + PageResult pageResult = sysDataDicItemService.query(getPageIndex(vo), + getPageSize(vo), vo); + List datas = pageResult.getDatas(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysDataDicItemBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:dic-item:*"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysDataDicItem data = sysDataDicItemService.findById(id); + if (data == null) { + throw new DefaultClientException("数据字典值不存在!"); + } + + GetSysDataDicItemBo result = new GetSysDataDicItemBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 根据字典编号查询 + */ + @ApiOperation("根据字典编号查询") + @ApiImplicitParam(value = "字典编号", name = "code", paramType = "query", required = true) + @GetMapping("/bydic") + public InvokeResult> getByDicCode( + @NotBlank(message = "字典编号不能为空!") String code) { + List datas = sysDataDicItemService.findByDicCode(code); + + List results = datas.stream().map(SysDataDicItemBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + /** + * 新增数据字典值 + */ + @ApiOperation("新增数据字典值") + @HasPermission({"system:dic-item:add"}) + @PostMapping + public InvokeResult create(@Valid CreateSysDataDicItemVo vo) { + + sysDataDicItemService.create(vo); + + SysDataDic dic = sysDataDicService.findById(vo.getDicId()); + sysDataDicItemService.cleanCacheByKey(dic.getCode()); + + return InvokeResultBuilder.success(); + } + + /** + * 修改数据字典值 + */ + @ApiOperation("修改数据字典值") + @HasPermission({"system:dic-item:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysDataDicItemVo vo) { + + SysDataDicItem item = sysDataDicItemService.findById(vo.getId()); + + sysDataDicItemService.update(vo); + + SysDataDic dic = sysDataDicService.findById(item.getDicId()); + sysDataDicItemService.cleanCacheByKey(dic.getCode()); + + sysDataDicItemService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 删除数据字典值 + */ + @ApiOperation("删除数据字典值") + @HasPermission({"system:dic-item:delete"}) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + SysDataDicItem item = sysDataDicItemService.findById(id); + + sysDataDicItemService.deleteById(id); + + SysDataDic dic = sysDataDicService.findById(item.getDicId()); + sysDataDicItemService.cleanCacheByKey(dic.getCode()); + + sysDataDicItemService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionDataController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionDataController.java new file mode 100644 index 0000000..190cb83 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionDataController.java @@ -0,0 +1,94 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.vo.system.permission.CreateSysDataPermissionDataVo; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysDataPermissionData; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionDataBizType; +import com.lframework.starter.web.inner.service.system.SysDataPermissionDataService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据权限数据 + * + * @author zmj + */ +@Api(tags = "数据权限数据") +@Validated +@RestController +@RequestMapping("/system/data/permission/data") +public class SysDataPermissionDataController extends DefaultBaseController { + + @Autowired + private SysDataPermissionDataService sysDataPermissionDataService; + + @Autowired + private SysRoleService sysRoleService; + + @ApiOperation("保存") + @PostMapping + public InvokeResult save(@Valid @RequestBody List data) { + if (CollectionUtil.isEmpty(data)) { + return InvokeResultBuilder.success(); + } + + for (CreateSysDataPermissionDataVo vo : data) { + if (EnumUtil.getByCode(SysDataPermissionDataBizType.class, vo.getBizType()) + == SysDataPermissionDataBizType.ROLE) { + List roles = vo.getBizIds().stream().map(t -> sysRoleService.findById(t)) + .filter( + Objects::nonNull) + .filter(t -> SecurityConstants.PERMISSION_ADMIN_NAME.equals(t.getPermission())) + .collect(Collectors.toList()); + + if (CollectionUtil.isNotEmpty(roles)) { + throw new DefaultClientException( + "权限【" + SecurityConstants.PERMISSION_ADMIN_NAME + + "】为内置权限,不允许设置数据权限!"); + } + } + } + + List records = data.stream() + .flatMap(t -> t.getBizIds().stream() + .map(bizId -> { + SysDataPermissionData record = sysDataPermissionDataService.getByBizId(bizId, + t.getBizType(), + t.getPermissionType()); + if (record == null) { + record = new SysDataPermissionData(); + record.setId(IdUtil.getId()); + record.setBizId(bizId); + record.setBizType( + EnumUtil.getByCode(SysDataPermissionDataBizType.class, t.getBizType())); + record.setPermissionType(t.getPermissionType()); + } + record.setPermission(t.getPermission()); + return record; + })) + .collect(Collectors.toList()); + + sysDataPermissionDataService.saveOrUpdateAllColumnBatch(records); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionModelDetailController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionModelDetailController.java new file mode 100644 index 0000000..fe116c8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDataPermissionModelDetailController.java @@ -0,0 +1,153 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.inner.bo.system.permission.QuerySysDataPermissionModelDetailBo; +import com.lframework.starter.web.inner.bo.system.permission.SysDataPermissionModelDetailBo; +import com.lframework.starter.web.inner.entity.SysDataPermissionData; +import com.lframework.starter.web.inner.entity.SysDataPermissionModelDetail; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionDataBizType; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailCalcType; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailConditionType; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailNodeType; +import com.lframework.starter.web.inner.service.system.SysDataPermissionModelDetailService; +import com.lframework.starter.web.inner.vo.system.permission.SysDataPermissionModelDetailVo; +import com.lframework.starter.web.inner.service.system.SysDataPermissionDataService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据权限Model明细 + * + * @author zmj + */ +@Api(tags = "数据权限Model明细") +@Validated +@RestController +@RequestMapping("/system/data/permission/model/detail") +public class SysDataPermissionModelDetailController extends DefaultBaseController { + + @Autowired + private SysDataPermissionModelDetailService sysDataPermissionModelDetailService; + + @Autowired + private SysDataPermissionDataService sysDataPermissionDataService; + + @ApiOperation("根据模型ID查询") + @ApiImplicitParam(value = "模型ID", name = "modelId", paramType = "query", required = true) + @GetMapping + public InvokeResult> getByModelId( + @NotNull(message = "模型ID不能为空!") Integer modelId) { + + Wrapper queryWrapper = Wrappers.lambdaQuery( + SysDataPermissionModelDetail.class).eq(SysDataPermissionModelDetail::getModelId, modelId); + List datas = sysDataPermissionModelDetailService.list( + queryWrapper); + List results = datas.stream() + .map(SysDataPermissionModelDetailBo::new).collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + @ApiOperation("预览SQL") + @PostMapping("/preview") + public InvokeResult preview( + @Valid @RequestBody List models) { + + String sql = sysDataPermissionModelDetailService.toSql(models); + + return InvokeResultBuilder.success(sql); + } + + @ApiOperation("根据业务ID查询") + @ApiImplicitParam(value = "模型ID", name = "modelId", paramType = "query", required = true) + @GetMapping("/query") + public InvokeResult> queryByBizId( + @NotBlank(message = "业务ID不能为空!") String bizId, + @NotNull(message = "业务类型不能为空!") @IsEnum(message = "业务类型格式错误!", enumClass = SysDataPermissionDataBizType.class) Integer bizType, + @NotNull(message = " 权限类型不能为空!") Integer permissionType) { + + SysDataPermissionData data = sysDataPermissionDataService.getByBizId(bizId, bizType, + permissionType); + if (data == null) { + return InvokeResultBuilder.success(Collections.emptyList()); + } + + List voList = JsonUtil.parseList(data.getPermission(), + SysDataPermissionModelDetailVo.class); + if (CollectionUtil.isEmpty(voList)) { + return InvokeResultBuilder.success(Collections.emptyList()); + } + + List results = this.buildChildren(voList); + + return InvokeResultBuilder.success(results); + } + + private List buildChildren( + List children) { + if (CollectionUtil.isEmpty(children)) { + return Collections.emptyList(); + } + + List results = new ArrayList<>(children.size()); + for (SysDataPermissionModelDetailVo vo : children) { + SysDataPermissionModelDetail modelDetail = sysDataPermissionModelDetailService.getById( + vo.getDetailId()); + QuerySysDataPermissionModelDetailBo result = new QuerySysDataPermissionModelDetailBo(); + result.setId(vo.getId()); + result.setDetailId(vo.getDetailId()); + result.setCalcType(vo.getCalcType()); + result.setNodeType(vo.getNodeType()); + result.setValue(vo.getValue()); + result.setValues(vo.getValues()); + result.setConditionType(vo.getConditionType()); + SysDataPermissionModelDetailNodeType nodeType = EnumUtil.getByCode( + SysDataPermissionModelDetailNodeType.class, vo.getNodeType()); + if (nodeType == SysDataPermissionModelDetailNodeType.CALC) { + SysDataPermissionModelDetailCalcType calcType = EnumUtil.getByCode( + SysDataPermissionModelDetailCalcType.class, vo.getCalcType()); + result.setName(calcType.getDesc()); + result.setChildren(this.buildChildren(vo.getChildren())); + } else { + result.setName(modelDetail.getName()); + result.setModelId(modelDetail.getModelId()); + result.setConditionTypes( + Arrays.stream(modelDetail.getConditionType().split(StringPool.STR_SPLIT)) + .map(t -> EnumUtil.getByCode( + SysDataPermissionModelDetailConditionType.class, t).getCode()) + .toArray(Integer[]::new)); + result.setInputType(modelDetail.getInputType().getCode()); + result.setEnumName(modelDetail.getEnumName()); + } + + results.add(result); + } + + return results; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java new file mode 100644 index 0000000..3964a82 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java @@ -0,0 +1,175 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.inner.service.RecursionMappingService; +import com.lframework.starter.web.inner.bo.system.dept.GetSysDeptBo; +import com.lframework.starter.web.inner.bo.system.dept.SysDeptTreeBo; +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.inner.enums.system.SysDeptNodeType; +import com.lframework.starter.web.inner.service.system.SysDeptService; +import com.lframework.starter.web.inner.vo.system.dept.CreateSysDeptVo; +import com.lframework.starter.web.inner.vo.system.dept.UpdateSysDeptVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 部门管理 + * + * @author zmj + */ +@Api(tags = "部门管理") +@Validated +@RestController +@RequestMapping("/system/dept") +public class SysDeptController extends DefaultBaseController { + + @Autowired + private SysDeptService sysDeptService; + + @Autowired + private RecursionMappingService recursionMappingService; + + /** + * 部门树形菜单数据 + */ + @ApiOperation("部门树形菜单数据") + @HasPermission({"system:dept:query", "system:dept:add", "system:dept:modify"}) + @GetMapping("/trees") + public InvokeResult> trees() { + + List datas = sysDeptService.selector(); + if (CollectionUtil.isEmpty(datas)) { + return InvokeResultBuilder.success(CollectionUtil.emptyList()); + } + + List results = datas.stream().map(SysDeptTreeBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(results); + } + + /** + * 查询部门 + */ + @ApiOperation("部门详情") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:dept:query", "system:dept:add", "system:dept:modify"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysDept data = sysDeptService.findById(id); + if (data == null) { + throw new DefaultClientException("部门不存在!"); + } + + GetSysDeptBo result = new GetSysDeptBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 停用部门 + */ + @ApiOperation("停用部门") + @HasPermission({"system:dept:modify"}) + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "部门ID", required = true) @NotEmpty(message = "部门ID不能为空!") String id) { + + sysDeptService.unable(id); + + List batchIds = new ArrayList<>(); + batchIds.add(id); + + List tmp = recursionMappingService.getNodeChildIds(id, + SysDeptNodeType.class); + batchIds.addAll(tmp); + sysDeptService.cleanCacheByKeys(batchIds); + + return InvokeResultBuilder.success(); + } + + /** + * 启用部门 + */ + @ApiOperation("启用部门") + @HasPermission({"system:dept:modify"}) + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "部门ID", required = true) @NotEmpty(message = "部门ID不能为空!") String id) { + + sysDeptService.enable(id); + + List batchIds = new ArrayList<>(); + batchIds.add(id); + + List tmp = recursionMappingService.getNodeParentIds(id, + SysDeptNodeType.class); + batchIds.addAll(tmp); + sysDeptService.cleanCacheByKeys(batchIds); + + return InvokeResultBuilder.success(); + } + + /** + * 新增部门 + */ + @ApiOperation("新增部门") + @HasPermission({"system:dept:add"}) + @PostMapping + public InvokeResult create(@Valid CreateSysDeptVo vo) { + + sysDeptService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改部门 + */ + @ApiOperation("修改部门") + @HasPermission({"system:dept:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysDeptVo vo) { + + sysDeptService.update(vo); + + List batchIds = new ArrayList<>(); + batchIds.add(vo.getId()); + + if (vo.getAvailable()) { + List ids = recursionMappingService.getNodeParentIds(vo.getId(), + SysDeptNodeType.class); + batchIds.addAll(ids); + } else { + List ids = recursionMappingService.getNodeChildIds(vo.getId(), + SysDeptNodeType.class); + batchIds.addAll(ids); + } + + sysDeptService.cleanCacheByKeys(batchIds); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysGenerateCodeController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysGenerateCodeController.java new file mode 100644 index 0000000..f11eec2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysGenerateCodeController.java @@ -0,0 +1,165 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.components.generator.GenerateCodeFactory; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.service.GenerateCodeService; +import com.lframework.starter.web.inner.bo.system.generate.GetSysGenerateCodeBo; +import com.lframework.starter.web.inner.bo.system.generate.QuerySysGenerateCodeBo; +import com.lframework.starter.web.inner.entity.SysGenerateCode; +import com.lframework.starter.web.inner.service.system.SysGenerateCodeService; +import com.lframework.starter.web.inner.vo.system.generate.CreateSysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.PreviewSysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.QuerySysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.SettingSysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.UpdateSysGenerateCodeVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 编号规则 Controller + * + * @author zmj + */ +@Api(tags = "编号规则") +@Validated +@RestController +@RequestMapping("/system/generate/code") +public class SysGenerateCodeController extends DefaultBaseController { + + @Autowired + private SysGenerateCodeService sysGenerateCodeService; + + @Autowired + private GenerateCodeService generateCodeService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:generate-code:manage"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysGenerateCodeVo vo) { + + PageResult pageResult = sysGenerateCodeService.query(getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysGenerateCodeBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @HasPermission({"system:generate-code:manage"}) + @GetMapping + public InvokeResult get(@NotNull(message = "id不能为空!") Long id) { + + SysGenerateCode data = sysGenerateCodeService.getById(id); + if (data == null) { + throw new DefaultClientException("编号规则不存在!"); + } + + GetSysGenerateCodeBo result = new GetSysGenerateCodeBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增 + */ + @ApiOperation("新增") + @HasPermission({"system:generate-code:manage"}) + @PostMapping + public InvokeResult create(@Valid CreateSysGenerateCodeVo vo) { + + sysGenerateCodeService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改 + */ + @ApiOperation("修改") + @HasPermission({"system:generate-code:manage"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysGenerateCodeVo vo) { + + sysGenerateCodeService.update(vo); + + sysGenerateCodeService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 根据ID删除 + */ + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @HasPermission({"system:generate-code:manage"}) + @DeleteMapping + public InvokeResult deleteById(@NotNull(message = "id不能为空!") Integer id) { + + sysGenerateCodeService.deleteById(id); + + sysGenerateCodeService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + /** + * 设置规则 + */ + @ApiOperation("设置规则") + @HasPermission({"system:generate-code:manage"}) + @PatchMapping + public InvokeResult setting(@Valid SettingSysGenerateCodeVo vo) { + + sysGenerateCodeService.setting(vo); + + sysGenerateCodeService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 预览 + */ + @ApiOperation("预览") + @HasPermission({"system:generate-code:manage"}) + @PostMapping("/preview") + public InvokeResult preview(@Valid PreviewSysGenerateCodeVo vo) { + + return InvokeResultBuilder.success(GenerateCodeFactory.generateExample(vo.getConfigStr())); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMailMessageController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMailMessageController.java new file mode 100644 index 0000000..ba1916c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMailMessageController.java @@ -0,0 +1,83 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.system.message.mail.GetSysMailMessageBo; +import com.lframework.starter.web.inner.bo.system.message.mail.QuerySysMailMessageBo; +import com.lframework.starter.web.inner.entity.SysMailMessage; +import com.lframework.starter.web.inner.service.system.SysMailMessageService; +import com.lframework.starter.web.inner.vo.system.message.mail.QuerySysMailMessageVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 邮件消息 Controller + * + * @author zmj + */ +@Api(tags = "邮件消息") +@Validated +@RestController +@RequestMapping("/system/message/mail") +public class SysMailMessageController extends DefaultBaseController { + + @Autowired + private SysMailMessageService sysMailMessageService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission("system:mail-message:manage") + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysMailMessageVo vo) { + + PageResult pageResult = sysMailMessageService.query(getPageIndex(vo), + getPageSize(vo), + vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysMailMessageBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @HasPermission("system:mail-message:manage") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "id不能为空!") String id) { + + SysMailMessage data = sysMailMessageService.findById(id); + if (data == null) { + throw new DefaultClientException("邮件消息不存在!"); + } + + GetSysMailMessageBo result = new GetSysMailMessageBo(data); + + return InvokeResultBuilder.success(result); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMenuController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMenuController.java new file mode 100644 index 0000000..a078829 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysMenuController.java @@ -0,0 +1,240 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.inner.bo.system.menu.GetSysMenuBo; +import com.lframework.starter.web.inner.bo.system.menu.QuerySysMenuBo; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.inner.enums.system.SysMenuDisplay; +import com.lframework.starter.web.inner.service.SysModuleTenantService; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.inner.vo.system.menu.CreateSysMenuVo; +import com.lframework.starter.web.inner.vo.system.menu.UpdateSysMenuVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 系统菜单管理 + * + * @author zmj + */ +@Api(tags = "系统菜单管理") +@Validated +@RestController +@RequestMapping("/system/menu") +public class SysMenuController extends DefaultBaseController { + + @Autowired + private SysMenuService sysMenuService; + + @Autowired + private SysModuleTenantService sysModuleTenantService; + + /** + * 系统菜单列表 + */ + @ApiOperation("系统菜单列表") + @HasPermission({"system:menu:query", "system:menu:add"}) + @GetMapping("/query") + public InvokeResult> query() { + + // 先查询当前租户使用的module + List moduleIds = null; + if (TenantUtil.enableTenant()) { + moduleIds = sysModuleTenantService.getAvailableModuleIdsByTenantId( + TenantContextHolder.getTenantId()); + } + + List results = CollectionUtil.emptyList(); + List datas = sysMenuService.queryList(moduleIds); + if (CollectionUtil.isNotEmpty(datas)) { + results = datas.stream().map(QuerySysMenuBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 新增系统菜单 + */ + @ApiOperation("新增系统菜单") + @HasPermission({"system:menu:add"}) + @PostMapping + public InvokeResult add(@Valid CreateSysMenuVo vo) { + + this.validVo(vo); + + sysMenuService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 查看系统菜单 + */ + @ApiOperation("查看系统菜单") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:menu:query", "system:menu:add", "system:menu:modify"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysMenu data = sysMenuService.findById(id); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("菜单不存在!"); + } + + return InvokeResultBuilder.success(new GetSysMenuBo(data)); + } + + /** + * 修改系统菜单 + */ + @ApiOperation("修改系统菜单") + @HasPermission({"system:menu:modify"}) + @PutMapping + public InvokeResult modify(@Valid UpdateSysMenuVo vo) { + + this.validVo(vo); + + sysMenuService.update(vo); + + sysMenuService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 根据ID删除 + */ + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:menu:delete"}) + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + sysMenuService.deleteById(id); + + sysMenuService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + /** + * 启用 + */ + @ApiOperation("启用") + @HasPermission({"system:menu:modify"}) + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "菜单ID", required = true) @NotEmpty(message = "菜单ID不能为空!") String id) { + + sysMenuService.enable(id); + + sysMenuService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + /** + * 停用 + */ + @ApiOperation("停用") + @HasPermission({"system:menu:modify"}) + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "菜单ID", required = true) @NotEmpty(message = "菜单ID不能为空!") String id) { + + sysMenuService.unable(id); + + sysMenuService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + private void validVo(CreateSysMenuVo vo) { + + SysMenuDisplay sysMenuDisplay = EnumUtil.getByCode(SysMenuDisplay.class, vo.getDisplay()); + + if (sysMenuDisplay == SysMenuDisplay.CATALOG || sysMenuDisplay == SysMenuDisplay.FUNCTION) { + if (StringUtil.isBlank(vo.getName())) { + throw new InputErrorException("请输入路由名称!"); + } + + if (StringUtil.isBlank(vo.getPath())) { + throw new InputErrorException("请输入路由路径!"); + } + + if (ObjectUtil.isNull(vo.getHidden())) { + throw new InputErrorException("请选择是否隐藏!"); + } + + if (sysMenuDisplay == SysMenuDisplay.FUNCTION) { + if (vo.getComponentType() == null) { + throw new InputErrorException("请选择组件类型!"); + } + if (StringUtil.isBlank(vo.getComponent())) { + throw new InputErrorException("请输入组件!"); + } + if (ObjectUtil.isNull(vo.getNoCache())) { + throw new InputErrorException("请选择是否不缓存!"); + } + + if (!StringUtil.isBlank(vo.getParentId())) { + SysMenu parentMenu = sysMenuService.findById(vo.getParentId()); + + if (parentMenu.getDisplay() != SysMenuDisplay.CATALOG) { + throw new InputErrorException( + "当菜单类型是“" + SysMenuDisplay.FUNCTION.getDesc() + "”时,父级菜单类型必须是“" + + SysMenuDisplay.CATALOG.getDesc() + "”!"); + } + } + } + } else if (sysMenuDisplay == SysMenuDisplay.PERMISSION) { + if (StringUtil.isBlank(vo.getParentId())) { + throw new InputErrorException( + "当菜单类型是“" + SysMenuDisplay.PERMISSION.getDesc() + "”时,父级菜单不能为空!"); + } + + SysMenu parentMenu = sysMenuService.findById(vo.getParentId()); + if (ObjectUtil.isNull(parentMenu)) { + throw new InputErrorException( + "当菜单类型是“" + SysMenuDisplay.PERMISSION.getDesc() + "”时,父级菜单不能为空!"); + } + + if (parentMenu.getDisplay() != SysMenuDisplay.FUNCTION) { + throw new InputErrorException( + "当菜单类型是“" + SysMenuDisplay.PERMISSION.getDesc() + "”时,父级菜单类型必须是“" + + SysMenuDisplay.FUNCTION.getDesc() + "”!"); + } + if (StringUtil.isBlank(vo.getPermission())) { + throw new InputErrorException("请输入权限!"); + } + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysModuleController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysModuleController.java new file mode 100644 index 0000000..d542dd5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysModuleController.java @@ -0,0 +1,101 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.web.inner.bo.system.module.QuerySysModuleBo; +import com.lframework.starter.web.inner.entity.SysModule; +import com.lframework.starter.web.inner.entity.SysModuleTenant; +import com.lframework.starter.web.inner.service.SysModuleService; +import com.lframework.starter.web.inner.service.SysModuleTenantService; +import com.lframework.starter.web.inner.vo.system.module.SysModuleTenantVo; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.utils.TenantUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 系统模块管理 + * + * @author zmj + */ +@Api(tags = "系统模块管理") +@Validated +@RestController +@RequestMapping("/system/module") +public class SysModuleController extends DefaultBaseController { + + @Autowired + private SysModuleService sysModuleService; + + @Autowired + private SysModuleTenantService sysModuleTenantService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission(value = {"system:tenant:module"}) + @GetMapping("/query") + public InvokeResult> query(@NotNull(message = "租户ID不能为空!") Integer tenantId) { + + if (!TenantUtil.enableTenant()) { + return InvokeResultBuilder.success(Collections.emptyList()); + } + + // 先查询所有模块 + List sysModules = sysModuleService.list(); + List results = sysModules.stream().map(QuerySysModuleBo::new) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(results)) { + return InvokeResultBuilder.success(results); + } + + List sysModuleTenants = sysModuleTenantService.getByTenantId(tenantId); + + for (QuerySysModuleBo result : results) { + SysModuleTenant sysModuleTenant = sysModuleTenants.stream() + .filter(t -> ObjectUtil.equal(t.getModuleId(), result.getId())).findFirst().orElse(null); + result.setEnabled(sysModuleTenant != null); + if (sysModuleTenant == null) { + continue; + } + result.setExpireTime(sysModuleTenant.getExpireTime()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 模块授权 + */ + @ApiOperation("模块授权") + @HasPermission(value = {"system:tenant:module"}) + @PostMapping("/setting") + public InvokeResult setting( + @RequestBody(required = false) @Valid SysModuleTenantVo vo) { + + if (!TenantUtil.enableTenant()) { + return InvokeResultBuilder.success(); + } + sysModuleTenantService.setting(vo); + + sysModuleTenantService.cleanCacheByKey(vo.getTenantId()); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNoticeController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNoticeController.java new file mode 100644 index 0000000..b45a7ea --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNoticeController.java @@ -0,0 +1,174 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ThreadUtil; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.threads.DefaultRunnable; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.inner.bo.system.notice.GetSysNoticeBo; +import com.lframework.starter.web.inner.bo.system.notice.QueryMySysNoticeBo; +import com.lframework.starter.web.inner.bo.system.notice.QuerySysNoticeBo; +import com.lframework.starter.web.inner.dto.system.notice.QuerySysNoticeByUserDto; +import com.lframework.starter.web.inner.dto.system.notice.SysNoticeDto; +import com.lframework.starter.web.inner.entity.SysNotice; +import com.lframework.starter.web.inner.vo.system.notice.CreateSysNoticeVo; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeByUserVo; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeVo; +import com.lframework.starter.web.inner.vo.system.notice.UpdateSysNoticeVo; +import com.lframework.starter.web.inner.service.system.SysNoticeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 系统通知 Controller + * + * @author zmj + */ +@Api(tags = "系统通知") +@Validated +@RestController +@RequestMapping("/system/notice") +public class SysNoticeController extends DefaultBaseController { + + @Autowired + private SysNoticeService sysNoticeService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:notice:publish"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysNoticeVo vo) { + + PageResult pageResult = sysNoticeService.query(getPageIndex(vo), getPageSize(vo), + vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysNoticeBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 查询我的通知 + */ + @ApiOperation("查询我的通知") + @GetMapping("/query/my") + public InvokeResult> queryMyNotice( + @Valid QuerySysNoticeByUserVo vo) { + + vo.setUserId(SecurityUtil.getCurrentUser().getId()); + + PageResult pageResult = sysNoticeService.queryByUser(getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryMySysNoticeBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询内容 + */ + @ApiOperation("根据ID查询内容") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @GetMapping("/content") + public InvokeResult getContent(@NotBlank(message = "id不能为空!") String id) { + + SysNoticeDto data = sysNoticeService.getContent(id); + if (data == null) { + throw new DefaultClientException("系统通知不存在!"); + } + + String currentUserId = SecurityUtil.getCurrentUser().getId(); + ThreadUtil.execAsync(new DefaultRunnable(() -> { + sysNoticeService.setReaded(id, currentUserId); + + sysNoticeService.noticeForWs(currentUserId); + })); + + return InvokeResultBuilder.success(data); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "id不能为空!") String id) { + + SysNotice data = sysNoticeService.findById(id); + if (data == null) { + throw new DefaultClientException("系统通知不存在!"); + } + + GetSysNoticeBo result = new GetSysNoticeBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增 + */ + @ApiOperation("新增") + @HasPermission({"system:notice:add"}) + @PostMapping + public InvokeResult create(@Valid CreateSysNoticeVo vo) { + + sysNoticeService.create(vo); + + if (vo.getPublished()) { + sysNoticeService.noticeForWs(); + } + + return InvokeResultBuilder.success(); + } + + /** + * 修改 + */ + @ApiOperation("修改") + @HasPermission({"system:notice:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysNoticeVo vo) { + + sysNoticeService.update(vo); + + sysNoticeService.cleanCacheByKey(vo.getId()); + + if (vo.getPublished()) { + sysNoticeService.noticeForWs(); + } + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNotifyGroupController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNotifyGroupController.java new file mode 100644 index 0000000..16ac82c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysNotifyGroupController.java @@ -0,0 +1,118 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.system.notify.GetSysNotifyGroupBo; +import com.lframework.starter.web.inner.bo.system.notify.QuerySysNotifyGroupBo; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.service.system.SysNotifyGroupService; +import com.lframework.starter.web.inner.vo.system.notify.CreateSysNotifyGroupVo; +import com.lframework.starter.web.inner.vo.system.notify.QuerySysNotifyGroupVo; +import com.lframework.starter.web.inner.vo.system.notify.UpdateSysNotifyGroupVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 消息通知组 Controller + * + * @author zmj + */ +@Api(tags = "消息通知组") +@Validated +@RestController +@RequestMapping("/sys/notify/group") +public class SysNotifyGroupController extends DefaultBaseController { + + @Autowired + private SysNotifyGroupService sysNotifyGroupService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:notify-group:query"}) + @GetMapping("/query") + public InvokeResult> query( + @Valid QuerySysNotifyGroupVo vo) { + + PageResult pageResult = sysNotifyGroupService.query( + getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysNotifyGroupBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:notify-group:query"}) + @GetMapping("/detail") + public InvokeResult getDetail( + @NotBlank(message = "id不能为空!") String id) { + + SysNotifyGroup data = sysNotifyGroupService.findById(id); + if (data == null) { + throw new DefaultClientException("消息通知组不存在!"); + } + + GetSysNotifyGroupBo result = new GetSysNotifyGroupBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增 + */ + @ApiOperation("新增") + @HasPermission({"system:notify-group:add"}) + @PostMapping + public InvokeResult create(@Valid @RequestBody CreateSysNotifyGroupVo vo) { + + sysNotifyGroupService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改 + */ + @ApiOperation("修改") + @HasPermission({"system:notify-group:modify"}) + @PutMapping + public InvokeResult update(@Valid @RequestBody UpdateSysNotifyGroupVo vo) { + + sysNotifyGroupService.update(vo); + + sysNotifyGroupService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysOpenDomainController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysOpenDomainController.java new file mode 100644 index 0000000..1e5e789 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysOpenDomainController.java @@ -0,0 +1,129 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.bo.system.open.GetSysOpenDomainBo; +import com.lframework.starter.web.inner.bo.system.open.QuerySysOpenDomainBo; +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.service.system.SysOpenDomainService; +import com.lframework.starter.web.inner.vo.system.open.QuerySysOpenDomainVo; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.vo.system.open.CreateSysOpenDomainVo; +import com.lframework.starter.web.inner.vo.system.open.UpdateSysOpenDomainSecretVo; +import com.lframework.starter.web.inner.vo.system.open.UpdateSysOpenDomainVo; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 开放域 + * + * @author zmj + */ +@Api(tags = "开放域") +@Validated +@RestController +@RequestMapping("/system/open/domain") +public class SysOpenDomainController extends DefaultBaseController { + + @Autowired + private SysOpenDomainService sysOpenDomainService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:open-domain:config"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysOpenDomainVo vo) { + + PageResult pageResult = sysOpenDomainService.query(vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysOpenDomainBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 详情 + */ + @ApiOperation("详情") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:open-domain:config"}) + @GetMapping + public InvokeResult get(@NotNull(message = "ID不能为空!") Integer id) { + + SysOpenDomain data = sysOpenDomainService.findById(id); + if (data == null) { + throw new DefaultClientException("开放域不存在!"); + } + + GetSysOpenDomainBo result = new GetSysOpenDomainBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增 + */ + @ApiOperation("新增") + @HasPermission({"system:open-domain:config"}) + @PostMapping + public InvokeResult create(@Valid CreateSysOpenDomainVo vo) { + + sysOpenDomainService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改 + */ + @ApiOperation("修改") + @HasPermission({"system:open-domain:config"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysOpenDomainVo vo) { + + sysOpenDomainService.update(vo); + + sysOpenDomainService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 修改Api密钥 + */ + @ApiOperation("修改Api密钥") + @HasPermission({"system:open-domain:config"}) + @PutMapping("/secret") + public InvokeResult updateSecret(@Valid UpdateSysOpenDomainSecretVo vo) { + + sysOpenDomainService.updateApiSecret(vo); + + sysOpenDomainService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysParameterController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysParameterController.java new file mode 100644 index 0000000..6ecbe32 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysParameterController.java @@ -0,0 +1,138 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.entity.SysParameter; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.service.system.SysParameterService; +import com.lframework.starter.web.inner.vo.system.parameter.CreateSysParameterVo; +import com.lframework.starter.web.inner.vo.system.parameter.QuerySysParameterVo; +import com.lframework.starter.web.inner.vo.system.parameter.UpdateSysParameterVo; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.system.parameter.GetSysParameterBo; +import com.lframework.starter.web.inner.bo.system.parameter.QuerySysParameterBo; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 系统参数 Controller + * + * @author zmj + */ +@Api(tags = "系统参数") +@Validated +@RestController +@RequestMapping("/system/parameter") +public class SysParameterController extends DefaultBaseController { + + @Autowired + private SysParameterService sysParameterService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:parameter:query"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysParameterVo vo) { + + PageResult pageResult = sysParameterService.query(getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysParameterBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @HasPermission({"system:parameter:query"}) + @GetMapping + public InvokeResult get(@NotNull(message = "id不能为空!") Long id) { + + SysParameter data = sysParameterService.getById(id); + if (data == null) { + throw new DefaultClientException("系统参数不存在!"); + } + + GetSysParameterBo result = new GetSysParameterBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增 + */ + @ApiOperation("新增") + @HasPermission({"system:parameter:add"}) + @PostMapping + public InvokeResult create(@Valid CreateSysParameterVo vo) { + + sysParameterService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改 + */ + @ApiOperation("修改") + @HasPermission({"system:parameter:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysParameterVo vo) { + + sysParameterService.update(vo); + + sysParameterService.cleanCacheByKey(vo.getId()); + + SysParameter data = sysParameterService.findById(vo.getId()); + sysParameterService.cleanCacheByKey(data.getPmKey()); + + return InvokeResultBuilder.success(); + } + + /** + * 根据ID删除 + */ + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @HasPermission({"system:parameter:delete"}) + @DeleteMapping + public InvokeResult deleteById(@NotNull(message = "id不能为空!") Long id) { + + SysParameter data = sysParameterService.findById(id); + + sysParameterService.deleteById(id); + + sysParameterService.cleanCacheByKey(id); + + sysParameterService.cleanCacheByKey(data.getPmKey()); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleCategoryController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleCategoryController.java new file mode 100644 index 0000000..45caf2d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleCategoryController.java @@ -0,0 +1,116 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.inner.bo.system.role.category.GetSysRoleCategoryBo; +import com.lframework.starter.web.inner.bo.system.role.category.QuerySysRoleCategoryBo; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import com.lframework.starter.web.inner.service.system.SysRoleCategoryService; +import com.lframework.starter.web.inner.vo.system.role.category.CreateSysRoleCategoryVo; +import com.lframework.starter.web.inner.vo.system.role.category.UpdateSysRoleCategoryVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 角色分类 + * + * @author zmj + */ +@Api(tags = "角色分类") +@Validated +@RestController +@RequestMapping("/sys/role/category") +public class SysRoleCategoryController extends DefaultBaseController { + + @Autowired + private SysRoleCategoryService sysRoleCategoryService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @GetMapping("/query") + public InvokeResult> query() { + List datas = sysRoleCategoryService.queryList(); + List results = CollectionUtil.emptyList(); + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysRoleCategoryBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(results); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysRoleCategory data = sysRoleCategoryService.findById(id); + if (data == null) { + throw new DefaultClientException("角色分类不存在!"); + } + + GetSysRoleCategoryBo result = new GetSysRoleCategoryBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增角色分类 + */ + @ApiOperation("新增角色分类") + @PostMapping + public InvokeResult create(@Valid CreateSysRoleCategoryVo vo) { + + sysRoleCategoryService.create(vo); + + sysRoleCategoryService.cleanCacheByKey("all"); + + return InvokeResultBuilder.success(); + } + + /** + * 修改角色分类 + */ + @ApiOperation("修改角色分类") + @PutMapping + public InvokeResult update(@Valid UpdateSysRoleCategoryVo vo) { + + sysRoleCategoryService.update(vo); + + sysRoleCategoryService.cleanCacheByKeys(Arrays.asList("all", vo.getId())); + + return InvokeResultBuilder.success(); + } + + @ApiOperation("删除角色分类") + @DeleteMapping + public InvokeResult delete(@NotBlank(message = "ID不能为空!") String id) { + + sysRoleCategoryService.deleteById(id); + + sysRoleCategoryService.cleanCacheByKeys(Arrays.asList("all", id)); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleController.java new file mode 100644 index 0000000..545278e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleController.java @@ -0,0 +1,149 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.bo.system.role.GetSysRoleBo; +import com.lframework.starter.web.inner.bo.system.role.QuerySysRoleBo; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.vo.system.role.CreateSysRoleVo; +import com.lframework.starter.web.inner.vo.system.role.QuerySysRoleVo; +import com.lframework.starter.web.inner.vo.system.role.UpdateSysRoleVo; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 角色管理 + * + * @author zmj + */ +@Api(tags = "角色管理") +@Validated +@RestController +@RequestMapping("/system/role") +public class SysRoleController extends DefaultBaseController { + + @Autowired + private SysRoleService sysRoleService; + + /** + * 角色列表 + */ + @ApiOperation("角色列表") + @HasPermission({"system:role:query","system:role:add","system:role:modify"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysRoleVo vo) { + + PageResult pageResult = sysRoleService.query(getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysRoleBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 查询角色 + */ + @ApiOperation("查询角色") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:role:query","system:role:add","system:role:modify"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysRole data = sysRoleService.findById(id); + if (data == null) { + throw new DefaultClientException("角色不存在!"); + } + + GetSysRoleBo result = new GetSysRoleBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 停用角色 + */ + @ApiOperation("停用角色") + @HasPermission({"system:role:modify"}) + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "角色ID", required = true) @NotEmpty(message = "角色ID不能为空!") String id) { + + sysRoleService.unable(id); + + sysRoleService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + /** + * 启用角色 + */ + @ApiOperation("启用角色") + @HasPermission({"system:role:modify"}) + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "角色ID", required = true) @NotEmpty(message = "角色ID不能为空!") String id) { + + sysRoleService.enable(id); + + sysRoleService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + /** + * 新增角色 + */ + @ApiOperation("新增角色") + @HasPermission({"system:role:add"}) + @PostMapping + public InvokeResult create(@Valid CreateSysRoleVo vo) { + + sysRoleService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改角色 + */ + @ApiOperation("修改角色") + @HasPermission({"system:role:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateSysRoleVo vo) { + + sysRoleService.update(vo); + + sysRoleService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleMenuController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleMenuController.java new file mode 100644 index 0000000..7d3f262 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysRoleMenuController.java @@ -0,0 +1,98 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.inner.bo.system.role.QueryRoleMenuBo; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.inner.service.SysModuleTenantService; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.inner.service.system.SysRoleMenuService; +import com.lframework.starter.web.inner.vo.system.role.SysRoleMenuSettingVo; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.utils.TenantUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 角色授权 + * + * @author zmj + */ +@Api(tags = "角色授权") +@Validated +@RestController +@RequestMapping("/system/role/menu") +public class SysRoleMenuController extends DefaultBaseController { + + @Autowired + private SysMenuService sysMenuService; + + @Autowired + private SysRoleMenuService sysRoleMenuService; + + @Autowired + private SysModuleTenantService sysModuleTenantService; + + /** + * 查询角色菜单列表 + */ + @ApiOperation("查询角色菜单列表") + @ApiImplicitParam(value = "角色ID", name = "roleId", paramType = "query") + @HasPermission({"system:role:permission"}) + @GetMapping("/menus") + public InvokeResult> menus(String roleId) { + + // 先查询当前租户使用的module + List moduleIds = null; + if (TenantUtil.enableTenant()) { + moduleIds = sysModuleTenantService.getAvailableModuleIdsByTenantId(TenantContextHolder.getTenantId()); + } + + List results = CollectionUtil.emptyList(); + //查询所有菜单 + List allMenu = sysMenuService.queryList(moduleIds); + if (!CollectionUtil.isEmpty(allMenu)) { + results = allMenu.stream().map(QueryRoleMenuBo::new).collect(Collectors.toList()); + + if (!StringUtil.isBlank(roleId)) { + List menus = sysMenuService.getByRoleId(roleId, moduleIds); + if (!CollectionUtil.isEmpty(menus)) { + //当角色的菜单存在时,设置已选择属性 + for (QueryRoleMenuBo result : results) { + result.setSelected( + menus.stream().anyMatch(t -> StringUtil.equals(t.getId(), result.getId()))); + } + } + } + } + + return InvokeResultBuilder.success(results); + } + + /** + * 授权角色菜单 + */ + @ApiOperation("授权角色菜单") + @HasPermission({"system:role:permission"}) + @PostMapping("/setting") + public InvokeResult setting(@Valid @RequestBody SysRoleMenuSettingVo vo) { + + sysRoleMenuService.setting(vo); + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysSiteMessageController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysSiteMessageController.java new file mode 100644 index 0000000..d6def5e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysSiteMessageController.java @@ -0,0 +1,135 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ThreadUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.components.threads.DefaultRunnable; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.system.message.site.GetSysSiteMessageBo; +import com.lframework.starter.web.inner.bo.system.message.site.QueryMySysSiteMessageBo; +import com.lframework.starter.web.inner.bo.system.message.site.QuerySysSiteMessageBo; +import com.lframework.starter.web.inner.dto.message.site.SiteMessageDto; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import com.lframework.starter.web.inner.service.system.SysSiteMessageService; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageByUserVo; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 站内信 Controller + * + * @author zmj + */ +@Api(tags = "站内信") +@Validated +@RestController +@RequestMapping("/system/message/site") +public class SysSiteMessageController extends DefaultBaseController { + + @Autowired + private SysSiteMessageService sysSiteMessageService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission("system:site-message:manage") + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysSiteMessageVo vo) { + + PageResult pageResult = sysSiteMessageService.query(getPageIndex(vo), + getPageSize(vo), + vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysSiteMessageBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 查询我的站内信 + */ + @ApiOperation("查询我的站内信") + @GetMapping("/query/my") + public InvokeResult> queryMySiteMessage( + @Valid QuerySysSiteMessageByUserVo vo) { + + vo.setUserId(SecurityUtil.getCurrentUser().getId()); + + PageResult pageResult = sysSiteMessageService.queryByUser(getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QueryMySysSiteMessageBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询内容 + */ + @ApiOperation("根据ID查询内容") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @GetMapping("/content") + public InvokeResult getContent(@NotBlank(message = "id不能为空!") String id) { + + SiteMessageDto data = sysSiteMessageService.getContent(id); + if (data == null) { + throw new DefaultClientException("站内信不存在!"); + } + + String currentUserId = SecurityUtil.getCurrentUser().getId(); + ThreadUtil.execAsync(new DefaultRunnable(() -> { + if (sysSiteMessageService.setReaded(id)) { + sysSiteMessageService.noticeForWs(currentUserId); + } + })); + + return InvokeResultBuilder.success(data); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @HasPermission("system:site-message:manage") + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) + @GetMapping + public InvokeResult get(@NotBlank(message = "id不能为空!") String id) { + + SysSiteMessage data = sysSiteMessageService.findById(id); + if (data == null) { + throw new DefaultClientException("站内信不存在!"); + } + + GetSysSiteMessageBo result = new GetSysSiteMessageBo(data); + + return InvokeResultBuilder.success(result); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserController.java new file mode 100644 index 0000000..094c081 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserController.java @@ -0,0 +1,172 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.system.user.GetSysUserBo; +import com.lframework.starter.web.inner.bo.system.user.QuerySysUserBo; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.system.user.CreateSysUserVo; +import com.lframework.starter.web.inner.vo.system.user.QuerySysUserVo; +import com.lframework.starter.web.inner.vo.system.user.UpdateSysUserVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 用户管理 + * + * @author zmj + */ +@Api(tags = "用户管理") +@Validated +@RestController +@RequestMapping("/system/user") +public class SysUserController extends DefaultBaseController { + + @Autowired + private SysUserService sysUserService; + + @Autowired + private SysUserDeptService sysUserDeptService; + + /** + * 用户列表 + */ + @ApiOperation("用户列表") + @HasPermission({"system:user:query", "system:user:add", "system:user:modify"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QuerySysUserVo vo) { + + PageResult pageResult = sysUserService.query(getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysUserBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 查询用户 + */ + @ApiOperation("查询用户") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:user:query", "system:user:add", "system:user:modify"}) + @GetMapping + public InvokeResult get(@NotBlank(message = "ID不能为空!") String id) { + + SysUser data = sysUserService.findById(id); + if (data == null) { + throw new DefaultClientException("用户不存在!"); + } + + GetSysUserBo result = new GetSysUserBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 停用用户 + */ + @ApiOperation("停用用户") + @HasPermission({"system:user:modify"}) + @PatchMapping("/unable") + public InvokeResult unable( + @ApiParam(value = "用户ID", required = true) @NotEmpty(message = "用户ID不能为空!") String id) { + + sysUserService.unable(id); + + sysUserService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + /** + * 启用用户 + */ + @ApiOperation("启用用户") + @HasPermission({"system:user:modify"}) + @PatchMapping("/enable") + public InvokeResult enable( + @ApiParam(value = "用户ID", required = true) @NotEmpty(message = "用户ID不能为空!") String id) { + + sysUserService.enable(id); + + sysUserService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } + + /** + * 新增用户 + */ + @ApiOperation("新增用户") + @HasPermission({"system:user:add"}) + @PostMapping + public InvokeResult create(@Valid @RequestBody CreateSysUserVo vo) { + + sysUserService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改用户 + */ + @ApiOperation("修改用户") + @HasPermission({"system:user:modify"}) + @PutMapping + public InvokeResult update(@Valid @RequestBody UpdateSysUserVo vo) { + + sysUserService.update(vo); + + sysUserService.cleanCacheByKey(vo.getId()); + + sysUserDeptService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } + + /** + * 解锁用户 + */ + @ApiOperation("解锁用户") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:user:modify"}) + @PatchMapping("/unlock") + public InvokeResult unlock(@NotBlank(message = "ID不能为空!") String id) { + + sysUserService.unlockById(id); + + sysUserService.cleanCacheByKey(id); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserGroupController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserGroupController.java new file mode 100644 index 0000000..ff590a2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserGroupController.java @@ -0,0 +1,118 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.bo.system.user.group.GetSysUserGroupBo; +import com.lframework.starter.web.inner.bo.system.user.group.QuerySysUserGroupBo; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import com.lframework.starter.web.inner.service.system.SysUserGroupService; +import com.lframework.starter.web.inner.vo.system.user.group.CreateSysUserGroupVo; +import com.lframework.starter.web.inner.vo.system.user.group.QuerySysUserGroupVo; +import com.lframework.starter.web.inner.vo.system.user.group.UpdateSysUserGroupVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 用户组 Controller + * + * @author zmj + */ +@Api(tags = "用户组") +@Validated +@RestController +@RequestMapping("/sys/user/group") +public class SysUserGroupController extends DefaultBaseController { + + @Autowired + private SysUserGroupService sysUserGroupService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"system:notify-group:query"}) + @GetMapping("/query") + public InvokeResult> query( + @Valid QuerySysUserGroupVo vo) { + + PageResult pageResult = sysUserGroupService.query( + getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(QuerySysUserGroupBo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission({"system:notify-group:query"}) + @GetMapping("/detail") + public InvokeResult getDetail( + @NotBlank(message = "id不能为空!") String id) { + + SysUserGroup data = sysUserGroupService.findById(id); + if (data == null) { + throw new DefaultClientException("消息通知组不存在!"); + } + + GetSysUserGroupBo result = new GetSysUserGroupBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增 + */ + @ApiOperation("新增") + @HasPermission({"system:notify-group:add"}) + @PostMapping + public InvokeResult create(@Valid @RequestBody CreateSysUserGroupVo vo) { + + sysUserGroupService.create(vo); + + return InvokeResultBuilder.success(); + } + + /** + * 修改 + */ + @ApiOperation("修改") + @HasPermission({"system:notify-group:modify"}) + @PutMapping + public InvokeResult update(@Valid @RequestBody UpdateSysUserGroupVo vo) { + + sysUserGroupService.update(vo); + + sysUserGroupService.cleanCacheByKey(vo.getId()); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserRoleController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserRoleController.java new file mode 100644 index 0000000..dab3100 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysUserRoleController.java @@ -0,0 +1,99 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import com.lframework.starter.web.inner.bo.system.user.QueryUserRoleBo; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import com.lframework.starter.web.inner.vo.system.role.QuerySysRoleVo; +import com.lframework.starter.web.inner.vo.system.user.SysUserRoleSettingVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 用户授权 + * + * @author zmj + */ +@Api(tags = "用户授权") +@Validated +@RestController +@RequestMapping("/system/user/role") +public class SysUserRoleController extends DefaultBaseController { + + @Autowired + private SysRoleService sysRoleService; + + @Autowired + private SysUserRoleService sysUserRoleService; + + /** + * 查询角色列表 + */ + @ApiOperation("查询角色列表") + @ApiImplicitParams({@ApiImplicitParam(value = "用户ID", name = "userId", paramType = "query")}) + @HasPermission({"system:user:permission"}) + @GetMapping("/roles") + public InvokeResult> roles(String userId) { + + List results = CollectionUtil.emptyList(); + //查询所有角色 + QuerySysRoleVo sysRoleVo = new QuerySysRoleVo(); + sysRoleVo.setAvailable(Boolean.TRUE); + List allRole = sysRoleService.query(sysRoleVo); + if (!CollectionUtil.isEmpty(allRole)) { + if (!SecurityUtil.getCurrentUser().isAdmin()) { + allRole = allRole.stream() + .filter(t -> !SecurityConstants.PERMISSION_ADMIN_NAME.equals(t.getPermission())) + .collect( + Collectors.toList()); + } + results = allRole.stream().map(QueryUserRoleBo::new).collect(Collectors.toList()); + + if (!StringUtil.isBlank(userId)) { + List menus = sysRoleService.getByUserId(userId); + if (!CollectionUtil.isEmpty(menus)) { + //当用户角色存在时,设置已选择属性 + for (QueryUserRoleBo result : results) { + result.setSelected( + menus.stream().anyMatch(t -> StringUtil.equals(t.getId(), result.getId()))); + } + } + } + } + + return InvokeResultBuilder.success(results); + } + + /** + * 用户授权 + */ + @ApiOperation("用户授权") + @HasPermission({"system:user:permission"}) + @PostMapping("/setting") + public InvokeResult setting(@Valid @RequestBody SysUserRoleSettingVo vo) { + + sysUserRoleService.setting(vo); + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/TenantController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/TenantController.java new file mode 100644 index 0000000..7302be0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/TenantController.java @@ -0,0 +1,143 @@ +package com.lframework.starter.web.inner.controller.system; + +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.utils.EncryptUtil; +import com.lframework.starter.web.inner.bo.system.tenant.GetTenantBo; +import com.lframework.starter.web.inner.bo.system.tenant.QueryTenantBo; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.service.TenantService; +import com.lframework.starter.web.inner.vo.system.tenant.CreateTenantVo; +import com.lframework.starter.web.inner.vo.system.tenant.QueryTenantVo; +import com.lframework.starter.web.inner.vo.system.tenant.UpdateTenantVo; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.security.HasPermission; +import com.lframework.starter.web.core.event.ReloadTenantEvent; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.controller.DefaultBaseController; +import com.lframework.starter.web.core.components.resp.InvokeResult; +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import java.util.stream.Collectors; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 租户管理 + * + * @author zmj + */ +@Slf4j +@Api(tags = "租户管理") +@Validated +@RestController +@RequestMapping("/system/tenant") +public class TenantController extends DefaultBaseController { + + @Autowired + private TenantService tenantService; + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission(value = {"system:tenant:query", "system:tenant:add", + "system:tenant:modify"}) + @GetMapping("/query") + public InvokeResult> query(@Valid QueryTenantVo vo) { + + PageResult pageResult = tenantService.query(getPageIndex(vo), + getPageSize(vo), vo); + + List datas = pageResult.getDatas(); + List results = datas.stream().map(QueryTenantBo::new) + .collect(Collectors.toList()); + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + /** + * 查询详情 + */ + @ApiOperation("查询详情") + @ApiImplicitParam(value = "ID", name = "id", paramType = "query", required = true) + @HasPermission(value = {"system:tenant:query", "system:tenant:add", + "system:tenant:modify"}) + @GetMapping + public InvokeResult get(@NotNull(message = "ID不能为空!") Integer id) { + + Tenant data = tenantService.findById(id); + if (data == null) { + throw new DefaultClientException("租户不存在!"); + } + + GetTenantBo result = new GetTenantBo(data); + + return InvokeResultBuilder.success(result); + } + + /** + * 新增租户 + */ + @ApiOperation("新增租户") + @HasPermission(value = {"system:tenant:add"}) + @PostMapping + public InvokeResult create(@Valid CreateTenantVo vo) { + + Integer tenantId = tenantService.create(vo); + + try { + ReloadTenantEvent event = new ReloadTenantEvent(this, tenantId, vo.getJdbcUrl(), + vo.getJdbcUsername(), vo.getJdbcPassword()); + ApplicationUtil.publishEvent(event); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultClientException( + "动态加载租户数据源失败,请检查配置项!注意:虽然加载数据源失败,但是租户已经新增,请勿重复新增!"); + } + + return InvokeResultBuilder.success(); + } + + /** + * 修改租户 + */ + @ApiOperation("修改租户") + @HasPermission(value = {"system:tenant:modify"}) + @PutMapping + public InvokeResult update(@Valid UpdateTenantVo vo) { + + tenantService.update(vo); + + tenantService.cleanCacheByKey(vo.getId()); + + if (StringUtil.isNotBlank(vo.getJdbcUrl()) || StringUtil.isNotBlank(vo.getJdbcUsername()) + || StringUtil.isNotBlank(vo.getJdbcPassword())) { + // 这里不走缓存 + Tenant tenant = tenantService.getById(vo.getId()); + try { + ReloadTenantEvent event = new ReloadTenantEvent(this, tenant.getId(), tenant.getJdbcUrl(), + tenant.getJdbcUsername(), EncryptUtil.decrypt(tenant.getJdbcPassword())); + ApplicationUtil.publishEvent(event); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new DefaultClientException( + "动态加载租户数据源失败,请检查配置项!"); + } + } + + return InvokeResultBuilder.success(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/dic/city/DicCityDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/dic/city/DicCityDto.java new file mode 100644 index 0000000..64f16cb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/dic/city/DicCityDto.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.inner.dto.dic.city; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class DicCityDto implements BaseDto, Serializable { + + public static final String CACHE_NAME = "DicCityDto"; + + public static final String SELECTOR_CACHE_NAME = "DicCitySelectorDto"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 父级ID + */ + private String parentId; + + /** + * 层级 + */ + private Integer level; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysMailMessageDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysMailMessageDto.java new file mode 100644 index 0000000..3dbee01 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysMailMessageDto.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.dto.message; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +@Data +public class SysMailMessageDto implements BaseDto, Serializable { + + /** + * 接收邮件列表 + */ + private List mailList; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 业务键 + */ + private String bizKey; + + /** + * 创建人ID 如果是空表示由系统自动发起 + */ + private String createUserId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysNoticeTaskDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysNoticeTaskDto.java new file mode 100644 index 0000000..d4c45da --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysNoticeTaskDto.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.inner.dto.message; + +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.inner.dto.system.notice.QuerySysNoticeByUserDto; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysNoticeTaskDto extends BaseBo implements BaseDto, + Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 是否已读 + */ + @ApiModelProperty("是否已读") + private Boolean readed; + + /** + * 发布时间 + */ + @ApiModelProperty("发布时间") + private String publishTime; + + public SysNoticeTaskDto(QuerySysNoticeByUserDto dto) { + super(dto); + } + + @Override + protected void afterInit(QuerySysNoticeByUserDto dto) { + this.publishTime = DateUtil.formatDateTime(dto.getPublishTime()); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysSiteMessageDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysSiteMessageDto.java new file mode 100644 index 0000000..08df175 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/SysSiteMessageDto.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.dto.message; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +@Data +public class SysSiteMessageDto implements BaseDto, Serializable { + + /** + * 接收邮件列表 + */ + private List userIdList; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 业务键 + */ + private String bizKey; + + /** + * 创建人ID 如果是空表示由系统自动发起 + */ + private String createUserId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/site/SiteMessageDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/site/SiteMessageDto.java new file mode 100644 index 0000000..436bbf1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/message/site/SiteMessageDto.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.inner.dto.message.site; + +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * @author zmj + * @since 2022/8/18 + */ +@Data +public class SiteMessageDto extends BaseBo implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 内容 + */ + @ApiModelProperty("内容") + private String content; + + public SiteMessageDto(SysSiteMessage dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyDto.java new file mode 100644 index 0000000..6fc801d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyDto.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.dto.notify; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysNotifyDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 动态参数 + */ + private Object variables; + + /** + * 业务类型 + */ + private Integer bizType; + + /** + * 通知组ID + */ + private String notifyGroupId; + + /** + * 创建人ID 如果是空表示由系统自动发起 + */ + private String createUserId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyParamsDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyParamsDto.java new file mode 100644 index 0000000..c1bddd8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/notify/SysNotifyParamsDto.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.inner.dto.notify; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysNotifyParamsDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 动态参数 + */ + private Object variables; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/order/ApprovePassOrderDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/order/ApprovePassOrderDto.java new file mode 100644 index 0000000..f169371 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/order/ApprovePassOrderDto.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.dto.order; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class ApprovePassOrderDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 业务单据ID + */ + private String id; + + /** + * 单据总金额 + */ + private BigDecimal totalAmount; + + /** + * 审核时间 + */ + private LocalDateTime approveTime = LocalDateTime.now(); + + /** + * 单据类型 + */ + private OrderType orderType; + + public enum OrderType { + PURCHASE_ORDER, PURCHASE_RETURN, SALE_ORDER, SALE_RETURN, RETAIL_OUT_SHEET, RETAIL_RETURN + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/qrtz/QrtzDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/qrtz/QrtzDto.java new file mode 100644 index 0000000..0fac0ad --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/qrtz/QrtzDto.java @@ -0,0 +1,78 @@ +package com.lframework.starter.web.inner.dto.qrtz; + +import com.lframework.starter.web.inner.enums.system.QrtzJobType; +import com.lframework.starter.web.inner.enums.system.TriggerState; +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.util.List; +import lombok.Data; + +/** + * @author zmj + * @since 2022/8/20 + */ +@Data +public class QrtzDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + private String name; + + /** + * 分组 + */ + private String group; + + /** + * 租户ID + */ + private Integer tenantId; + + /** + * 备注 + */ + private String description; + + /** + * 执行类名 + */ + private String targetClassName; + + /** + * 执行方法名 + */ + private String targetMethodName; + + /** + * 执行参数类型 + */ + private List targetParamTypes; + + /** + * 执行参数 + */ + private List targetParams; + + /** + * 脚本 + */ + private String script; + + /** + * 任务类型 + */ + private QrtzJobType jobType; + + /** + * Cron表达式 + */ + private String cron; + + /** + * 状态 + */ + private TriggerState state; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/stock/ProductStockChangeDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/stock/ProductStockChangeDto.java new file mode 100644 index 0000000..b952cc7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/stock/ProductStockChangeDto.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.inner.dto.stock; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class ProductStockChangeDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 仓库ID + */ + private String scId; + + /** + * 商品ID + */ + private String productId; + + /** + * 变动数量 + */ + private Integer num; + + /** + * 含税变动金额 + */ + private BigDecimal taxAmount; + + /** + * 当前含税均价 + */ + private BigDecimal curTaxPrice; + + /** + * 当前库存数量 + */ + private Integer curStockNum; + + /** + * 生成时间 + */ + private LocalDateTime createTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/LoginDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/LoginDto.java new file mode 100644 index 0000000..7e71321 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/LoginDto.java @@ -0,0 +1,53 @@ +package com.lframework.starter.web.inner.dto.system; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.util.Set; +import lombok.Data; + +/** + * 用户登录Dto + * + * @author zmj + */ +@Data +public class LoginDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * Token + */ + private String token; + + /** + * 用户信息 + */ + private UserInfoDto user; + + /** + * 角色 + */ + private Set roles; + + public LoginDto(String token, String name, Set roles) { + + this.token = token; + this.setRoles(roles); + + UserInfoDto userInfo = new UserInfoDto(); + userInfo.setName(name); + this.setUser(userInfo); + } + + @Data + public static class UserInfoDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 姓名 + */ + private String name; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuDto.java new file mode 100644 index 0000000..43dd12f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuDto.java @@ -0,0 +1,82 @@ +package com.lframework.starter.web.inner.dto.system; + +import com.lframework.starter.web.core.dto.BaseDto; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * 菜单Dto + * + * @author zmj + */ +@Data +public class MenuDto implements BaseDto, Serializable { + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 菜单名称 + */ + @ApiModelProperty("菜单名称") + private String name; + + /** + * 路径 + */ + @ApiModelProperty("路径") + private String path; + + /** + * 是否隐藏 + */ + @ApiModelProperty("是否隐藏") + private Boolean hidden; + + /** + * 类型 0-目录 1-功能菜单 2-权限 + */ + @ApiModelProperty("类型 0-目录 1-功能菜单 2-权限") + private Integer display; + + /** + * 组件类型 + */ + @ApiModelProperty("组件类型") + private Integer componentType; + + /** + * 组件 + */ + @ApiModelProperty("组件") + private String component; + + /** + * 自定义请求参数 + */ + @ApiModelProperty("自定义请求参数") + private String requestParam; + + + /** + * meta + */ + @ApiModelProperty("meta") + private MenuMetaDto meta; + + /** + * 父节点ID + */ + @ApiModelProperty("父节点ID") + private String parentId; + + /** + * 是否收藏 + */ + @ApiModelProperty("是否收藏") + private Boolean isCollect = Boolean.FALSE; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuMetaDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuMetaDto.java new file mode 100644 index 0000000..dd53e3f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/MenuMetaDto.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.inner.dto.system; + +import com.lframework.starter.web.core.dto.BaseDto; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * 菜单Meta Dto + * + * @author zmj + */ +@Data +public class MenuMetaDto implements BaseDto, Serializable { + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 是否不缓存 + */ + @ApiModelProperty("是否不缓存") + private Boolean noCache; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/UserInfoDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/UserInfoDto.java new file mode 100644 index 0000000..c24d3c7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/UserInfoDto.java @@ -0,0 +1,51 @@ +package com.lframework.starter.web.inner.dto.system; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import lombok.Data; + +/** + * 用户信息 Dto + * + * @author zmj + */ +@Data +public class UserInfoDto implements BaseDto, Serializable { + + public static final String CACHE_NAME = "UserInfoDto"; + + /** + * ID + */ + private String id; + + /** + * 登录名 + */ + private String username; + + /** + * 编号 + */ + private String code; + + /** + * 姓名 + */ + private String name; + + /** + * 邮箱 + */ + private String email; + + /** + * 联系电话 + */ + private String telephone; + + /** + * 性别 + */ + private Integer gender; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/QuerySysNoticeByUserDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/QuerySysNoticeByUserDto.java new file mode 100644 index 0000000..b527ad8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/QuerySysNoticeByUserDto.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.dto.system.notice; + +import com.lframework.starter.web.core.dto.BaseDto; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * @author zmj + * @since 2022/8/19 + */ +@Data +public class QuerySysNoticeByUserDto implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 标题 + */ + private String title; + + /** + * 是否已读 + */ + private Boolean readed; + + /** + * 发布时间 + */ + private LocalDateTime publishTime; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/SysNoticeDto.java b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/SysNoticeDto.java new file mode 100644 index 0000000..da62ae6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/dto/system/notice/SysNoticeDto.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.inner.dto.system.notice; + +import com.lframework.starter.web.inner.entity.SysNotice; +import com.lframework.starter.web.core.bo.BaseBo; +import com.lframework.starter.web.core.dto.BaseDto; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +/** + * @author zmj + * @since 2022/8/18 + */ +@Data +public class SysNoticeDto extends BaseBo implements BaseDto, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 内容 + */ + @ApiModelProperty("内容") + private String content; + + public SysNoticeDto(SysNotice dto) { + super(dto); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/DicCity.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/DicCity.java new file mode 100644 index 0000000..64aebb1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/DicCity.java @@ -0,0 +1,51 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-07-07 + */ +@Data +@TableName("dic_city") +public class DicCity extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 父级ID + */ + private String parentId; + + /** + * 层级 + */ + private Integer level; + + /** + * 状态 + */ + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/OpLogs.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/OpLogs.java new file mode 100644 index 0000000..848ecab --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/OpLogs.java @@ -0,0 +1,66 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 操作日志实体类 + *

+ * + * @author zmj + */ +@Data +@TableName("op_logs") +public class OpLogs extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 日志名称 + */ + private String name; + + /** + * 类别 + */ + private Integer logType; + + /** + * IP地址 + */ + private String ip; + + /** + * 补充信息 + */ + private String extra; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/OrderTimeLine.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/OrderTimeLine.java new file mode 100644 index 0000000..cea68fe --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/OrderTimeLine.java @@ -0,0 +1,64 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-07-07 + */ +@Data +@TableName("tbl_order_time_line") +public class OrderTimeLine extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "OrderTimeLine"; + + /** + * ID + */ + private String id; + + /** + * 订单ID + */ + private String orderId; + + /** + * 描述内容 + */ + private String content; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 业务类型 + */ + private Integer bizType; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/RecursionMapping.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/RecursionMapping.java new file mode 100644 index 0000000..0237290 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/RecursionMapping.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * 递归映射 + *

+ * + * @author zmj + * @since 2021-06-27 + */ +@Data +@TableName("recursion_mapping") +public class RecursionMapping extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 节点ID + */ + private String nodeId; + + /** + * 节点类型 + */ + private Integer nodeType; + + /** + * 从顶点到当前结点的路径,用,分割 + */ + private String path; + + /** + * 节点层级 + */ + private Integer level; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SecurityUploadRecord.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SecurityUploadRecord.java new file mode 100644 index 0000000..d931e87 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SecurityUploadRecord.java @@ -0,0 +1,54 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.inner.enums.system.UploadType; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 文件收纳箱 + *

+ */ +@Data +@TableName("tbl_security_upload_record") +public class SecurityUploadRecord extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + /** + * ID + */ + private String id; + + /** + * 上传方式 + */ + private UploadType uploadType; + + /** + * 文件路径 + */ + private String filePath; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDic.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDic.java new file mode 100644 index 0000000..9d480c1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDic.java @@ -0,0 +1,81 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 数据字典 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_data_dic") +public class SysDataDic extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysDataDic"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 分类ID + */ + private String categoryId; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicCategory.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicCategory.java new file mode 100644 index 0000000..dcb45e3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicCategory.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 数据字典分类 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_data_dic_category") +public class SysDataDicCategory extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysDataDicCategory"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicItem.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicItem.java new file mode 100644 index 0000000..407bcfe --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataDicItem.java @@ -0,0 +1,86 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 数据字典值 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_data_dic_item") +public class SysDataDicItem extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysDataDicItem"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 字典ID + */ + private String dicId; + + /** + * 排序编号 + */ + private Integer orderNo; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionData.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionData.java new file mode 100644 index 0000000..fc39300 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionData.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionDataBizType; +import lombok.Data; + +/** + *

+ * 数据权限数据 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_data_permission_data") +public class SysDataPermissionData extends BaseEntity implements BaseDto { + + /** + * ID + */ + private String id; + + /** + * 业务ID + */ + private String bizId; + + /** + * 业务类型 + */ + private SysDataPermissionDataBizType bizType; + + /** + * 权限类型 + */ + private Integer permissionType; + + /** + * 权限 + */ + private String permission; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionModelDetail.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionModelDetail.java new file mode 100644 index 0000000..40359b1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDataPermissionModelDetail.java @@ -0,0 +1,67 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailInputType; +import lombok.Data; + +/** + *

+ * 数据权限模型明细 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_data_permission_model_detail") +public class SysDataPermissionModelDetail extends BaseEntity implements BaseDto { + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 模型ID + */ + private Integer modelId; + + /** + * 条件 + */ + private String conditionType; + + /** + * 输入类型 + */ + private SysDataPermissionModelDetailInputType inputType; + + /** + * 表名 + */ + private String tableName; + + /** + * 字段名 + */ + private String columnName; + + /** + * 前段枚举名 + */ + private String enumName; + + /** + * SQL + */ + private String sqlValue; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDept.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDept.java new file mode 100644 index 0000000..c5c5a64 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysDept.java @@ -0,0 +1,100 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 部门 + *

+ * + * @author zmj + * @since 2021-06-26 + */ +@Data +@TableName("sys_dept") +public class SysDept extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysDept"; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 简称 + */ + private String shortName; + + /** + * 父级ID + */ + @TableField + private String parentId; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysGenerateCode.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysGenerateCode.java new file mode 100644 index 0000000..f96ec58 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysGenerateCode.java @@ -0,0 +1,39 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * 编号规则 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_generate_code") +public class SysGenerateCode extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysGenerateCode"; + + private static final long serialVersionUID = 1L; + /** + * ID + */ + @TableId(value = "id", type = IdType.INPUT) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 配置信息(JSONArray) + */ + private String configStr; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMailMessage.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMailMessage.java new file mode 100644 index 0000000..7f57fa7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMailMessage.java @@ -0,0 +1,92 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.inner.enums.system.SysMailMessageSendStatus; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 邮件消息 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_mail_message") +public class SysMailMessage extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysMailMessage"; + + /** + * ID + */ + private String id; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 邮箱 + */ + private String mail; + + /** + * 业务键 + */ + private String bizKey; + + /** + * 发送状态 + */ + private SysMailMessageSendStatus sendStatus; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMenu.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMenu.java new file mode 100644 index 0000000..63ab7d1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysMenu.java @@ -0,0 +1,149 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.inner.enums.system.SysMenuComponentType; +import com.lframework.starter.web.inner.enums.system.SysMenuDisplay; +import com.lframework.starter.web.core.dto.BaseDto; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 系统菜单 + *

+ * + * @author zmj + * @since 2021-05-10 + */ +@Data +@TableName("sys_menu") +public class SysMenu extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysMenu"; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称(前端使用) + */ + private String name; + + /** + * 标题 + */ + private String title; + + /** + * 图标 + */ + private String icon; + + /** + * 组件类型 + */ + private SysMenuComponentType componentType; + + /** + * 组件(前端使用) + */ + private String component; + + /** + * 自定义请求参数 + */ + private String requestParam; + + /** + * 父级ID + */ + private String parentId; + + /** + * 路由路径(前端使用) + */ + private String path; + + /** + * 是否缓存(前端使用) + */ + private Boolean noCache; + + /** + * 类型 0-目录 1-菜单 2-功能 + */ + private SysMenuDisplay display; + + /** + * 是否隐藏(前端使用) + */ + private Boolean hidden; + + /** + * 权限 + */ + private String permission; + + /** + * 是否特殊菜单 + */ + private Boolean isSpecial; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModule.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModule.java new file mode 100644 index 0000000..31e5ad8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModule.java @@ -0,0 +1,78 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 系统模块 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_module") +public class SysModule extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysModule"; + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModuleTenant.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModuleTenant.java new file mode 100644 index 0000000..3a52690 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysModuleTenant.java @@ -0,0 +1,42 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 租户和系统模块关系表 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_module_tenant") +public class SysModuleTenant extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysModuleTenant"; + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 模块ID + */ + private Integer moduleId; + + /** + * 租户ID + */ + private Integer tenantId; + + /** + * 过期时间 + */ + private LocalDateTime expireTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotice.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotice.java new file mode 100644 index 0000000..3d08e2c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotice.java @@ -0,0 +1,100 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 系统通知 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_notice") +public class SysNotice extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysNotice"; + private static final long serialVersionUID = 1L; + /** + * ID + */ + private String id; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 状态 + */ + private Boolean available; + + /** + * 是否发布 + */ + private Boolean published; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 已读人数 + */ + private Integer readedNum; + + /** + * 未读人数 + */ + private Integer unReadNum; + + /** + * 发布时间 + */ + private LocalDateTime publishTime; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNoticeLog.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNoticeLog.java new file mode 100644 index 0000000..c89ed24 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNoticeLog.java @@ -0,0 +1,47 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 系统通知记录 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_notice_log") +public class SysNoticeLog extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysNoticeLog"; + private static final long serialVersionUID = 1L; + /** + * ID + */ + private String id; + + /** + * 标题 + */ + private String noticeId; + + /** + * 用户ID + */ + private String userId; + + /** + * 是否已读 + */ + private Boolean readed; + + /** + * 已读时间 + */ + private LocalDateTime readTime; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroup.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroup.java new file mode 100644 index 0000000..91c9b1f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroup.java @@ -0,0 +1,92 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.inner.enums.system.SysNotifyReceiverType; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 消息通知组 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_notify_group") +public class SysNotifyGroup extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysNotifyGroup"; + + /** + * ID + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 接收者类型 + */ + private SysNotifyReceiverType receiverType; + + /** + * 消息类型 + */ + private String messageType; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroupReceiver.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroupReceiver.java new file mode 100644 index 0000000..e6724c3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysNotifyGroupReceiver.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * 消息通知组-接收者关系表 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_notify_group_receiver") +public class SysNotifyGroupReceiver extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 消息通知组ID + */ + private String groupId; + + /** + * 接收者ID + */ + private String receiverId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysOpenDomain.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysOpenDomain.java new file mode 100644 index 0000000..d974914 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysOpenDomain.java @@ -0,0 +1,95 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 开放域 + *

+ * + * @author zmj + * @since 2021-07-02 + */ +@Data +@TableName("sys_open_domain") +public class SysOpenDomain extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysOpenDomain"; + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private String id; + + /** + * 名称 + */ + private String name; + + /** + * API密钥 + */ + private String apiSecret; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 租户ID + */ + private Integer tenantId; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysParameter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysParameter.java new file mode 100644 index 0000000..82f5256 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysParameter.java @@ -0,0 +1,83 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 系统参数 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_parameter") +public class SysParameter extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysParameter"; + private static final long serialVersionUID = 1L; + /** + * ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 键 + */ + private String pmKey; + + /** + * 值 + */ + private String pmValue; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRole.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRole.java new file mode 100644 index 0000000..dc2a18f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRole.java @@ -0,0 +1,97 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-07-02 + */ +@Data +@TableName("sys_role") +public class SysRole extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysRole"; + + /** + * ID + */ + private String id; + + /** + * 分类ID + */ + private String categoryId; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 权限 + */ + private String permission; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleCategory.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleCategory.java new file mode 100644 index 0000000..a82d631 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleCategory.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 角色分类 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_role_category") +public class SysRoleCategory extends BaseEntity implements BaseDto { + + public static final String CACHE_NAME = "SysRoleCategory"; + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleMenu.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleMenu.java new file mode 100644 index 0000000..4dfcb3e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysRoleMenu.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-07-04 + */ +@Data +@TableName("sys_role_menu") +public class SysRoleMenu extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 角色ID + */ + private String roleId; + + /** + * 菜单ID + */ + private String menuId; + + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysSiteMessage.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysSiteMessage.java new file mode 100644 index 0000000..182d092 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysSiteMessage.java @@ -0,0 +1,96 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 站内信 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_site_message") +public class SysSiteMessage extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysSiteMessage"; + + /** + * ID + */ + private String id; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 接收人ID + */ + private String receiverId; + + /** + * 业务键 + */ + private String bizKey; + + /** + * 是否已读 + */ + private Boolean readed; + + /** + * 已读时间 + */ + private LocalDateTime readTime; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUser.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUser.java new file mode 100644 index 0000000..6962c59 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUser.java @@ -0,0 +1,118 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import com.lframework.starter.web.inner.enums.system.Gender; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-07-04 + */ +@Data +@TableName("sys_user") +public class SysUser extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysUser"; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 姓名 + */ + private String name; + + /** + * 用户名 + */ + private String username; + + /** + * 密码 + */ + private String password; + + /** + * 邮箱 + */ + private String email; + + /** + * 联系电话 + */ + private String telephone; + + /** + * 性别 0-未知 1-男 2-女 + */ + private Gender gender; + + /** + * 状态 1-在用 0停用 + */ + private Boolean available; + + /** + * 锁定状态 + */ + private Boolean lockStatus; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserDept.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserDept.java new file mode 100644 index 0000000..51f4028 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserDept.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-07-04 + */ +@Data +@TableName("sys_user_dept") +public class SysUserDept extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysUserDept"; + + /** + * ID + */ + private String id; + + /** + * 用户ID + */ + private String userId; + + /** + * 部门ID + */ + private String deptId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroup.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroup.java new file mode 100644 index 0000000..eb50795 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroup.java @@ -0,0 +1,86 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 用户组 + *

+ * + * @author zmj + */ +@Data +@TableName("sys_user_group") +public class SysUserGroup extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "SysUserGroup"; + + /** + * ID + */ + private String id; + + /** + * 编号 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 状态 + */ + private Boolean available; + + /** + * 备注 + */ + private String description; + + /** + * 创建人ID 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createById; + + /** + * 创建人 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改人 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 修改人ID 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateById; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroupDetail.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroupDetail.java new file mode 100644 index 0000000..31ff3e9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserGroupDetail.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + */ +@Data +@TableName("sys_user_group_detail") +public class SysUserGroupDetail extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 用户ID + */ + private String userId; + + /** + * 用户组ID + */ + private String groupId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserRole.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserRole.java new file mode 100644 index 0000000..6fbfcfa --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserRole.java @@ -0,0 +1,36 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +/** + *

+ * + *

+ * + * @author zmj + * @since 2021-07-04 + */ +@Data +@TableName("sys_user_role") +public class SysUserRole extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 用户ID + */ + private String userId; + + /** + * 角色ID + */ + private String roleId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserTelephone.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserTelephone.java new file mode 100644 index 0000000..54766d7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/SysUserTelephone.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import lombok.Data; + +@Data +@TableName("sys_user_telephone") +public class SysUserTelephone extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private String id; + + /** + * 手机号 + */ + private String telephone; + + /** + * 用户ID + */ + private String userId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/entity/Tenant.java b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/Tenant.java new file mode 100644 index 0000000..2ddb11f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/entity/Tenant.java @@ -0,0 +1,71 @@ +package com.lframework.starter.web.inner.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.entity.BaseEntity; +import java.time.LocalDateTime; +import lombok.Data; + +/** + *

+ * 租户 + *

+ * + * @author zmj + * @since 2023-03-05 + */ +@Data +@TableName("tenant") +public class Tenant extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "Tenant"; + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 名称 + */ + private String name; + + /** + * JdbcUrl + */ + private String jdbcUrl; + + /** + * Jdbc用户名 + */ + private String jdbcUsername; + + /** + * Jdbc密码 + */ + private String jdbcPassword; + + /** + * 状态 + */ + private Boolean available; + + /** + * 创建时间 新增时赋值 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 修改时间 新增和修改时赋值 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Available.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Available.java new file mode 100644 index 0000000..277617a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Available.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum Available implements BaseEnum { + ENABLE(Boolean.TRUE, "启用"), UNABLE(Boolean.FALSE, "停用"); + + + @EnumValue + private final Boolean code; + + private final String desc; + + Available(Boolean code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Boolean getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Gender.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Gender.java new file mode 100644 index 0000000..5708045 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/Gender.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum Gender implements BaseEnum { + UNKNOWN(0, "未知"), MAN(1, "男"), FEMALE(2, "女"); + + @EnumValue + private final Integer code; + + private final String desc; + + Gender(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/NodeType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/NodeType.java new file mode 100644 index 0000000..79759b2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/NodeType.java @@ -0,0 +1,7 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.lframework.starter.web.core.enums.BaseEnum; + +public interface NodeType extends BaseEnum { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/QrtzJobType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/QrtzJobType.java new file mode 100644 index 0000000..cd00bb8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/QrtzJobType.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +/** + * @author zmj + * @since 2022/8/20 + */ +public enum QrtzJobType implements BaseEnum { + EXCUTE_CLASS(1, "指定类"), + GROOVY(2, "Groovy脚本"); + + @EnumValue + private final Integer code; + + private final String desc; + + QrtzJobType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + return this.code; + } + + @Override + public String getDesc() { + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionDataBizType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionDataBizType.java new file mode 100644 index 0000000..40d7f41 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionDataBizType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysDataPermissionDataBizType implements BaseEnum { + ROLE(0, "角色"), DEPT(1, "部门"), USER(2, "用户"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysDataPermissionDataBizType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailCalcType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailCalcType.java new file mode 100644 index 0000000..fab65b9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailCalcType.java @@ -0,0 +1,39 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysDataPermissionModelDetailCalcType implements BaseEnum { + + AND(1, "AND", "并且"), OR(2, "OR", "或者"); + + @EnumValue + private final Integer code; + + private String operation; + + private final String desc; + + SysDataPermissionModelDetailCalcType(Integer code, String operation, String desc) { + + this.code = code; + this.operation = operation; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } + + public String getOperation() { + return operation; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailConditionType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailConditionType.java new file mode 100644 index 0000000..7f6d27d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailConditionType.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysDataPermissionModelDetailConditionType implements BaseEnum { + + EQ(0, "=", "等于"), GT(1, ">", "大于"), GE(2, ">=", "大于或等于"), LT(3, "<", "小于"), LE(4, "<=", + "小于或等于"), NE(5, + "!=", "不等于"), IN(6, "IN", "在列表中"), NOT_IN(7, + "NOT IN", "不在列表中"), LEFT_LIKE(8, "LIKE", "结尾"), RIGHT_LIKE(9, "LIKE", + "开头"), AROUND_LIKE(10, "LIKE", "包含"); + + @EnumValue + private final Integer code; + + private final String operation; + + private final String desc; + + SysDataPermissionModelDetailConditionType(Integer code, String operation, String desc) { + + this.code = code; + this.operation = operation; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } + + public String getOperation() { + return operation; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailInputType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailInputType.java new file mode 100644 index 0000000..56000fa --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailInputType.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysDataPermissionModelDetailInputType implements BaseEnum { + + INPUT(0, "输入框"), SELECT(1, "选择器"), DATE_TIME(2, "日期时间选择器"), DATE(3, + "日期选择器"), SQL(99, "SQL"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysDataPermissionModelDetailInputType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailNodeType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailNodeType.java new file mode 100644 index 0000000..1e4f417 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDataPermissionModelDetailNodeType.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysDataPermissionModelDetailNodeType implements BaseEnum { + + CALC(1, "运算节点"), CONDITION(2, "条件节点"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysDataPermissionModelDetailNodeType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java new file mode 100644 index 0000000..3be544e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.inner.enums.system; + +import java.io.Serializable; +import org.springframework.stereotype.Component; + +@Component +public final class SysDeptNodeType implements NodeType, Serializable { + + private static final long serialVersionUID = 1L; + + @Override + public Integer getCode() { + + return 1; + } + + @Override + public String getDesc() { + + return "部门"; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMailMessageSendStatus.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMailMessageSendStatus.java new file mode 100644 index 0000000..d52666b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMailMessageSendStatus.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysMailMessageSendStatus implements BaseEnum { + + UN_SEND(0, "待发送"), SENDING(1, "发送中"), SENDED(2, "已发送"), FAIL(9, "发送失败"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysMailMessageSendStatus(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuComponentType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuComponentType.java new file mode 100644 index 0000000..33ee322 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuComponentType.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysMenuComponentType implements BaseEnum { + + NORMAL(0, "普通"), CUSTOM_LIST(1, "自定义列表"), CUSTOM_PAGE(3, "自定义页面"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysMenuComponentType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuDisplay.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuDisplay.java new file mode 100644 index 0000000..8b2f17f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysMenuDisplay.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysMenuDisplay implements BaseEnum { + + CATALOG(0, "目录"), FUNCTION(1, "菜单"), PERMISSION(2, "权限"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysMenuDisplay(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyMessageType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyMessageType.java new file mode 100644 index 0000000..8489fb7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyMessageType.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysNotifyMessageType implements BaseEnum { + + SYS(0, "站内信"), EMAIL(1, "邮件"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysNotifyMessageType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyReceiverType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyReceiverType.java new file mode 100644 index 0000000..00bfb14 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysNotifyReceiverType.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum SysNotifyReceiverType implements BaseEnum { + + DEPT(0, "部门及其子部门"), USER(1, "用户"), ROLE(2, "角色"), USER_GROUP(3, "用户组"); + + @EnumValue + private final Integer code; + + private final String desc; + + SysNotifyReceiverType(Integer code, String desc) { + + this.code = code; + this.desc = desc; + } + + @Override + public Integer getCode() { + + return this.code; + } + + @Override + public String getDesc() { + + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/TriggerState.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/TriggerState.java new file mode 100644 index 0000000..bf8a7f7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/TriggerState.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum TriggerState implements BaseEnum { + WAITING("WAITING", "等待执行"), + PAUSED("PAUSED", "暂停执行"), + ACQUIRED("ACQUIRED", "正常执行"), + BLOCKED("BLOCKED", "阻塞"), + ERROR("ERROR", "执行错误"), + COMPLETE("COMPLETE", "执行完毕"), + PAUSED_BLOCKED("PAUSED_BLOCKED", "阻塞暂停"); + + @EnumValue + private final String code; + + private final String desc; + + TriggerState(String code, String desc) { + this.code = code; + this.desc = desc; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDesc() { + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/UploadType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/UploadType.java new file mode 100644 index 0000000..2a279e4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/UploadType.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.enums.system; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.lframework.starter.web.core.enums.BaseEnum; + +public enum UploadType implements BaseEnum { + LOCAL("LOCAL", "本地"), + OSS("OSS", "阿里云OSS"), + COS("COS", "腾讯云COS"), + OBS("OBS", "华为云OBS"); + + @EnumValue + private final String code; + + private final String desc; + + UploadType(String code, String desc) { + this.code = code; + this.desc = desc; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDesc() { + return this.desc; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/AccessDeniedExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/AccessDeniedExceptionConverter.java new file mode 100644 index 0000000..4985546 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/AccessDeniedExceptionConverter.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.AccessDeniedException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; + +/** + * 处理无权限异常 + */ +public class AccessDeniedExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof AccessDeniedException; + } + + @Override + public BaseException convert(Throwable e) { + return new AccessDeniedException(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/BindExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/BindExceptionConverter.java new file mode 100644 index 0000000..48e226c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/BindExceptionConverter.java @@ -0,0 +1,57 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; + +/** + * 处理由于传入方式错误导致的异常 + */ +public class BindExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof BindException; + } + + @Override + public BaseException convert(Throwable e) { + + BindException ex = (BindException) e; + if (ex.getErrorCount() > 0) { + ObjectError objectError = ex.getAllErrors().get(0); + + if (objectError instanceof FieldError && "typeMismatch".equals(objectError.getCode())) { + String fieldName = ((FieldError) objectError).getField(); + + Class targetClazz = ex.getBindingResult().getTarget().getClass(); + + TypeMismatch typeMismatch = null; + try { + typeMismatch = targetClazz.getDeclaredField(fieldName).getAnnotation(TypeMismatch.class); + } catch (NoSuchFieldException exp) { + throw new DefaultSysException(exp.getMessage()); + } + if (typeMismatch != null) { + return new InputErrorException(typeMismatch.message()); + } + } + } + for (ObjectError error : ex.getAllErrors()) { + return new InputErrorException(error.getDefaultMessage()); + } + + return new InputErrorException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ClientExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ClientExceptionConverter.java new file mode 100644 index 0000000..347ffcc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ClientExceptionConverter.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.ClientException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; + +/** + * 处理系统异常 + */ +public class ClientExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof ClientException; + } + + @Override + public BaseException convert(Throwable e) { + return (ClientException) e; + } + + @Override + public int getOrder() { + return SECOND_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ConstraintViolationExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ConstraintViolationExceptionConverter.java new file mode 100644 index 0000000..ac87775 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ConstraintViolationExceptionConverter.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; + +public class ConstraintViolationExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof ConstraintViolationException; + } + + @Override + public BaseException convert(Throwable e) { + ConstraintViolationException ex = (ConstraintViolationException) e; + for (ConstraintViolation constraintViolation : ex.getConstraintViolations()) { + return new InputErrorException(constraintViolation.getMessage()); + } + + return new InputErrorException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ExceptionConverter.java new file mode 100644 index 0000000..d6852fe --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/ExceptionConverter.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; + +public class ExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof Exception; + } + + @Override + public BaseException convert(Throwable e) { + return new DefaultSysException(); + } + + @Override + public int getOrder() { + return LAST_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/FileUploadExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/FileUploadExceptionConverter.java new file mode 100644 index 0000000..656e45b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/FileUploadExceptionConverter.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import org.apache.tomcat.util.http.fileupload.FileUploadException; + +public class FileUploadExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof FileUploadException; + } + + @Override + public BaseException convert(Throwable e) { + return new DefaultClientException("文件上传失败!"); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpMessageNotReadableExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpMessageNotReadableExceptionConverter.java new file mode 100644 index 0000000..6c6ad06 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpMessageNotReadableExceptionConverter.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import org.springframework.http.converter.HttpMessageNotReadableException; + +/** + * 处理由于传入参数类型不匹配导致的异常 + */ +public class HttpMessageNotReadableExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof HttpMessageNotReadableException; + } + + @Override + public BaseException convert(Throwable e) { + return new InputErrorException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpRequestMethodNotSupportedExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpRequestMethodNotSupportedExceptionConverter.java new file mode 100644 index 0000000..dff90a0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/HttpRequestMethodNotSupportedExceptionConverter.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import org.springframework.web.HttpRequestMethodNotSupportedException; + +/** + * 处理由于传入方式错误导致的异常 + */ +public class HttpRequestMethodNotSupportedExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof HttpRequestMethodNotSupportedException; + } + + @Override + public BaseException convert(Throwable e) { + return new DefaultSysException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/MethodArgumentNotValidExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/MethodArgumentNotValidExceptionConverter.java new file mode 100644 index 0000000..a16c10f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/MethodArgumentNotValidExceptionConverter.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.MethodArgumentNotValidException; + +public class MethodArgumentNotValidExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof MethodArgumentNotValidException; + } + + @Override + public BaseException convert(Throwable e) { + MethodArgumentNotValidException ex = (MethodArgumentNotValidException) e; + for (ObjectError error : ex.getBindingResult().getAllErrors()) { + return new InputErrorException(error.getDefaultMessage()); + } + + return new InputErrorException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/NotPermissionExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/NotPermissionExceptionConverter.java new file mode 100644 index 0000000..7e21044 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/NotPermissionExceptionConverter.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import cn.dev33.satoken.exception.NotPermissionException; +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.AccessDeniedException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; + +/** + * 处理无权限异常 + */ +public class NotPermissionExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof NotPermissionException; + } + + @Override + public BaseException convert(Throwable e) { + return new AccessDeniedException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/SysExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/SysExceptionConverter.java new file mode 100644 index 0000000..820d760 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/SysExceptionConverter.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.SysException; +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; + +/** + * 处理系统异常 + */ +public class SysExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof SysException; + } + + @Override + public BaseException convert(Throwable e) { + return new DefaultSysException(); + } + + @Override + public int getOrder() { + return SECOND_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/TypeMismatchExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/TypeMismatchExceptionConverter.java new file mode 100644 index 0000000..43a56da --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/TypeMismatchExceptionConverter.java @@ -0,0 +1,47 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import org.springframework.beans.TypeMismatchException; +import org.springframework.core.MethodParameter; +import org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + +/** + * 处理由于传入参数类型不匹配导致的异常 + */ +public class TypeMismatchExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof TypeMismatchException; + } + + @Override + public BaseException convert(Throwable e) { + MethodParameter methodParameter = null; + if (e instanceof MethodArgumentConversionNotSupportedException) { + methodParameter = ((MethodArgumentConversionNotSupportedException) e).getParameter(); + } else if (e instanceof MethodArgumentTypeMismatchException) { + methodParameter = ((MethodArgumentTypeMismatchException) e).getParameter(); + } + + if (methodParameter != null) { + TypeMismatch typeMismatch = methodParameter.getMethod() + .getParameters()[methodParameter.getParameterIndex()].getAnnotation(TypeMismatch.class); + if (typeMismatch != null) { + return new InputErrorException(typeMismatch.message()); + } + } + + return new InputErrorException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/UnexpectedTypeExceptionConverter.java b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/UnexpectedTypeExceptionConverter.java new file mode 100644 index 0000000..cd70c0a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/handlers/exception/UnexpectedTypeExceptionConverter.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.inner.handlers.exception; + + +import com.lframework.starter.common.exceptions.BaseException; +import com.lframework.starter.common.exceptions.impl.InputErrorException; +import com.lframework.starter.web.core.handlers.exception.WebExceptionConverter; +import javax.validation.UnexpectedTypeException; + +/** + * 处理传入参数类型转换错误异常 + */ +public class UnexpectedTypeExceptionConverter implements WebExceptionConverter { + + @Override + public boolean isMatch(Throwable e) { + return e instanceof UnexpectedTypeException; + } + + @Override + public BaseException convert(Throwable e) { + + return new InputErrorException(); + } + + @Override + public int getOrder() { + return THIRD_ORDER; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/DefaultUserDetailsService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/DefaultUserDetailsService.java new file mode 100644 index 0000000..eec0a61 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/DefaultUserDetailsService.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.inner.impl; + +import com.lframework.starter.web.core.components.security.AbstractUserDetailsService; +import com.lframework.starter.web.inner.mappers.UserDetailsMapper; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * UserDetaisService默认实现 + * + * @author zmj + */ +@Service +public class DefaultUserDetailsService extends AbstractUserDetailsService { + + @Autowired + private UserDetailsMapper userDetailsMapper; + + @Override + public AbstractUserDetails findByUsername(String username) { + + AbstractUserDetails user = userDetailsMapper.findByUsername(username); + + return user; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/DicCityServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/DicCityServiceImpl.java new file mode 100644 index 0000000..453c7d6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/DicCityServiceImpl.java @@ -0,0 +1,62 @@ +package com.lframework.starter.web.inner.impl; + +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.dto.dic.city.DicCityDto; +import com.lframework.starter.web.inner.entity.DicCity; +import com.lframework.starter.web.inner.mappers.DicCityMapper; +import com.lframework.starter.web.inner.service.DicCityService; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +@Service +public class DicCityServiceImpl extends BaseMpServiceImpl implements + DicCityService { + + @Cacheable(value = DicCityDto.SELECTOR_CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List getAll() { + + return getBaseMapper().getAll(); + } + + @Cacheable(value = DicCityDto.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public DicCityDto findById(String id) { + + return getBaseMapper().findById(id); + } + + @Override + public List getChainById(String id) { + + DicCityService thisService = getThis(this.getClass()); + List all = thisService.getAll(); + List results = new ArrayList<>(); + DicCityDto current = all.stream().filter(t -> t.getId().equals(id)).findFirst().orElse(null); + if (current == null) { + return results; + } + + while (current != null) { + results.add(current); + + String pId = current.getParentId(); + current = all.stream().filter(t -> t.getId().equals(pId)).findFirst().orElse(null); + } + + Collections.reverse(results); + + return results; + } + + @CacheEvict(value = DicCityDto.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/GenerateCodeServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/GenerateCodeServiceImpl.java new file mode 100644 index 0000000..565ef65 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/GenerateCodeServiceImpl.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.impl; + +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.components.generator.GenerateCodeFactory; +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.dto.GenerateCodeDto; +import com.lframework.starter.web.inner.mappers.GenerateCodeMapper; +import com.lframework.starter.web.inner.service.GenerateCodeService; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +@Service +public class GenerateCodeServiceImpl implements GenerateCodeService { + + @Autowired + private GenerateCodeMapper generateCodeMapper; + + @Override + public String generate(Integer id) { + GenerateCodeDto sysGenerateCode = generateCodeMapper.findById(id); + + GenerateCodeService thisService = ApplicationUtil.getBean(this.getClass()); + List ruleList = thisService.getRules(sysGenerateCode); + + return GenerateCodeFactory.generate(ruleList); + } + + @Cacheable(value = GenerateCodeDto.CACHE_NAME, key = "@cacheVariables.tenantId() + #entity.id", unless = "#result == null") + @Override + public List getRules(GenerateCodeDto entity) { + return GenerateCodeFactory.getRules(entity.getConfigStr()); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/impl/MailServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/MailServiceImpl.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/impl/MailServiceImpl.java rename to web-starter/src/main/java/com/lframework/starter/web/inner/impl/MailServiceImpl.java index 0c442e0..6c91ec1 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/impl/MailServiceImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/MailServiceImpl.java @@ -1,8 +1,8 @@ -package com.lframework.starter.web.impl; +package com.lframework.starter.web.inner.impl; import cn.hutool.extra.mail.MailAccount; import com.lframework.starter.common.utils.MailUtil; -import com.lframework.starter.web.service.MailService; +import com.lframework.starter.web.inner.service.MailService; import java.io.File; import java.util.Collections; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/OpLogsServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/OpLogsServiceImpl.java new file mode 100644 index 0000000..87e817f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/OpLogsServiceImpl.java @@ -0,0 +1,120 @@ +package com.lframework.starter.web.inner.impl; + +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.entity.OpLogs; +import com.lframework.starter.web.inner.mappers.OpLogsMapper; +import com.lframework.starter.web.inner.service.OpLogsService; +import com.lframework.starter.web.inner.vo.oplogs.CreateOpLogsVo; +import com.lframework.starter.web.inner.vo.oplogs.QueryOpLogsVo; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * 操作日志Service实现 + * + * @author zmj + */ +@Slf4j +@Service +public class OpLogsServiceImpl extends BaseMpServiceImpl + implements OpLogsService { + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateOpLogsVo vo) { + + OpLogs record = this.doCreate(vo); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void create(Collection list) { + if (CollectionUtil.isEmpty(list)) { + return; + } + List records = list.stream().map(this::doCreate).collect(Collectors.toList()); + this.saveBatch(records); + } + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, QueryOpLogsVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.doQuery(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public OpLogs findById(String id) { + + return this.doGetById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void clearLogs(LocalDateTime endTime) { + + log.info("开始清除创建时间早于{}的操作日志", endTime); + + this.doClearLogs(endTime); + } + + protected OpLogs doCreate(CreateOpLogsVo vo) { + + OpLogs record = new OpLogs(); + record.setId(IdUtil.getId()); + record.setName(vo.getName()); + record.setLogType(vo.getLogType()); + if (!StringUtil.isBlank(vo.getCreateBy())) { + record.setCreateBy(vo.getCreateBy()); + } + + if (!StringUtil.isBlank(vo.getCreateById())) { + record.setCreateById(vo.getCreateById()); + } + + if (!StringUtil.isBlank(vo.getExtra())) { + record.setExtra(vo.getExtra()); + } + record.setIp(vo.getIp()); + + return record; + } + + protected List doQuery(QueryOpLogsVo vo) { + + return getBaseMapper().query(vo); + } + + protected OpLogs doGetById(String id) { + + return getBaseMapper().findById(id); + } + + protected void doClearLogs(LocalDateTime endTime) { + + getBaseMapper().clearLogs(endTime); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/OrderTimeLineServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/OrderTimeLineServiceImpl.java new file mode 100644 index 0000000..a1885a0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/OrderTimeLineServiceImpl.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.inner.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.entity.OrderTimeLine; +import com.lframework.starter.web.inner.mappers.OrderTimeLineMapper; +import com.lframework.starter.web.inner.service.OrderTimeLineService; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author zmj + * @since 2022/8/10 + */ +@Service +public class OrderTimeLineServiceImpl extends + BaseMpServiceImpl implements + OrderTimeLineService { + + @Cacheable(value = OrderTimeLine.CACHE_NAME, key = "@cacheVariables.tenantId() + #orderId", unless = "#result == null") + @Override + public List getByOrder(String orderId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(OrderTimeLine.class).eq(OrderTimeLine::getOrderId, orderId).orderByAsc(OrderTimeLine::getCreateTime); + + return this.list(queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteByOrder(String orderId) { + Wrapper deleteWrapper = Wrappers.lambdaQuery(OrderTimeLine.class).eq(OrderTimeLine::getOrderId, orderId); + this.remove(deleteWrapper); + } + + @CacheEvict(value = OrderTimeLine.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + super.cleanCacheByKey(key); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/QrtzServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/QrtzServiceImpl.java new file mode 100644 index 0000000..a191e9b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/QrtzServiceImpl.java @@ -0,0 +1,201 @@ +package com.lframework.starter.web.inner.impl; + +import cn.hutool.core.exceptions.UtilException; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ReflectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.components.qrtz.QrtzHandler; +import com.lframework.starter.web.core.components.qrtz.DynamicQrtzJob; +import com.lframework.starter.web.inner.dto.qrtz.QrtzDto; +import com.lframework.starter.web.inner.enums.system.QrtzJobType; +import com.lframework.starter.web.inner.mappers.QrtzMapper; +import com.lframework.starter.web.inner.service.QrtzService; +import com.lframework.starter.web.inner.vo.qrtz.CreateQrtzVo; +import com.lframework.starter.web.inner.vo.qrtz.QueryQrtzVo; +import com.lframework.starter.web.inner.vo.qrtz.UpdateQrtzVo; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; +import org.quartz.JobDetail; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author zmj + * @since 2022/8/20 + */ +@Slf4j +@DS("master") +@Service +public class QrtzServiceImpl implements QrtzService { + + @Autowired + private QrtzMapper qrtzMapper; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, QueryQrtzVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + vo.setJobClasses(new ArrayList<>()); + vo.getJobClasses().add(DynamicQrtzJob.class.getName()); + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = qrtzMapper.query(vo); + PageResult pageResult = PageResultUtil.convert(new PageInfo<>(datas)); + datas.stream().forEach(this::renderDto); + + return pageResult; + } + + @Override + public QrtzDto findById(String name, String group) { + QrtzDto data = qrtzMapper.findById(name, group); + if (data == null) { + return null; + } + + return renderDto(data); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void create(CreateQrtzVo vo) { + JobDetail jobDetail = QrtzHandler.getJob(vo.getName(), vo.getGroup()); + if (jobDetail != null) { + throw new DefaultClientException("名称、组不允许重复,请重新输入!"); + } + QrtzJobType jobType = EnumUtil.getByCode(QrtzJobType.class, vo.getJobType()); + if (jobType == QrtzJobType.EXCUTE_CLASS) { + if (StringUtil.isBlank(vo.getTargetClassName())) { + throw new DefaultClientException("类名不能为空!"); + } + if (StringUtil.isBlank(vo.getTargetMethodName())) { + throw new DefaultClientException("方法名不能为空!"); + } + + if (!CollectionUtil.isEmpty(vo.getTargetParamTypes()) || !CollectionUtil.isEmpty( + vo.getTargetParams())) { + int typeSize = vo.getTargetParamTypes() == null ? 0 : vo.getTargetParamTypes().size(); + int paramSize = vo.getTargetParams() == null ? 0 : vo.getTargetParams().size(); + if (typeSize != paramSize) { + throw new DefaultClientException("参数类型与参数数量不匹配!"); + } + } + try { + Class clazz = Class.forName(vo.getTargetClassName()); + ReflectUtil.newInstance(clazz); + Class[] paramTypes = null; + if (!CollectionUtil.isEmpty(vo.getTargetParamTypes())) { + paramTypes = new Class[vo.getTargetParamTypes().size()]; + for (int i = 0; i < vo.getTargetParamTypes().size(); i++) { + String targetParamType = vo.getTargetParamTypes().get(i); + try { + paramTypes[i] = Class.forName(targetParamType); + } catch (ClassNotFoundException e) { + throw new DefaultClientException( + "参数类型:" + targetParamType + "不存在,需要输入类型全名称,如:java.lang.String,请检查!"); + } + } + } + // 验证一下参数 + ReflectUtil.getMethod(clazz, vo.getTargetMethodName(), paramTypes); + + Map jobDataMap = new HashMap<>(); + jobDataMap.put("targetClassName", vo.getTargetClassName()); + jobDataMap.put("targetMethodName", vo.getTargetMethodName()); + jobDataMap.put("targetParamTypes", vo.getTargetParamTypes()); + jobDataMap.put("targetParams", vo.getTargetParams()); + jobDataMap.put("jobType", vo.getJobType()); + if (vo.getTenantId() != null) { + jobDataMap.put(StringPool.TENANT_ID_QRTZ, vo.getTenantId()); + } + + QrtzHandler.addJob(vo.getName(), vo.getGroup(), DynamicQrtzJob.class, + "custom_trigger_" + vo.getName(), vo.getGroup(), vo.getCron(), jobDataMap, + vo.getDescription()); + } catch (ClassNotFoundException e) { + throw new DefaultClientException("类:" + vo.getTargetClassName() + "不存在,请检查!"); + } catch (UtilException e) { + throw new DefaultClientException("类:" + vo.getTargetClassName() + "无法加载,请检查!"); + } + } else { + Map jobDataMap = new HashMap<>(); + jobDataMap.put("script", vo.getScript()); + jobDataMap.put("jobType", vo.getJobType()); + if (vo.getTenantId() != null) { + jobDataMap.put(StringPool.TENANT_ID_QRTZ, vo.getTenantId()); + } + + QrtzHandler.addJob(vo.getName(), vo.getGroup(), DynamicQrtzJob.class, + "custom_trigger_" + vo.getName(), vo.getGroup(), vo.getCron(), jobDataMap, + vo.getDescription()); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateQrtzVo vo) { + JobDetail jobDetail = QrtzHandler.getJob(vo.getOriName(), vo.getOriGroup()); + if (jobDetail == null) { + throw new DefaultClientException("任务不存在!"); + } + + this.delete(vo.getOriName(), vo.getOriGroup()); + + this.create(vo); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void resume(String name, String group) { + QrtzHandler.resume(name, group); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void pause(String name, String group) { + QrtzHandler.pause(name, group); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void trigger(String name, String group) { + QrtzHandler.trigger(name, group); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void delete(String name, String group) { + + QrtzHandler.deleteJob(name, group, "custom_trigger_" + name, group); + } + + private QrtzDto renderDto(QrtzDto data) { + JobDetail jobDetail = QrtzHandler.getJob(data.getName(), data.getGroup()); + Integer jobType = jobDetail.getJobDataMap().getIntValue("jobType"); + data.setJobType(EnumUtil.getByCode(QrtzJobType.class, jobType)); + data.setTargetClassName(jobDetail.getJobDataMap().getString("targetClassName")); + data.setTargetMethodName(jobDetail.getJobDataMap().getString("targetMethodName")); + data.setTargetParamTypes((List) jobDetail.getJobDataMap().get("targetParamTypes")); + data.setTargetParams((List) jobDetail.getJobDataMap().get("targetParams")); + data.setScript(jobDetail.getJobDataMap().getString("script")); + Object tenantStr = jobDetail.getJobDataMap().get(StringPool.TENANT_ID_QRTZ); + data.setTenantId(tenantStr == null ? null : Integer.valueOf(String.valueOf(tenantStr))); + + return data; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/RecursionMappingServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/RecursionMappingServiceImpl.java new file mode 100644 index 0000000..8d9837a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/RecursionMappingServiceImpl.java @@ -0,0 +1,110 @@ +package com.lframework.starter.web.inner.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.entity.RecursionMapping; +import com.lframework.starter.web.inner.enums.system.NodeType; +import com.lframework.starter.web.inner.mappers.RecursionMappingMapper; +import com.lframework.starter.web.inner.service.RecursionMappingService; +import java.util.ArrayList; +import java.util.List; +import lombok.NonNull; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class RecursionMappingServiceImpl extends + BaseMpServiceImpl + implements RecursionMappingService { + + @Override + public List getNodeParentIds(@NonNull String nodeId, + @NonNull Class nodeTypeClazz) { + + if (StringUtil.isEmpty(nodeId)) { + return CollectionUtil.emptyList(); + } + + NodeType nodeType = ApplicationUtil.getBean(nodeTypeClazz); + Wrapper queryWrapper = Wrappers.lambdaQuery(RecursionMapping.class) + .eq(RecursionMapping::getNodeId, nodeId) + .eq(RecursionMapping::getNodeType, nodeType.getCode()); + + RecursionMapping recursionMappings = getBaseMapper().selectOne(queryWrapper); + if (recursionMappings == null || StringUtil.isEmpty(recursionMappings.getPath())) { + return CollectionUtil.emptyList(); + } + + return StringUtil.split(recursionMappings.getPath(), StringPool.STR_SPLIT); + } + + @Override + public List getNodeChildIds(String nodeId, Class nodeTypeClazz) { + + NodeType nodeType = ApplicationUtil.getBean(nodeTypeClazz); + return getBaseMapper().getNodeChildIds(nodeId, nodeType.getCode()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNode(String nodeId, Class nodeTypeClazz) { + + this.saveNode(nodeId, nodeTypeClazz, null); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteNode(String nodeId, Class nodeTypeClazz) { + + NodeType nodeType = ApplicationUtil.getBean(nodeTypeClazz); + + Wrapper deleteWrapper = Wrappers.lambdaQuery(RecursionMapping.class) + .eq(RecursionMapping::getNodeId, nodeId) + .eq(RecursionMapping::getNodeType, nodeType.getCode()); + getBaseMapper().delete(deleteWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteNodeAndChildren(String nodeId, Class nodeTypeClazz) { + NodeType nodeType = ApplicationUtil.getBean(nodeTypeClazz); + List childNodeIds = this.getNodeChildIds(nodeId, nodeTypeClazz); + List allNodeIds = new ArrayList<>(); + allNodeIds.add(nodeId); + allNodeIds.addAll(childNodeIds); + Wrapper deleteWrapper = Wrappers.lambdaQuery(RecursionMapping.class) + .in(RecursionMapping::getNodeId, allNodeIds) + .eq(RecursionMapping::getNodeType, nodeType.getCode()); + getBaseMapper().delete(deleteWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveNode(@NonNull String nodeId, @NonNull Class nodeTypeClazz, List parentIds) { + + NodeType nodeType = ApplicationUtil.getBean(nodeTypeClazz); + Wrapper deleteWrapper = Wrappers.lambdaQuery(RecursionMapping.class) + .eq(RecursionMapping::getNodeId, nodeId) + .eq(RecursionMapping::getNodeType, nodeType.getCode()); + getBaseMapper().delete(deleteWrapper); + + RecursionMapping data = new RecursionMapping(); + data.setId(IdUtil.getId()); + data.setNodeId(nodeId); + data.setNodeType(nodeType.getCode()); + data.setLevel(1); + data.setPath(StringPool.EMPTY_STR); + if (!CollectionUtil.isEmpty(parentIds)) { + data.setPath(StringUtil.join(StringPool.STR_SPLIT, parentIds)); + data.setLevel(parentIds.size() + 1); + } + + getBaseMapper().insert(data); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SecurityUploadRecordServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SecurityUploadRecordServiceImpl.java new file mode 100644 index 0000000..f74bb4a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SecurityUploadRecordServiceImpl.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.impl; + +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.entity.SecurityUploadRecord; +import com.lframework.starter.web.inner.enums.system.UploadType; +import com.lframework.starter.web.inner.mappers.SecurityUploadRecordMapper; +import com.lframework.starter.web.inner.service.SecurityUploadRecordService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SecurityUploadRecordServiceImpl extends + BaseMpServiceImpl implements + SecurityUploadRecordService { + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(String uploadType, String filePath) { + SecurityUploadRecord uploadRecord = new SecurityUploadRecord(); + uploadRecord.setId(IdUtil.getId()); + uploadRecord.setUploadType(EnumUtil.getByCode(UploadType.class, uploadType)); + uploadRecord.setFilePath(filePath); + + this.save(uploadRecord); + + return uploadRecord.getId(); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleServiceImpl.java new file mode 100644 index 0000000..bafaac1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleServiceImpl.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.inner.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.entity.SysModule; +import com.lframework.starter.web.inner.mappers.SysModuleMapper; +import com.lframework.starter.web.inner.service.SysModuleService; +import org.springframework.stereotype.Service; + +@DS("master") +@Service +public class SysModuleServiceImpl extends BaseMpServiceImpl implements + SysModuleService { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleTenantServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleTenantServiceImpl.java new file mode 100644 index 0000000..a1d59d1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/SysModuleTenantServiceImpl.java @@ -0,0 +1,70 @@ +package com.lframework.starter.web.inner.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.DateUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.entity.SysModuleTenant; +import com.lframework.starter.web.inner.mappers.SysModuleTenantMapper; +import com.lframework.starter.web.inner.service.SysModuleTenantService; +import com.lframework.starter.web.inner.vo.system.module.SysModuleTenantVo; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@DS("master") +@Service +public class SysModuleTenantServiceImpl extends + BaseMpServiceImpl implements SysModuleTenantService { + + @Override + public List getAvailableModuleIdsByTenantId(Integer tenantId) { + SysModuleTenantService thisService = getThis(getClass()); + return thisService.getByTenantId(tenantId).stream() + .filter(t -> DateUtil.now().isBefore(t.getExpireTime())).map(SysModuleTenant::getModuleId) + .collect(Collectors.toList()); + } + + @Cacheable(value = SysModuleTenant.CACHE_NAME, key = "#tenantId", unless = "#result == null or #result.isEmpty()") + @Override + public List getByTenantId(Integer tenantId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysModuleTenant.class) + .eq(SysModuleTenant::getTenantId, tenantId); + return this.list(queryWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setting(SysModuleTenantVo vo) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysModuleTenant.class) + .eq(SysModuleTenant::getTenantId, vo.getTenantId()); + this.remove(queryWrapper); + + if (CollectionUtil.isNotEmpty(vo.getModules())) { + List records = vo.getModules().stream().map(t -> { + SysModuleTenant record = new SysModuleTenant(); + record.setId(IdUtil.getId()); + record.setModuleId(t.getModuleId()); + record.setTenantId(vo.getTenantId()); + record.setExpireTime(t.getExpireTime()); + + return record; + }).collect(Collectors.toList()); + + this.saveBatch(records); + } + } + + @CacheEvict(value = SysModuleTenant.CACHE_NAME, key = "#key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/TenantServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/TenantServiceImpl.java new file mode 100644 index 0000000..d38d31a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/TenantServiceImpl.java @@ -0,0 +1,120 @@ +package com.lframework.starter.web.inner.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.EncryptUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.inner.mappers.TenantMapper; +import com.lframework.starter.web.inner.service.TenantService; +import com.lframework.starter.web.inner.vo.system.tenant.CreateTenantVo; +import com.lframework.starter.web.inner.vo.system.tenant.QueryTenantVo; +import com.lframework.starter.web.inner.vo.system.tenant.TenantSelectorVo; +import com.lframework.starter.web.inner.vo.system.tenant.UpdateTenantVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@DS("master") +@Service +public class TenantServiceImpl extends BaseMpServiceImpl implements + TenantService { + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, QueryTenantVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, TenantSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = Tenant.CACHE_NAME, key = "#id", unless = "#result == null") + @Override + public Tenant findById(Integer id) { + return getById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Integer create(CreateTenantVo data) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(Tenant.class) + .eq(Tenant::getName, data.getName()); + if (count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + Tenant record = new Tenant(); + record.setName(data.getName()); + record.setJdbcUrl(data.getJdbcUrl()); + record.setJdbcUsername(data.getJdbcUsername()); + record.setJdbcPassword(EncryptUtil.encrypt(data.getJdbcPassword())); + record.setAvailable(Boolean.TRUE); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateTenantVo data) { + + Tenant record = this.getById(data.getId()); + if (record == null) { + throw new DefaultClientException("租户不存在!"); + } + + Wrapper checkWrapper = Wrappers.lambdaQuery(Tenant.class) + .eq(Tenant::getName, data.getName()).ne(Tenant::getId, data.getId()); + if (count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(Tenant.class) + .eq(Tenant::getId, data.getId()).set(Tenant::getName, data.getName()) + .set(Tenant::getAvailable, data.getAvailable()); + if (StringUtil.isNotBlank(data.getJdbcUrl())) { + updateWrapper.set(Tenant::getJdbcUrl, data.getJdbcUrl()); + } + if (StringUtil.isNotBlank(data.getJdbcUsername())) { + updateWrapper.set(Tenant::getJdbcUsername, data.getJdbcUsername()); + } + if (StringUtil.isNotBlank(data.getJdbcPassword())) { + updateWrapper.set(Tenant::getJdbcPassword, EncryptUtil.encrypt(data.getJdbcPassword())); + } + + this.update(updateWrapper); + } + + @CacheEvict(value = Tenant.CACHE_NAME, key = "#key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicCategoryServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicCategoryServiceImpl.java new file mode 100644 index 0000000..9bee47c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicCategoryServiceImpl.java @@ -0,0 +1,130 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.service.system.SysDataDicCategoryService; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.inner.vo.system.dic.category.CreateSysDataDicCategoryVo; +import com.lframework.starter.web.inner.vo.system.dic.category.SysDataDicCategorySelectorVo; +import com.lframework.starter.web.inner.vo.system.dic.category.UpdateSysDataDicCategoryVo; +import com.lframework.starter.web.inner.mappers.system.SysDataDicCategoryMapper; +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysDataDicCategoryServiceImpl extends + BaseMpServiceImpl implements + SysDataDicCategoryService { + + @Autowired + private SysDataDicService sysDataDicService; + + @Cacheable(value = SysDataDicCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List queryList() { + return getBaseMapper().query(); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SysDataDicCategorySelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = SysDataDicCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysDataDicCategory findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysDataDicCategoryVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDataDicCategory.class) + .eq(SysDataDicCategory::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysDataDicCategory.class) + .eq(SysDataDicCategory::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysDataDicCategory record = new SysDataDicCategory(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysDataDicCategoryVo vo) { + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDataDicCategory.class) + .eq(SysDataDicCategory::getCode, vo.getCode()).ne(SysDataDicCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysDataDicCategory.class) + .eq(SysDataDicCategory::getName, vo.getName()).ne(SysDataDicCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysDataDicCategory record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("数据字典分类不存在!"); + } + + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.updateById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + Wrapper queryDicWrapper = Wrappers.lambdaQuery(SysDataDic.class) + .eq(SysDataDic::getCategoryId, id); + if (sysDataDicService.count(queryDicWrapper) > 0) { + throw new DefaultClientException("此分类下存在数据字典,无法删除!"); + } + + this.removeById(id); + } + + @CacheEvict(value = SysDataDicCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicItemServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicItemServiceImpl.java new file mode 100644 index 0000000..84a050a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicItemServiceImpl.java @@ -0,0 +1,156 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.inner.vo.system.dic.item.CreateSysDataDicItemVo; +import com.lframework.starter.web.inner.vo.system.dic.item.QuerySysDataDicItemVo; +import com.lframework.starter.web.inner.vo.system.dic.item.UpdateSysDataDicItemVo; +import com.lframework.starter.web.inner.mappers.system.SysDataDicItemMapper; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.service.system.SysDataDicItemService; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysDataDicItemServiceImpl extends + BaseMpServiceImpl implements SysDataDicItemService { + + @Autowired + private SysDataDicService sysDataDicService; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysDataDicItemVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysDataDicItemVo vo) { + return getBaseMapper().query(vo); + } + + @Cacheable(value = SysDataDicItem.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysDataDicItem findById(String id) { + return getBaseMapper().selectById(id); + } + + @Override + public SysDataDicItem findByCode(String dicCode, String code) { + SysDataDicItemService thisService = getThis(getClass()); + List items = thisService.findByDicCode(dicCode); + if (CollectionUtil.isEmpty(items)) { + return null; + } + + return items.stream().filter(t -> t.getCode().equals(code)).findFirst().orElse(null); + } + + @Cacheable(value = SysDataDicItem.CACHE_NAME, key = "@cacheVariables.tenantId() + #dicCode") + @Override + public List findByDicCode(String dicCode) { + Wrapper queryDicWrapper = Wrappers.lambdaQuery(SysDataDic.class) + .eq(SysDataDic::getCode, dicCode); + SysDataDic dic = sysDataDicService.getOne(queryDicWrapper); + if (dic == null) { + throw new DefaultClientException("数据字典不存在!"); + } + + Wrapper queryWrapper = Wrappers.lambdaQuery(SysDataDicItem.class) + .eq(SysDataDicItem::getDicId, dic.getId()).orderByAsc(SysDataDicItem::getOrderNo); + List datas = this.list(queryWrapper); + + return datas; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysDataDicItemVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDataDicItem.class) + .eq(SysDataDicItem::getDicId, vo.getDicId()) + .eq(SysDataDicItem::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysDataDicItem.class) + .eq(SysDataDicItem::getDicId, vo.getDicId()) + .eq(SysDataDicItem::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysDataDicItem record = new SysDataDicItem(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + record.setDicId(vo.getDicId()); + record.setOrderNo(vo.getOrderNo()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysDataDicItemVo vo) { + + SysDataDicItem record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("数据字典值不存在!"); + } + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDataDicItem.class) + .eq(SysDataDicItem::getDicId, record.getDicId()) + .eq(SysDataDicItem::getCode, vo.getCode()).ne(SysDataDicItem::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysDataDicItem.class) + .eq(SysDataDicItem::getDicId, record.getDicId()) + .eq(SysDataDicItem::getName, vo.getName()).ne(SysDataDicItem::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysDataDicItem.class) + .set(SysDataDicItem::getCode, vo.getCode()).set(SysDataDicItem::getName, vo.getName()) + .set(SysDataDicItem::getOrderNo, vo.getOrderNo()).eq(SysDataDicItem::getId, vo.getId()); + this.update(updateWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + this.removeById(id); + } + + @CacheEvict(value = SysDataDicItem.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicServiceImpl.java new file mode 100644 index 0000000..a3b4336 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataDicServiceImpl.java @@ -0,0 +1,145 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.inner.service.system.SysDataDicItemService; +import com.lframework.starter.web.inner.service.system.SysDataDicService; +import com.lframework.starter.web.inner.vo.system.dic.CreateSysDataDicVo; +import com.lframework.starter.web.inner.vo.system.dic.QuerySysDataDicVo; +import com.lframework.starter.web.inner.vo.system.dic.SysDataDicSelectorVo; +import com.lframework.starter.web.inner.vo.system.dic.UpdateSysDataDicVo; +import com.lframework.starter.web.inner.mappers.system.SysDataDicMapper; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysDataDicServiceImpl extends + BaseMpServiceImpl implements + SysDataDicService { + + @Autowired + private SysDataDicItemService sysDataDicItemService; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, QuerySysDataDicVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysDataDicVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SysDataDicSelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = SysDataDic.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysDataDic findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysDataDicVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDataDic.class) + .eq(SysDataDic::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysDataDic.class) + .eq(SysDataDic::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysDataDic record = new SysDataDic(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + if (!StringUtil.isBlank(vo.getCategoryId())) { + record.setCategoryId(vo.getCategoryId()); + } + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysDataDicVo vo) { + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDataDic.class) + .eq(SysDataDic::getCode, vo.getCode()).ne(SysDataDic::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysDataDic.class) + .eq(SysDataDic::getName, vo.getName()).ne(SysDataDic::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysDataDic record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("数据字典不存在!"); + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysDataDic.class) + .set(SysDataDic::getCode, vo.getCode()).set(SysDataDic::getName, vo.getName()) + .set(SysDataDic::getCategoryId, + StringUtil.isBlank(vo.getCategoryId()) ? null : vo.getCategoryId()) + .eq(SysDataDic::getId, vo.getId()); + this.update(updateWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + this.removeById(id); + + Wrapper deleteItemWrapper = Wrappers.lambdaQuery(SysDataDicItem.class) + .eq(SysDataDicItem::getDicId, id); + sysDataDicItemService.remove(deleteItemWrapper); + } + + @CacheEvict(value = SysDataDic.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionDataServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionDataServiceImpl.java new file mode 100644 index 0000000..7a13976 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionDataServiceImpl.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.inner.entity.SysDataPermissionData; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.mappers.system.SysDataPermissionDataMapper; +import com.lframework.starter.web.inner.service.system.SysDataPermissionDataService; +import java.util.List; +import org.springframework.stereotype.Service; + +@Service +public class SysDataPermissionDataServiceImpl extends + BaseMpServiceImpl implements + SysDataPermissionDataService { + + @Override + public List getByBizId(String bizId) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysDataPermissionData.class) + .eq(SysDataPermissionData::getBizId, bizId); + + return this.list(queryWrapper); + } + + @Override + public SysDataPermissionData getByBizId(String bizId, Integer bizType, Integer permissionType) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysDataPermissionData.class) + .eq(SysDataPermissionData::getBizId, bizId).eq(SysDataPermissionData::getBizType, bizType) + .eq(SysDataPermissionData::getPermissionType, permissionType); + + return this.getOne(queryWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionModelDetailServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionModelDetailServiceImpl.java new file mode 100644 index 0000000..5f2556d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDataPermissionModelDetailServiceImpl.java @@ -0,0 +1,145 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.lframework.starter.common.exceptions.impl.DefaultSysException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.inner.entity.SysDataPermissionModelDetail; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailCalcType; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailConditionType; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailInputType; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionModelDetailNodeType; +import com.lframework.starter.web.inner.mappers.system.SysDataPermissionModelDetailMapper; +import com.lframework.starter.web.inner.service.system.SysDataPermissionModelDetailService; +import com.lframework.starter.web.inner.vo.system.permission.SysDataPermissionModelDetailVo; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import org.springframework.stereotype.Service; + +@Service +public class SysDataPermissionModelDetailServiceImpl extends + BaseMpServiceImpl implements + SysDataPermissionModelDetailService { + + @Override + public String toSql(List models) { + if (CollectionUtil.isEmpty(models)) { + return null; + } + + StringBuilder builder = new StringBuilder(); + + for (SysDataPermissionModelDetailVo model : models) { + SysDataPermissionModelDetailNodeType nodeType = EnumUtil.getByCode( + SysDataPermissionModelDetailNodeType.class, model.getNodeType()); + if (nodeType == SysDataPermissionModelDetailNodeType.CALC) { + SysDataPermissionModelDetailCalcType calcType = EnumUtil.getByCode( + SysDataPermissionModelDetailCalcType.class, model.getCalcType()); + if (CollectionUtil.isNotEmpty(model.getChildren())) { + builder.append(" ("); + builder.append(this.buildChildrenSql(model.getChildren(), calcType.getOperation())); + builder.append(") "); + } + builder.append("AND "); + } else { + throw new DefaultSysException("nodeType有误,请检查!"); + } + } + + if (builder.length() > 0) { + builder.setLength(builder.length() - 4); + } + return builder.toString(); + } + + @Override + public String formatSql(String sqlTemplate, Map params) { + return StringUtil.format(sqlTemplate, params); + } + + private String buildChildrenSql(List children, String operation) { + if (CollectionUtil.isEmpty(children)) { + return ""; + } + + StringBuilder builder = new StringBuilder(); + for (SysDataPermissionModelDetailVo child : children) { + SysDataPermissionModelDetailNodeType nodeType = EnumUtil.getByCode( + SysDataPermissionModelDetailNodeType.class, child.getNodeType()); + if (nodeType == SysDataPermissionModelDetailNodeType.CALC) { + SysDataPermissionModelDetailCalcType calcType = EnumUtil.getByCode( + SysDataPermissionModelDetailCalcType.class, child.getCalcType()); + if (CollectionUtil.isNotEmpty(child.getChildren())) { + builder.append(" ("); + builder.append(this.buildChildrenSql(child.getChildren(), calcType.getOperation())); + builder.append(")"); + builder.append(operation).append(" "); + } + } else { + SysDataPermissionModelDetailConditionType conditionType = EnumUtil.getByCode( + SysDataPermissionModelDetailConditionType.class, child.getConditionType()); + SysDataPermissionModelDetail record = this.getById(child.getDetailId()); + builder.append("{").append(record.getTableName()).append("}.") + .append(record.getColumnName()).append(" ").append(conditionType.getOperation()) + .append(" ").append(this.buildLeft(conditionType)) + .append(this.buildValue(child, record)) + .append(this.buildRight(conditionType)).append(" ").append(operation).append(" "); + } + } + + if (builder.length() > 0) { + builder.setLength(builder.length() - operation.length() - 1); + } + + return builder.toString(); + } + + private String buildLeft(SysDataPermissionModelDetailConditionType conditionType) { + if (conditionType == SysDataPermissionModelDetailConditionType.IN + || conditionType == SysDataPermissionModelDetailConditionType.NOT_IN) { + return "("; + } else if (conditionType == SysDataPermissionModelDetailConditionType.LEFT_LIKE) { + return "CONCAT('%',"; + } else if (conditionType == SysDataPermissionModelDetailConditionType.RIGHT_LIKE) { + return "CONCAT("; + } else if (conditionType == SysDataPermissionModelDetailConditionType.AROUND_LIKE) { + return "CONCAT('%',"; + } + + return ""; + } + + private String buildRight(SysDataPermissionModelDetailConditionType conditionType) { + if (conditionType == SysDataPermissionModelDetailConditionType.IN + || conditionType == SysDataPermissionModelDetailConditionType.NOT_IN) { + return ")"; + } else if (conditionType == SysDataPermissionModelDetailConditionType.LEFT_LIKE) { + return ")"; + } else if (conditionType == SysDataPermissionModelDetailConditionType.RIGHT_LIKE) { + return ",'%')"; + } else if (conditionType == SysDataPermissionModelDetailConditionType.AROUND_LIKE) { + return ",'%')"; + } + + return ""; + } + + private String buildValue(SysDataPermissionModelDetailVo child, + SysDataPermissionModelDetail record) { + SysDataPermissionModelDetailConditionType conditionType = EnumUtil.getByCode( + SysDataPermissionModelDetailConditionType.class, child.getConditionType()); + if (conditionType == SysDataPermissionModelDetailConditionType.IN + || conditionType == SysDataPermissionModelDetailConditionType.NOT_IN) { + if (record.getInputType() == SysDataPermissionModelDetailInputType.SQL) { + return record.getSqlValue(); + } else { + return CollectionUtil.join( + child.getValues().stream().map(t -> "'" + t + "'").collect(Collectors.toList()), ","); + } + } + + return "'" + child.getValue() + "'"; + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java new file mode 100644 index 0000000..cbe7d11 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java @@ -0,0 +1,267 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.inner.enums.system.SysDeptNodeType; +import com.lframework.starter.web.inner.mappers.system.SysDeptMapper; +import com.lframework.starter.web.inner.service.RecursionMappingService; +import com.lframework.starter.web.inner.service.system.SysDeptService; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.inner.vo.system.dept.CreateSysDeptVo; +import com.lframework.starter.web.inner.vo.system.dept.UpdateSysDeptVo; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysDeptServiceImpl extends BaseMpServiceImpl implements + SysDeptService { + + @Autowired + private RecursionMappingService recursionMappingService; + + @Override + public List selector() { + + return this.doSelector(); + } + + @Cacheable(value = SysDept.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysDept findById(String id) { + + return this.doGetById(id); + } + + @Override + public SysDept findByCode(String code) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysDept.class).eq(SysDept::getCode, code); + return getOne(queryWrapper); + } + + @OpLog(type = SystemOpLogType.class, name = "停用部门,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(String id) { + + List batchIds = new ArrayList<>(); + batchIds.add(id); + List nodeChildIds = recursionMappingService.getNodeChildIds(id, + SysDeptNodeType.class); + if (CollectionUtil.isNotEmpty(nodeChildIds)) { + batchIds.addAll(nodeChildIds); + } + + this.doBatchUnable(batchIds); + } + + @OpLog(type = SystemOpLogType.class, name = "启用部门,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(String id) { + + List batchIds = new ArrayList<>(); + batchIds.add(id); + List nodeChildIds = recursionMappingService.getNodeParentIds(id, + SysDeptNodeType.class); + if (CollectionUtil.isNotEmpty(nodeChildIds)) { + batchIds.addAll(nodeChildIds); + } + + this.doBatchEnable(batchIds); + } + + @OpLog(type = SystemOpLogType.class, name = "新增部门,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysDeptVo vo) { + + SysDept data = this.doCreate(vo); + + this.saveRecursion(data.getId(), data.getParentId()); + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + + return data.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改部门,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysDeptVo vo) { + + this.doUpdate(vo); + + this.saveRecursion(vo.getId(), vo.getParentId()); + + OpLogUtil.setVariable("id", vo.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + } + + protected List doSelector() { + + return getBaseMapper().selector(); + } + + protected SysDept doGetById(String id) { + + return getBaseMapper().findById(id); + } + + protected void doBatchUnable(Collection ids) { + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysDept.class) + .set(SysDept::getAvailable, Boolean.FALSE).in(SysDept::getId, ids); + getBaseMapper().update(updateWrapper); + } + + protected void doBatchEnable(Collection ids) { + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysDept.class) + .set(SysDept::getAvailable, Boolean.TRUE).in(SysDept::getId, ids); + getBaseMapper().update(updateWrapper); + } + + protected SysDept doCreate(CreateSysDeptVo vo) { + + //查询Code是否重复 + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDept.class) + .eq(SysDept::getCode, vo.getCode()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + //查询Name是否重复 + checkWrapper = Wrappers.lambdaQuery(SysDept.class) + .eq(SysDept::getName, vo.getName()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysDept parentDept = null; + //如果parentId不为空,查询上级部门是否存在 + if (!StringUtil.isBlank(vo.getParentId())) { + parentDept = this.getById(vo.getParentId()); + if (parentDept == null) { + throw new DefaultClientException("上级部门不存在,请检查!"); + } + } + + SysDept data = new SysDept(); + data.setId(IdUtil.getId()); + data.setCode(vo.getCode()); + data.setName(vo.getName()); + data.setShortName(vo.getShortName()); + if (!StringUtil.isBlank(vo.getParentId())) { + data.setParentId(vo.getParentId()); + } + data.setAvailable(parentDept == null ? Boolean.TRUE : parentDept.getAvailable()); + data.setDescription(vo.getDescription()); + + getBaseMapper().insert(data); + + return data; + } + + protected void doUpdate(UpdateSysDeptVo vo) { + + SysDept data = this.findById(vo.getId()); + if (data == null) { + throw new DefaultClientException("部门不存在!"); + } + + //查询Code是否重复 + Wrapper checkWrapper = Wrappers.lambdaQuery(SysDept.class) + .eq(SysDept::getCode, vo.getCode()).ne(SysDept::getId, data.getId()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + //查询Name是否重复 + checkWrapper = Wrappers.lambdaQuery(SysDept.class) + .eq(SysDept::getName, vo.getName()) + .ne(SysDept::getId, data.getId()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + //如果parentId不为空,查询上级部门是否存在 + if (!StringUtil.isBlank(vo.getParentId())) { + if (ObjectUtil.equals(vo.getParentId(), data.getId())) { + throw new DefaultClientException("上级部门不能是当前部门!"); + } + Wrapper checkParentWrapper = Wrappers.lambdaQuery(SysDept.class) + .eq(SysDept::getId, vo.getParentId()); + if (getBaseMapper().selectCount(checkParentWrapper) == 0) { + throw new DefaultClientException("上级部门不存在,请检查!"); + } + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysDept.class) + .set(SysDept::getCode, vo.getCode()).set(SysDept::getName, vo.getName()) + .set(SysDept::getShortName, vo.getShortName()) + .set(SysDept::getParentId, + StringUtil.isBlank(vo.getParentId()) ? null : vo.getParentId()) + .set(SysDept::getDescription, + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()) + .set(SysDept::getAvailable, vo.getAvailable()).eq(SysDept::getId, vo.getId()); + + getBaseMapper().update(updateWrapper); + + if (vo.getAvailable()) { + this.enable(vo.getId()); + } else { + this.unable(vo.getId()); + } + } + + /** + * 保存递归信息 + * + * @param deptId + * @param parentId + */ + protected void saveRecursion(String deptId, String parentId) { + + if (!StringUtil.isBlank(parentId)) { + List parentIds = recursionMappingService.getNodeParentIds(parentId, + SysDeptNodeType.class); + if (CollectionUtil.isEmpty(parentIds)) { + parentIds = new ArrayList<>(); + } + parentIds.add(parentId); + + recursionMappingService.saveNode(deptId, SysDeptNodeType.class, + parentIds); + } else { + recursionMappingService.saveNode(deptId, SysDeptNodeType.class); + } + } + + @CacheEvict(value = {SysDept.CACHE_NAME}, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysGenerateCodeServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysGenerateCodeServiceImpl.java new file mode 100644 index 0000000..ca8479d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysGenerateCodeServiceImpl.java @@ -0,0 +1,141 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.dto.GenerateCodeDto; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.inner.entity.SysGenerateCode; +import com.lframework.starter.web.inner.mappers.system.SysGenerateCodeMapper; +import com.lframework.starter.web.inner.service.system.SysGenerateCodeService; +import com.lframework.starter.web.inner.vo.system.generate.CreateSysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.QuerySysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.SettingSysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.UpdateSysGenerateCodeVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysGenerateCodeServiceImpl extends + BaseMpServiceImpl implements SysGenerateCodeService { + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysGenerateCodeVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysGenerateCodeVo vo) { + + return getBaseMapper().query(vo); + } + + @Cacheable(value = SysGenerateCode.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysGenerateCode findById(Integer id) { + + return getBaseMapper().selectById(id); + } + + @OpLog(type = SystemOpLogType.class, name = "新增编号规则,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public Integer create(CreateSysGenerateCodeVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysGenerateCode.class) + .eq(SysGenerateCode::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("规则ID重复,请重新输入!"); + } + SysGenerateCode data = new SysGenerateCode(); + data.setId(vo.getId()); + data.setName(vo.getName()); + data.setConfigStr(StringPool.EMPTY_STR); + + getBaseMapper().insert(data); + + OpLogUtil.setVariable("id", String.valueOf(data.getId())); + OpLogUtil.setExtra(vo); + + return data.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改编号规则,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysGenerateCodeVo vo) { + + SysGenerateCode data = getBaseMapper().selectById(vo.getId()); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("编号规则不存在!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate( + SysGenerateCode.class) + .set(SysGenerateCode::getName, vo.getName()) + .eq(SysGenerateCode::getId, vo.getId()); + + getBaseMapper().update(updateWrapper); + + OpLogUtil.setVariable("id", String.valueOf(data.getId())); + OpLogUtil.setExtra(vo); + } + + @OpLog(type = SystemOpLogType.class, name = "删除编号规则,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(Integer id) { + + getBaseMapper().deleteById(id); + } + + @OpLog(type = SystemOpLogType.class, name = "设置编号规则,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void setting(SettingSysGenerateCodeVo vo) { + SysGenerateCode data = getBaseMapper().selectById(vo.getId()); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("编号规则不存在!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate( + SysGenerateCode.class) + .set(SysGenerateCode::getConfigStr, vo.getConfigStr()) + .eq(SysGenerateCode::getId, vo.getId()); + + getBaseMapper().update(updateWrapper); + + OpLogUtil.setVariable("id", String.valueOf(data.getId())); + OpLogUtil.setExtra(vo); + } + + @CacheEvict(value = {SysGenerateCode.CACHE_NAME, + GenerateCodeDto.CACHE_NAME}, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMailMessageServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMailMessageServiceImpl.java new file mode 100644 index 0000000..64b27f3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMailMessageServiceImpl.java @@ -0,0 +1,42 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.entity.SysMailMessage; +import com.lframework.starter.web.inner.mappers.system.SysMailMessageMapper; +import com.lframework.starter.web.inner.service.system.SysMailMessageService; +import com.lframework.starter.web.inner.vo.system.message.mail.QuerySysMailMessageVo; +import java.util.List; +import org.springframework.stereotype.Service; + +@Service +public class SysMailMessageServiceImpl extends + BaseMpServiceImpl + implements SysMailMessageService { + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysMailMessageVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysMailMessageVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public SysMailMessage findById(String id) { + return getById(id); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMenuServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMenuServiceImpl.java new file mode 100644 index 0000000..c813cbc --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysMenuServiceImpl.java @@ -0,0 +1,492 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.RegUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.components.security.UserTokenResolver; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.SpelUtil; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.dto.system.MenuDto; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.inner.enums.system.SysMenuComponentType; +import com.lframework.starter.web.inner.enums.system.SysMenuDisplay; +import com.lframework.starter.web.inner.mappers.system.SysMenuMapper; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.inner.vo.system.menu.CreateSysMenuVo; +import com.lframework.starter.web.inner.vo.system.menu.SysMenuSelectorVo; +import com.lframework.starter.web.inner.vo.system.menu.UpdateSysMenuVo; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import lombok.NonNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + *

+ * 系统菜单 服务实现类 + *

+ * + * @author zmj + * @since 2021-05-10 + */ +@Service +public class SysMenuServiceImpl extends BaseMpServiceImpl implements + SysMenuService { + + private String tokenKey = "X-Auth-Token"; + + @Autowired + private UserTokenResolver userTokenResolver; + + @Override + public List queryList(List moduleIds) { + + return this.doQuery(moduleIds); + } + + @Override + public List getByRoleId(String roleId, List moduleIds) { + + return this.doGetByRoleId(roleId, moduleIds); + } + + @Cacheable(value = SysMenu.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysMenu findById(@NonNull String id) { + + return this.doGetById(id); + } + + @OpLog(type = SystemOpLogType.class, name = "新增菜单,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public String create(@NonNull CreateSysMenuVo vo) { + + SysMenu data = this.doCreate(vo); + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + + return data.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改菜单,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(@NonNull UpdateSysMenuVo vo) { + + SysMenu oriMenu = this.findById(vo.getId()); + + if (!ObjectUtil.equals(vo.getDisplay(), oriMenu.getDisplay().getCode())) { + throw new DefaultClientException("菜单【" + oriMenu.getTitle() + "】" + "不允许更改类型!"); + } + + SysMenu data = this.doUpdate(vo); + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + } + + @OpLog(type = SystemOpLogType.class, name = "删除菜单,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(@NonNull String id) { + + SysMenu oriMenu = this.findById(id); + + List children = this.doGetChildrenById(id); + if (CollectionUtil.isNotEmpty(children)) { + //如果子节点不为空 + throw new DefaultClientException("菜单【" + oriMenu.getTitle() + "】存在子菜单,无法删除!"); + } + + this.doDeleteById(id); + } + + @Override + public List selector(SysMenuSelectorVo vo, List moduleIds) { + + return this.doSelector(vo, moduleIds); + } + + @OpLog(type = SystemOpLogType.class, name = "启用菜单,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(@NonNull String id) { + + this.doEnable(id); + } + + @OpLog(type = SystemOpLogType.class, name = "停用菜单,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(@NonNull String id) { + + this.doUnable(id); + } + + @Override + public Boolean existPermission(String permission) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysMenu.class) + .eq(SysMenu::getPermission, permission); + return this.count(queryWrapper) > 0; + } + + protected List doQuery(List moduleIds) { + + return getBaseMapper().query(moduleIds); + } + + protected List doGetByRoleId(String roleId, List moduleIds) { + + return getBaseMapper().getByRoleId(roleId, moduleIds); + } + + protected SysMenu doGetById(@NonNull String id) { + + return getBaseMapper().findById(id); + } + + protected SysMenu doCreate(@NonNull CreateSysMenuVo vo) { + + SysMenu data = new SysMenu(); + + data.setId(IdUtil.getId()); + this.setDataForCreate(vo, data); + + getBaseMapper().insert(data); + + return data; + } + + protected SysMenu doUpdate(@NonNull UpdateSysMenuVo vo) { + + SysMenu data = new SysMenu(); + + data.setId(vo.getId()); + + this.setDataForCreate(vo, data); + + data.setAvailable(vo.getAvailable()); + + SysMenuService thisService = getThis(this.getClass()); + + SysMenu record = thisService.findById(vo.getId()); + + data.setIsSpecial(record.getIsSpecial()); + + getBaseMapper().deleteById(vo.getId()); + + getBaseMapper().insert(data); + + return data; + } + + protected void doDeleteById(@NonNull String id) { + + getBaseMapper().deleteById(id); + } + + protected List doSelector(SysMenuSelectorVo vo, List moduleIds) { + + return getBaseMapper().selector(vo, moduleIds); + } + + protected void doEnable(@NonNull String id) { + + List ids = new ArrayList<>(); + // 启用时,需要将父级菜单也启用 + ids.add(id); + + String tmpId = id; + while (!StringUtil.isBlank(tmpId)) { + SysMenu sysMenu = getById(tmpId); + if (sysMenu == null) { + break; + } + if (StringUtil.isBlank(sysMenu.getParentId())) { + break; + } + + ids.add(sysMenu.getParentId()); + + tmpId = sysMenu.getParentId(); + } + Wrapper wrapper = Wrappers.lambdaUpdate(SysMenu.class) + .set(SysMenu::getAvailable, Boolean.TRUE).in(SysMenu::getId, ids); + getBaseMapper().update(new SysMenu(), wrapper); + } + + protected void doUnable(@NonNull String id) { + + Set ids = new HashSet<>(); + // 停用时,需要将子级菜单也停用 + ids.add(id); + while (true) { + List sysMenuList = list(Wrappers.lambdaQuery(SysMenu.class) + .in(SysMenu::getParentId, ids)); + + int oldSize = ids.size(); + if (CollectionUtil.isNotEmpty(sysMenuList)) { + ids.addAll(sysMenuList.stream().map(SysMenu::getId).collect(Collectors.toList())); + } + if (oldSize == ids.size()) { + break; + } + } + + Wrapper wrapper = Wrappers.lambdaUpdate(SysMenu.class) + .set(SysMenu::getAvailable, Boolean.FALSE).in(SysMenu::getId, ids); + getBaseMapper().update(new SysMenu(), wrapper); + } + + protected void setDataForCreate(@NonNull CreateSysMenuVo vo, @NonNull SysMenu data) { + + SysMenuDisplay sysMenuDisplay = EnumUtil.getByCode(SysMenuDisplay.class, vo.getDisplay()); + + SysMenu parentMenu = null; + if (!StringUtil.isBlank(vo.getParentId())) { + parentMenu = this.findById(vo.getParentId()); + if (parentMenu == null) { + throw new DefaultClientException("父级菜单不存在!"); + } + if (parentMenu.getId().equals(data.getId())) { + throw new DefaultClientException("父级菜单不能是当前菜单!"); + } + } + data.setCode(vo.getCode()); + data.setTitle(vo.getTitle()); + // fix 这里需要用null代替空字符串 + data.setParentId(parentMenu == null ? null : parentMenu.getId()); + data.setDisplay(sysMenuDisplay); + data.setDescription( + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + + if (sysMenuDisplay == SysMenuDisplay.CATALOG || sysMenuDisplay == SysMenuDisplay.FUNCTION) { + if (parentMenu != null) { + //父级菜单必须是目录 + if (parentMenu.getDisplay() != SysMenuDisplay.CATALOG) { + throw new DefaultClientException( + "父级菜单类型必须是【" + SysMenuDisplay.CATALOG.getDesc() + "】!"); + } + } + + data.setName(vo.getName()); + data.setIcon(vo.getIcon()); + data.setPath(vo.getPath()); + data.setHidden(vo.getHidden()); + + if (sysMenuDisplay == SysMenuDisplay.FUNCTION) { + // 功能必须有parentId + if (parentMenu == null) { + throw new DefaultClientException( + "此菜单类型是【" + SysMenuDisplay.FUNCTION.getDesc() + "】,父级菜单不能为空!"); + } + data.setComponent(vo.getComponent()); + data.setComponentType( + EnumUtil.getByCode(SysMenuComponentType.class, vo.getComponentType())); + data.setNoCache(vo.getNoCache()); + + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(vo.getPermission())) { + throw new DefaultClientException( + "权限【" + SecurityConstants.PERMISSION_ADMIN_NAME + "】为内置权限,请修改!"); + } + + data.setPermission(vo.getPermission()); + } + } else if (sysMenuDisplay == SysMenuDisplay.PERMISSION) { + + if (parentMenu != null) { + //父级菜单必须是目录 + if (parentMenu.getDisplay() != SysMenuDisplay.FUNCTION) { + throw new DefaultClientException( + "父级菜单类型必须是【" + SysMenuDisplay.FUNCTION.getDesc() + "】!"); + } + } else { + throw new DefaultClientException( + "此菜单类型是【" + SysMenuDisplay.PERMISSION.getDesc() + "】,父级菜单不能为空!"); + } + + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(vo.getPermission())) { + throw new DefaultClientException( + "权限【" + SecurityConstants.PERMISSION_ADMIN_NAME + "】为内置权限,请修改!"); + } + + data.setPermission(vo.getPermission()); + } + } + + protected List doGetChildrenById(String id) { + + return getBaseMapper().getChildrenById(id); + } + + @Override + public List getMenuByUserId(String userId, boolean isAdmin, List moduleIds) { + + List menus = this.doGetMenus(userId, isAdmin, moduleIds); + + List collectionMenuIds = this.doGetCollectMenuIds(userId); + + if (!CollectionUtil.isEmpty(menus)) { + // 用env渲染${xxx}属性 + menus.forEach(menu -> { + menu.setPath(ApplicationUtil.resolvePlaceholders(menu.getPath())); + }); + + // 渲染spel表达式 + Map vars = getDefaultVars(); + menus.stream().filter(menu -> this.hasSpecExpression(menu.getPath())).forEach(menu -> { + List expressions = this.getAllExpressions(menu.getPath()); + if (!CollectionUtil.isEmpty(expressions)) { + String oriPath = menu.getPath(); + for (String expression : expressions) { + Object parsed = SpelUtil.parse(expression.replaceAll("\\{", "").replaceAll("}", ""), + vars); + oriPath = oriPath.replace(expression, parsed == null ? "" : String.valueOf(parsed)); + } + + menu.setPath(oriPath); + } + }); + + if (!CollectionUtil.isEmpty(collectionMenuIds)) { + menus.forEach(menu -> { + menu.setIsCollect(collectionMenuIds.contains(menu.getId())); + }); + } + } + + return menus; + } + + @Override + public Set getPermissionsByUserId(String userId, boolean isAdmin, + List moduleIds) { + + return getBaseMapper().getPermissionsByUserId(userId, isAdmin, moduleIds); + } + + @Override + public Set getRolePermissionByUserId(String userId) { + return getBaseMapper().getRolePermissionByUserId(userId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void collect(String userId, String menuId) { + + if (StringUtil.isBlank(userId) || StringUtil.isBlank(menuId)) { + return; + } + + this.cancelCollect(userId, menuId); + + getBaseMapper().collectMenu(IdUtil.getId(), userId, menuId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelCollect(String userId, String menuId) { + + if (StringUtil.isBlank(userId) || StringUtil.isBlank(menuId)) { + return; + } + + getBaseMapper().cancelCollectMenu(userId, menuId); + } + + @Override + public List getParentMenuIds(String menuId) { + List results = new ArrayList<>(); + + String tmpMenuId = menuId; + while (tmpMenuId != null) { + SysMenu menu = getThis(this.getClass()).findById(tmpMenuId); + if (menu != null && StringUtil.isNotBlank(menu.getParentId())) { + results.add(menu.getParentId()); + tmpMenuId = menu.getParentId(); + } else { + break; + } + } + + return results; + } + + private List getAllExpressions(String s) { + + if (!this.hasSpecExpression(s)) { + return null; + } + + List results = new ArrayList<>(); + String[] arr = s.split("#\\{"); + for (int i = 1; i < arr.length; i++) { + if (!arr[i].contains("}")) { + continue; + } + results.add("#{" + arr[i].substring(0, arr[i].indexOf("}")) + "}"); + } + + return results; + } + + private boolean hasSpecExpression(String s) { + + return RegUtil.isMatch(Pattern.compile("^.*#\\{.*}.*$"), s); + } + + protected Map getDefaultVars() { + + Map vars = new HashMap<>(); + + vars.put("_token", userTokenResolver.getToken()); + vars.put("_fullToken", userTokenResolver.getFullToken()); + vars.put("_tokenKey", tokenKey); + + return vars; + } + + protected List doGetMenus(String userId, boolean isAdmin, List moduleIds) { + + return getBaseMapper().getMenuByUserId(userId, isAdmin, moduleIds); + } + + protected List doGetCollectMenuIds(String userId) { + + return getBaseMapper().getCollectMenuIds(userId); + } + + @CacheEvict(value = SysMenu.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeLogServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeLogServiceImpl.java new file mode 100644 index 0000000..090ca3f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeLogServiceImpl.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.inner.mappers.system.SysNoticeLogMapper; +import com.lframework.starter.web.inner.entity.SysNoticeLog; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.service.system.SysNoticeLogService; +import java.time.LocalDateTime; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysNoticeLogServiceImpl extends + BaseMpServiceImpl implements SysNoticeLogService { + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean setReaded(String noticeId, String userId) { + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysNoticeLog.class) + .eq(SysNoticeLog::getNoticeId, noticeId).eq(SysNoticeLog::getUserId, userId) + .eq(SysNoticeLog::getReaded, Boolean.FALSE).set(SysNoticeLog::getReaded, Boolean.TRUE) + .set(SysNoticeLog::getReadTime, + LocalDateTime.now()); + + return this.update(updateWrapper); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeServiceImpl.java new file mode 100644 index 0000000..a96e6be --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNoticeServiceImpl.java @@ -0,0 +1,259 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.ThreadUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.components.threads.DefaultRunnable; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.websocket.components.WsDataPusher; +import com.lframework.starter.web.websocket.events.UserConnectEvent; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.inner.dto.system.notice.QuerySysNoticeByUserDto; +import com.lframework.starter.web.inner.dto.system.notice.SysNoticeDto; +import com.lframework.starter.web.inner.entity.SysNotice; +import com.lframework.starter.web.inner.entity.SysNoticeLog; +import com.lframework.starter.web.inner.vo.system.notice.CreateSysNoticeVo; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeByUserVo; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeVo; +import com.lframework.starter.web.inner.vo.system.notice.UpdateSysNoticeVo; +import com.lframework.starter.web.inner.mappers.system.SysNoticeMapper; +import com.lframework.starter.web.inner.service.system.SysNoticeLogService; +import com.lframework.starter.web.inner.service.system.SysNoticeService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.system.user.QuerySysUserVo; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysNoticeServiceImpl extends BaseMpServiceImpl implements + SysNoticeService { + + @Autowired + private SysUserService sysUserService; + + @Autowired + private SysNoticeLogService sysNoticeLogService; + + @Autowired + private WsDataPusher wsDataPusher; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, QuerySysNoticeVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysNoticeVo vo) { + + return getBaseMapper().query(vo); + } + + @Override + public PageResult queryByUser(Integer pageIndex, Integer pageSize, + QuerySysNoticeByUserVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().queryByUser(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = SysNotice.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysNoticeDto getContent(String id) { + SysNotice record = getBaseMapper().selectById(id); + if (record == null) { + return null; + } + + return new SysNoticeDto(record); + } + + @Override + public SysNotice findById(String id) { + + return getBaseMapper().selectById(id); + } + + @OpLog(type = SystemOpLogType.class, name = "新增系统通知,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysNoticeVo vo) { + + SysNotice data = new SysNotice(); + data.setId(IdUtil.getId()); + data.setTitle(vo.getTitle()); + data.setContent(vo.getContent()); + data.setPublished(vo.getPublished()); + + getBaseMapper().insert(data); + + if (vo.getPublished()) { + ThreadUtil.execAsync(new DefaultRunnable(() -> { + SysNoticeService thisService = getThis(getClass()); + thisService.publish(data.getId()); + })); + } + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setExtra(vo); + + return data.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改系统通知,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysNoticeVo vo) { + + SysNotice data = getBaseMapper().selectById(vo.getId()); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("系统通知不存在!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(SysNotice.class) + .set(SysNotice::getTitle, vo.getTitle()).set(SysNotice::getContent, vo.getContent()) + .set(SysNotice::getAvailable, vo.getAvailable()) + .set(SysNotice::getPublished, vo.getPublished()).set(SysNotice::getPublishTime, null) + .set(SysNotice::getReadedNum, 0).set(SysNotice::getUnReadNum, 0) + .eq(SysNotice::getId, vo.getId()); + + getBaseMapper().update(updateWrapper); + + // 无论发布还是不发布 都要删除 + Wrapper deleteLogWrapper = Wrappers.lambdaQuery(SysNoticeLog.class) + .eq(SysNoticeLog::getNoticeId, data.getId()); + sysNoticeLogService.remove(deleteLogWrapper); + + if (vo.getPublished()) { + ThreadUtil.execAsync(new DefaultRunnable(() -> { + SysNoticeService thisService = getThis(getClass()); + thisService.publish(data.getId()); + })); + } + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setExtra(vo); + } + + @OpLog(type = SystemOpLogType.class, name = "发布系统通知,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void publish(String id) { + + // 查询所有用户 + QuerySysUserVo querySysUserVo = new QuerySysUserVo(); + querySysUserVo.setAvailable(true); + List users = sysUserService.query(querySysUserVo); + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysNotice.class) + .eq(SysNotice::getId, id).set(SysNotice::getReadedNum, 0) + .set(SysNotice::getUnReadNum, users.size()).set(SysNotice::getPublished, Boolean.TRUE) + .set(SysNotice::getPublishTime, LocalDateTime.now()); + this.update(updateWrapper); + + Wrapper deleteLogWrapper = Wrappers.lambdaQuery(SysNoticeLog.class) + .eq(SysNoticeLog::getNoticeId, id); + sysNoticeLogService.remove(deleteLogWrapper); + + if (!CollectionUtil.isEmpty(users)) { + List logs = users.stream().map(t -> { + SysNoticeLog log = new SysNoticeLog(); + log.setId(IdUtil.getId()); + log.setNoticeId(id); + log.setUserId(t.getId()); + log.setReaded(Boolean.FALSE); + + return log; + }).collect(Collectors.toList()); + + sysNoticeLogService.saveBatch(logs); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void setReaded(String id, String userId) { + if (sysNoticeLogService.setReaded(id, userId)) { + getBaseMapper().setReaded(id); + } + } + + @Override + public void noticeForWs() { + WsPushData pushData = new WsPushData(); + pushData.setBizType("sysNotice"); + pushData.setAll(Boolean.TRUE); + + wsDataPusher.push(pushData); + } + + @Override + public void noticeForWs(String userId) { + WsPushData pushData = new WsPushData(); + pushData.setBizType("sysNotice"); + pushData.setIncludeUserId(userId); + + wsDataPusher.push(pushData); + } + + @Override + public void noticeForWsWithSessionId(String sessionId) { + WsPushData pushData = new WsPushData(); + pushData.setBizType("sysNotice"); + pushData.setIncludeSessionIds(Collections.singletonList(sessionId)); + + wsDataPusher.push(pushData); + } + + @CacheEvict(value = SysNotice.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } + + @Component + public static class ReloadNoticeListener implements ApplicationListener { + + @Autowired + private SysNoticeService sysNoticeService; + + @Override + public void onApplicationEvent(UserConnectEvent event) { + sysNoticeService.noticeForWsWithSessionId(event.getSessionId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupReceiverServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupReceiverServiceImpl.java new file mode 100644 index 0000000..5df4d93 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupReceiverServiceImpl.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.entity.SysNotifyGroupReceiver; +import com.lframework.starter.web.inner.mappers.system.SysNotifyGroupReceiverMapper; +import com.lframework.starter.web.inner.service.system.SysNotifyGroupReceiverService; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.stereotype.Service; + +@Service +public class SysNotifyGroupReceiverServiceImpl extends + BaseMpServiceImpl + implements SysNotifyGroupReceiverService { + + @Override + public List getReceiverIdsByGroupId(String groupId) { + Wrapper queryWrapper = Wrappers.lambdaQuery( + SysNotifyGroupReceiver.class).select(SysNotifyGroupReceiver::getReceiverId) + .eq(SysNotifyGroupReceiver::getGroupId, groupId); + return this.list(queryWrapper).stream().map(SysNotifyGroupReceiver::getReceiverId) + .collect(Collectors.toList()); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupServiceImpl.java new file mode 100644 index 0000000..6a6f0bb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysNotifyGroupServiceImpl.java @@ -0,0 +1,271 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.service.RecursionMappingService; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.entity.SysNotifyGroupReceiver; +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.inner.entity.SysUserGroupDetail; +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.inner.enums.system.SysDeptNodeType; +import com.lframework.starter.web.inner.enums.system.SysNotifyReceiverType; +import com.lframework.starter.web.inner.mappers.system.SysNotifyGroupMapper; +import com.lframework.starter.web.inner.service.system.SysNotifyGroupReceiverService; +import com.lframework.starter.web.inner.service.system.SysNotifyGroupService; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserGroupDetailService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import com.lframework.starter.web.inner.vo.system.notify.CreateSysNotifyGroupVo; +import com.lframework.starter.web.inner.vo.system.notify.QuerySysNotifyGroupVo; +import com.lframework.starter.web.inner.vo.system.notify.SysNotifyGroupSelectorVo; +import com.lframework.starter.web.inner.vo.system.notify.UpdateSysNotifyGroupVo; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysNotifyGroupServiceImpl extends + BaseMpServiceImpl implements + SysNotifyGroupService { + + @Autowired + private SysNotifyGroupReceiverService sysNotifyGroupReceiverService; + + @Autowired + private RecursionMappingService recursionMappingService; + + @Autowired + private SysUserDeptService sysUserDeptService; + + @Autowired + private SysUserRoleService sysUserRoleService; + + @Autowired + private SysUserGroupDetailService sysUserGroupDetailService; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysNotifyGroupVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysNotifyGroupVo vo) { + return getBaseMapper().query(vo); + } + + @Cacheable(value = SysNotifyGroup.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysNotifyGroup findById(String id) { + return this.getById(id); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SysNotifyGroupSelectorVo vo) { + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @OpLog(type = SystemOpLogType.class, name = "创建消息通知组,ID:{}", params = "#_result", autoSaveParams = true) + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysNotifyGroupVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysNotifyGroup.class) + .eq(SysNotifyGroup::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称不允许重复!"); + } + + SysNotifyGroup record = new SysNotifyGroup(); + record.setId(IdUtil.getId()); + record.setName(vo.getName()); + record.setReceiverType(EnumUtil.getByCode(SysNotifyReceiverType.class, vo.getReceiverType())); + record.setMessageType(StringUtil.join(StringPool.STR_SPLIT, vo.getMessageType())); + record.setAvailable(Boolean.TRUE); + record.setDescription( + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + + this.save(record); + + List receiverList = vo.getReceiverIds().stream().map(t -> { + SysNotifyGroupReceiver r = new SysNotifyGroupReceiver(); + r.setId(IdUtil.getId()); + r.setGroupId(record.getId()); + r.setReceiverId(t); + + return r; + }).collect(Collectors.toList()); + + sysNotifyGroupReceiverService.saveBatch(receiverList); + + return record.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改消息通知组,ID:{}", params = "#vo.id", autoSaveParams = true) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysNotifyGroupVo vo) { + + SysNotifyGroup record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("消息通知组不存在!"); + } + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysNotifyGroup.class) + .eq(SysNotifyGroup::getName, vo.getName()) + .ne(SysNotifyGroup::getId, record.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称不允许重复!"); + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysNotifyGroup.class) + .eq(SysNotifyGroup::getId, vo.getId()) + .set(SysNotifyGroup::getName, vo.getName()) + .set(SysNotifyGroup::getDescription, + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()) + .set(SysNotifyGroup::getReceiverType, + EnumUtil.getByCode(SysNotifyReceiverType.class, vo.getReceiverType())) + .set(SysNotifyGroup::getMessageType, + StringUtil.join(StringPool.STR_SPLIT, vo.getMessageType())) + .set(SysNotifyGroup::getAvailable, vo.getAvailable()); + this.update(updateWrapper); + + Wrapper deleteReceiverWrapper = Wrappers.lambdaQuery( + SysNotifyGroupReceiver.class).eq(SysNotifyGroupReceiver::getGroupId, record.getId()); + sysNotifyGroupReceiverService.remove(deleteReceiverWrapper); + + List receiverList = vo.getReceiverIds().stream().map(t -> { + SysNotifyGroupReceiver r = new SysNotifyGroupReceiver(); + r.setId(IdUtil.getId()); + r.setGroupId(record.getId()); + r.setReceiverId(t); + + return r; + }).collect(Collectors.toList()); + + sysNotifyGroupReceiverService.saveBatch(receiverList); + } + + @Override + public Set getReceiveUserIds(String id) { + SysNotifyGroupService thisService = ApplicationUtil.getBean(SysNotifyGroupService.class); + SysNotifyGroup notifyGroup = thisService.findById(id); + if (notifyGroup == null) { + throw new DefaultClientException("消息通知组不存在!"); + } + if (!notifyGroup.getAvailable()) { + return Collections.emptySet(); + } + + Set userIds = new HashSet<>(); + switch (notifyGroup.getReceiverType()) { + case USER: { + List receiverIds = sysNotifyGroupReceiverService.getReceiverIdsByGroupId( + notifyGroup.getId()); + userIds.addAll(receiverIds); + break; + } + + case DEPT: { + List deptIds = sysNotifyGroupReceiverService.getReceiverIdsByGroupId( + notifyGroup.getId()); + List allDeptIds = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(deptIds)) { + for (String deptId : deptIds) { + List childDeptIds = recursionMappingService.getNodeChildIds(deptId, + SysDeptNodeType.class); + allDeptIds.addAll(childDeptIds); + } + allDeptIds.addAll(deptIds); + } + + if (CollectionUtil.isNotEmpty(allDeptIds)) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUserDept.class) + .select(SysUserDept::getUserId) + .in(SysUserDept::getDeptId, allDeptIds); + List sysUserDeptList = sysUserDeptService.list(queryWrapper); + userIds.addAll( + sysUserDeptList.stream().map(SysUserDept::getUserId).collect(Collectors.toList())); + } + + break; + } + + case ROLE: { + List roleIds = sysNotifyGroupReceiverService.getReceiverIdsByGroupId( + notifyGroup.getId()); + if (CollectionUtil.isNotEmpty(roleIds)) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUserRole.class) + .select(SysUserRole::getUserId) + .in(SysUserRole::getRoleId, roleIds); + List sysUserRoleList = sysUserRoleService.list(queryWrapper); + userIds.addAll( + sysUserRoleList.stream().map(SysUserRole::getUserId).collect(Collectors.toList())); + } + + break; + } + + case USER_GROUP: { + List userGroupIds = sysNotifyGroupReceiverService.getReceiverIdsByGroupId( + notifyGroup.getId()); + if (CollectionUtil.isNotEmpty(userGroupIds)) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUserGroupDetail.class) + .select(SysUserGroupDetail::getUserId) + .in(SysUserGroupDetail::getGroupId, userGroupIds); + List sysUserRoleList = sysUserGroupDetailService.list(queryWrapper); + userIds.addAll( + sysUserRoleList.stream().map(SysUserGroupDetail::getUserId).collect(Collectors.toList())); + } + + break; + } + default: + throw new DefaultClientException("消息通知组接收者类型错误!"); + } + + return userIds; + } + + @CacheEvict(value = SysNotifyGroup.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysOpenDomainServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysOpenDomainServiceImpl.java new file mode 100644 index 0000000..a48d5c1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysOpenDomainServiceImpl.java @@ -0,0 +1,111 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.inner.mappers.system.SysOpenDomainMapper; +import com.lframework.starter.web.inner.service.system.SysOpenDomainService; +import com.lframework.starter.web.inner.vo.system.open.CreateSysOpenDomainVo; +import com.lframework.starter.web.inner.vo.system.open.QuerySysOpenDomainVo; +import com.lframework.starter.web.inner.vo.system.open.SysOpenDomainSelectorVo; +import com.lframework.starter.web.inner.vo.system.open.UpdateSysOpenDomainSecretVo; +import com.lframework.starter.web.inner.vo.system.open.UpdateSysOpenDomainVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@DS("master") +@Service +public class SysOpenDomainServiceImpl extends + BaseMpServiceImpl + implements SysOpenDomainService { + + @Override + public PageResult query(QuerySysOpenDomainVo vo) { + PageHelperUtil.startPage(vo); + List datas = getBaseMapper().query(vo); + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public PageResult selector(SysOpenDomainSelectorVo vo) { + PageHelperUtil.startPage(vo); + List datas = getBaseMapper().selector(vo); + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = SysOpenDomain.CACHE_NAME, key = "#id", unless = "#result == null") + @Override + public SysOpenDomain findById(Integer id) { + return this.getById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysOpenDomainVo vo) { + SysOpenDomain data = new SysOpenDomain(); + data.setName(vo.getName()); + data.setApiSecret(vo.getApiSecret()); + data.setAvailable(Boolean.TRUE); + data.setDescription( + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + data.setTenantId(vo.getTenantId()); + + this.save(data); + + return data.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysOpenDomainVo vo) { + + SysOpenDomain record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("开放域不存在!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(SysOpenDomain.class) + .set(SysOpenDomain::getName, vo.getName()) + .set(SysOpenDomain::getAvailable, vo.getAvailable()) + .set(SysOpenDomain::getDescription, + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()) + .set(SysOpenDomain::getTenantId, vo.getTenantId()) + .eq(SysOpenDomain::getId, vo.getId()); + + this.update(updateWrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateApiSecret(UpdateSysOpenDomainSecretVo vo) { + SysOpenDomain record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("开放域不存在!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(SysOpenDomain.class) + .set(SysOpenDomain::getApiSecret, vo.getApiSecret()) + .eq(SysOpenDomain::getId, vo.getId()); + + this.update(updateWrapper); + } + + @CacheEvict(value = SysOpenDomain.CACHE_NAME, key = "#key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysParameterServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysParameterServiceImpl.java new file mode 100644 index 0000000..a18e59a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysParameterServiceImpl.java @@ -0,0 +1,220 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.exceptions.impl.ParameterNotFoundException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.service.SysConfService; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.inner.entity.SysParameter; +import com.lframework.starter.web.inner.vo.system.parameter.CreateSysParameterVo; +import com.lframework.starter.web.inner.vo.system.parameter.QuerySysParameterVo; +import com.lframework.starter.web.inner.vo.system.parameter.UpdateSysParameterVo; +import com.lframework.starter.web.inner.mappers.system.SysParameterMapper; +import com.lframework.starter.web.inner.service.system.SysParameterService; +import com.lframework.starter.web.core.utils.OpLogUtil; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysParameterServiceImpl extends + BaseMpServiceImpl implements SysParameterService, + SysConfService { + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysParameterVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysParameterVo vo) { + + return getBaseMapper().query(vo); + } + + @Cacheable(value = SysParameter.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysParameter findById(Long id) { + + return getBaseMapper().selectById(id); + } + + @Cacheable(value = SysParameter.CACHE_NAME, key = "@cacheVariables.tenantId() + #key", unless = "#result == null") + @Override + public String findByKey(String key) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(SysParameter.class) + .eq(SysParameter::getPmKey, key); + SysParameter data = getBaseMapper().selectOne(queryWrapper); + + return data == null ? null : data.getPmValue(); + } + + @Override + public String findRequiredByKey(String key) throws ParameterNotFoundException { + SysConfService thisService = getThis(this.getClass()); + String data = thisService.findByKey(key); + if (data == null) { + throw new ParameterNotFoundException(); + } + + return data; + } + + @Override + public String findByKey(String key, String defaultValue) { + SysConfService thisService = getThis(this.getClass()); + String data = thisService.findByKey(key); + if (data == null) { + return defaultValue; + } + + return data; + } + + @OpLog(type = SystemOpLogType.class, name = "新增系统参数,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public Long create(CreateSysParameterVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysParameter.class) + .eq(SysParameter::getPmKey, vo.getPmKey()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("键重复,请重新输入!"); + } + SysParameter data = new SysParameter(); + data.setPmKey(vo.getPmKey()); + if (!StringUtil.isEmpty(vo.getPmValue())) { + data.setPmValue(vo.getPmValue()); + } + if (!StringUtil.isBlank(vo.getDescription())) { + data.setDescription(vo.getDescription()); + } + + getBaseMapper().insert(data); + + OpLogUtil.setVariable("id", String.valueOf(data.getId())); + OpLogUtil.setExtra(vo); + + return data.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改系统参数,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysParameterVo vo) { + + SysParameter data = getBaseMapper().selectById(vo.getId()); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("系统参数不存在!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(SysParameter.class) + .set(SysParameter::getPmValue, StringUtil.isBlank(vo.getPmValue()) ? null : vo.getPmValue()) + .set(SysParameter::getDescription, + StringUtil.isBlank(vo.getDescription()) ? null : vo.getDescription()) + .eq(SysParameter::getId, vo.getId()); + + getBaseMapper().update(updateWrapper); + + OpLogUtil.setVariable("id", String.valueOf(data.getId())); + OpLogUtil.setExtra(vo); + } + + @OpLog(type = SystemOpLogType.class, name = "删除系统参数,ID:{}", params = {"#id"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(Long id) { + + getBaseMapper().deleteById(id); + } + + @Override + public Boolean getBoolean(String key) { + SysConfService thisService = getThis(getClass()); + String value = thisService.findByKey(key); + return value == null ? null : "true".equalsIgnoreCase(value); + } + + @Override + public Boolean getBoolean(String key, Boolean defaultValue) { + Boolean value = getBoolean(key); + if (value == null) { + return defaultValue; + } + + return value; + } + + @Override + public Integer getInteger(String key) { + SysConfService thisService = getThis(getClass()); + String value = thisService.findByKey(key); + try { + return value == null ? null : Integer.valueOf(value); + } catch (NumberFormatException e) { + // 转换失败 + return null; + } + } + + @Override + public Integer getInteger(String key, Integer defaultValue) { + Integer value = getInteger(key); + if (value == null) { + return defaultValue; + } + + return value; + } + + @Override + public Long getLong(String key) { + SysConfService thisService = getThis(getClass()); + String value = thisService.findByKey(key); + try { + return value == null ? null : Long.valueOf(value); + } catch (NumberFormatException e) { + // 转换失败 + return null; + } + } + + @Override + public Long getLong(String key, Long defaultValue) { + Long value = getLong(key); + if (value == null) { + return defaultValue; + } + + return value; + } + + @CacheEvict(value = SysParameter.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleCategoryServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleCategoryServiceImpl.java new file mode 100644 index 0000000..d67619f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleCategoryServiceImpl.java @@ -0,0 +1,132 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import com.lframework.starter.web.inner.mappers.system.SysRoleCategoryMapper; +import com.lframework.starter.web.inner.service.system.SysRoleCategoryService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.vo.system.role.category.CreateSysRoleCategoryVo; +import com.lframework.starter.web.inner.vo.system.role.category.SysRoleCategorySelectorVo; +import com.lframework.starter.web.inner.vo.system.role.category.UpdateSysRoleCategoryVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysRoleCategoryServiceImpl extends + BaseMpServiceImpl implements + SysRoleCategoryService { + + @Autowired + private SysRoleService sysRoleService; + + @Cacheable(value = SysRoleCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + 'all'") + @Override + public List queryList() { + return getBaseMapper().query(); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SysRoleCategorySelectorVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Cacheable(value = SysRoleCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysRoleCategory findById(String id) { + return getBaseMapper().selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysRoleCategoryVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysRoleCategory.class) + .eq(SysRoleCategory::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysRoleCategory.class) + .eq(SysRoleCategory::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysRoleCategory record = new SysRoleCategory(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.save(record); + + return record.getId(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysRoleCategoryVo vo) { + Wrapper checkWrapper = Wrappers.lambdaQuery(SysRoleCategory.class) + .eq(SysRoleCategory::getCode, vo.getCode()) + .ne(SysRoleCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysRoleCategory.class) + .eq(SysRoleCategory::getName, vo.getName()) + .ne(SysRoleCategory::getId, vo.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysRoleCategory record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("角色分类不存在!"); + } + + record.setCode(vo.getCode()); + record.setName(vo.getName()); + + this.updateById(record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String id) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(SysRole.class) + .eq(SysRole::getCategoryId, id); + if (sysRoleService.count(queryWrapper) > 0) { + throw new DefaultClientException("此分类下存在角色,无法删除!"); + } + + this.removeById(id); + } + + @CacheEvict(value = SysRoleCategory.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleMenuServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleMenuServiceImpl.java new file mode 100644 index 0000000..4e428af --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleMenuServiceImpl.java @@ -0,0 +1,122 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysRoleMenu; +import com.lframework.starter.web.inner.enums.system.SysMenuDisplay; +import com.lframework.starter.web.inner.mappers.system.SysRoleMenuMapper; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.inner.service.system.SysRoleMenuService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.vo.system.role.SysRoleMenuSettingVo; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysRoleMenuServiceImpl extends + BaseMpServiceImpl implements SysRoleMenuService { + + @Autowired + private SysRoleService sysRoleService; + + @Autowired + private SysMenuService sysMenuService; + + @OpLog(type = SystemOpLogType.class, name = "角色授权菜单,角色ID:{},菜单ID:{}", params = { + "#vo.roleIds", + "#vo.menuIds"}, loopFormat = true) + @Transactional(rollbackFor = Exception.class) + @Override + public void setting(SysRoleMenuSettingVo vo) { + + for (String roleId : vo.getRoleIds()) { + SysRole role = sysRoleService.findById(roleId); + if (ObjectUtil.isNull(role)) { + throw new DefaultClientException("角色不存在!"); + } + + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(role.getPermission())) { + throw new DefaultClientException( + "角色【" + role.getName() + "】的权限为【" + SecurityConstants.PERMISSION_ADMIN_NAME + + "】,不允许授权!"); + } + + this.doSetting(roleId, vo.getMenuIds()); + } + } + + protected void doSetting(String roleId, List menuIds) { + + Wrapper deleteWrapper = Wrappers.lambdaQuery(SysRoleMenu.class) + .eq(SysRoleMenu::getRoleId, roleId); + getBaseMapper().delete(deleteWrapper); + + List records = new ArrayList<>(); + if (!CollectionUtil.isEmpty(menuIds)) { + Set menuIdSet = new HashSet<>(menuIds); + + // 根据所有的menuIds查询父级ID,父级ID需要添加 + for (String menuId : menuIds) { + menuIdSet.addAll(sysMenuService.getParentMenuIds(menuId)); + } + + List allMenus = menuIdSet.stream().map(sysMenuService::findById).collect( + Collectors.toList()); + // 需要判断每一个类型是目录的菜单是否都包含菜单或权限的子菜单 + for (SysMenu menu : allMenus) { + if (menu.getDisplay() != SysMenuDisplay.CATALOG) { + continue; + } + + List parentIds = new ArrayList<>(); + parentIds.add(menu.getId()); + List childrenMenus = new ArrayList<>(); + while (true) { + List children = allMenus.stream() + .filter(t -> parentIds.contains(t.getParentId())).collect( + Collectors.toList()); + if (CollectionUtil.isEmpty(children)) { + break; + } + childrenMenus.addAll(children); + parentIds.clear(); + parentIds.addAll(children.stream().map(SysMenu::getId).collect(Collectors.toList())); + } + + if (childrenMenus.stream().noneMatch(t -> t.getDisplay() == SysMenuDisplay.FUNCTION + || t.getDisplay() == SysMenuDisplay.PERMISSION)) { + throw new DefaultClientException("菜单:“" + menu.getTitle() + "”授权失败,该菜单的类型是“" + + SysMenuDisplay.CATALOG.getDesc() + "”,必须包含子菜单!"); + } + } + for (String menuId : menuIdSet) { + SysRoleMenu record = new SysRoleMenu(); + record.setId(IdUtil.getId()); + record.setRoleId(roleId); + record.setMenuId(menuId); + + records.add(record); + } + } + + if (CollectionUtil.isNotEmpty(records)) { + this.saveBatch(records); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleServiceImpl.java new file mode 100644 index 0000000..b9ab11d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysRoleServiceImpl.java @@ -0,0 +1,289 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.mappers.system.SysRoleMapper; +import com.lframework.starter.web.inner.service.system.SysMenuService; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.vo.system.role.CreateSysRoleVo; +import com.lframework.starter.web.inner.vo.system.role.QuerySysRoleVo; +import com.lframework.starter.web.inner.vo.system.role.SysRoleSelectorVo; +import com.lframework.starter.web.inner.vo.system.role.UpdateSysRoleVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysRoleServiceImpl extends BaseMpServiceImpl implements + SysRoleService { + + @Autowired + private SysMenuService sysMenuService; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysRoleVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysRoleVo vo) { + + return this.doQuery(vo); + } + + @Cacheable(value = SysRole.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysRole findById(String id) { + + return this.doGetById(id); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SysRoleSelectorVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.doSelector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @OpLog(type = SystemOpLogType.class, name = "停用角色,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(String id) { + + SysRole role = this.findById(id); + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(role.getPermission())) { + throw new DefaultClientException( + "角色【" + role.getName() + "】的权限为【" + SecurityConstants.PERMISSION_ADMIN_NAME + + "】,不允许停用!"); + } + + this.doUnable(id); + } + + @OpLog(type = SystemOpLogType.class, name = "启用角色,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(String id) { + + SysRole role = this.findById(id); + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(role.getPermission())) { + throw new DefaultClientException( + "角色【" + role.getName() + "】的权限为【" + SecurityConstants.PERMISSION_ADMIN_NAME + + "】,不允许启用!"); + } + + this.doEnable(id); + } + + @OpLog(type = SystemOpLogType.class, name = "新增角色,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysRoleVo vo) { + + if (!StringUtil.isBlank(vo.getPermission())) { + + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(vo.getPermission())) { + throw new DefaultClientException( + "权限【" + SecurityConstants.PERMISSION_ADMIN_NAME + "】为内置权限,请修改!"); + } + + // 这里的权限不能与菜单权限重复 + if (sysMenuService.existPermission(vo.getPermission())) { + throw new DefaultClientException( + "权限【" + vo.getPermission() + "】为菜单权限,请修改!"); + } + } + + SysRole data = this.doCreate(vo); + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + + return data.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改角色,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysRoleVo vo) { + + SysRole data = this.findById(vo.getId()); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("角色不存在!"); + } + + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(data.getPermission())) { + throw new DefaultClientException("角色【" + data.getName() + "】为内置角色,不允许修改!"); + } + + if (!StringUtil.isBlank(vo.getPermission())) { + + if (SecurityConstants.PERMISSION_ADMIN_NAME.equals(vo.getPermission())) { + throw new DefaultClientException( + "权限【" + SecurityConstants.PERMISSION_ADMIN_NAME + "】为内置权限,请修改!"); + } + + // 这里的权限不能与菜单权限重复 + if (sysMenuService.existPermission(vo.getPermission())) { + throw new DefaultClientException( + "权限【" + vo.getPermission() + "】为菜单权限,请修改!"); + } + } + + this.doUpdate(vo); + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + } + + @Override + public List getByUserId(String userId) { + + return this.doGetByUserId(userId); + } + + protected List doQuery(QuerySysRoleVo vo) { + + return getBaseMapper().query(vo); + } + + protected SysRole doGetById(String id) { + + return getBaseMapper().findById(id); + } + + protected List doSelector(SysRoleSelectorVo vo) { + + return getBaseMapper().selector(vo); + } + + protected void doUnable(String id) { + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysRole.class) + .set(SysRole::getAvailable, Boolean.FALSE).eq(SysRole::getId, id); + getBaseMapper().update(updateWrapper); + } + + protected void doEnable(String id) { + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysRole.class) + .set(SysRole::getAvailable, Boolean.TRUE).eq(SysRole::getId, id); + getBaseMapper().update(updateWrapper); + } + + protected SysRole doCreate(CreateSysRoleVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysRole.class) + .eq(SysRole::getCode, vo.getCode()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysRole.class) + .eq(SysRole::getName, vo.getName()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + SysRole data = new SysRole(); + data.setId(IdUtil.getId()); + data.setCode(vo.getCode()); + data.setName(vo.getName()); + data.setCategoryId(vo.getCategoryId()); + + if (!StringUtil.isBlank(vo.getPermission())) { + + data.setPermission(vo.getPermission()); + } + + data.setAvailable(Boolean.TRUE); + data.setDescription( + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + + getBaseMapper().insert(data); + + return data; + } + + protected void doUpdate(UpdateSysRoleVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysRole.class) + .eq(SysRole::getCode, vo.getCode()).ne(SysRole::getId, vo.getId()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysRole.class) + .eq(SysRole::getName, vo.getName()) + .ne(SysRole::getId, vo.getId()); + if (getBaseMapper().selectCount(checkWrapper) > 0) { + throw new DefaultClientException("名称重复,请重新输入!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(SysRole.class) + .set(SysRole::getCode, vo.getCode()).set(SysRole::getName, vo.getName()) + .set(SysRole::getPermission, null) + .set(SysRole::getCategoryId, vo.getCategoryId()) + .set(SysRole::getAvailable, vo.getAvailable()) + .set(SysRole::getDescription, + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()) + .eq(SysRole::getId, vo.getId()); + + if (!StringUtil.isBlank(vo.getPermission())) { + + updateWrapper.set(SysRole::getPermission, vo.getPermission()); + } + + getBaseMapper().update(updateWrapper); + } + + protected List doGetByUserId(String userId) { + + return getBaseMapper().getByUserId(userId); + } + + @CacheEvict(value = SysRole.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysSiteMessageServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysSiteMessageServiceImpl.java new file mode 100644 index 0000000..837c957 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysSiteMessageServiceImpl.java @@ -0,0 +1,120 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.websocket.components.WsDataPusher; +import com.lframework.starter.web.websocket.events.UserConnectEvent; +import com.lframework.starter.web.inner.dto.message.site.SiteMessageDto; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import com.lframework.starter.web.inner.mappers.system.SysSiteMessageMapper; +import com.lframework.starter.web.inner.service.system.SysSiteMessageService; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageByUserVo; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageVo; +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysSiteMessageServiceImpl extends + BaseMpServiceImpl + implements SysSiteMessageService { + + @Autowired + private WsDataPusher wsDataPusher; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysSiteMessageVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysSiteMessageVo vo) { + return getBaseMapper().query(vo); + } + + @Override + public PageResult queryByUser(Integer pageIndex, Integer pageSize, + QuerySysSiteMessageByUserVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().queryByUser(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public SiteMessageDto getContent(String id) { + SysSiteMessage data = getById(id); + if (data == null) { + return null; + } + return new SiteMessageDto(data); + } + + @Override + public SysSiteMessage findById(String id) { + return getById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean setReaded(String id) { + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysSiteMessage.class) + .set(SysSiteMessage::getReaded, true) + .set(SysSiteMessage::getReadTime, LocalDateTime.now()) + .eq(SysSiteMessage::getId, id).eq(SysSiteMessage::getReaded, false); + return update(updateWrapper); + } + + @Override + public void noticeForWs(String userId) { + WsPushData pushData = new WsPushData(); + pushData.setBizType("siteMessage"); + pushData.setIncludeUserId(userId); + + wsDataPusher.push(pushData); + } + + @Override + public void noticeForWsWithSessionId(String sessionId) { + WsPushData pushData = new WsPushData(); + pushData.setBizType("siteMessage"); + pushData.setIncludeSessionIds(Collections.singletonList(sessionId)); + + wsDataPusher.push(pushData); + } + + @Component + public static class ReloadSiteMessageListener implements ApplicationListener { + + @Autowired + private SysSiteMessageService sysSiteMessageService; + + @Override + public void onApplicationEvent(UserConnectEvent event) { + sysSiteMessageService.noticeForWsWithSessionId(event.getSessionId()); + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserDeptServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserDeptServiceImpl.java new file mode 100644 index 0000000..673066b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserDeptServiceImpl.java @@ -0,0 +1,94 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.inner.mappers.system.SysUserDeptMapper; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.vo.system.dept.SysUserDeptSettingVo; +import java.io.Serializable; +import java.util.List; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysUserDeptServiceImpl extends + BaseMpServiceImpl implements SysUserDeptService { + + @OpLog(type = SystemOpLogType.class, name = "用户设置部门,用户ID:{},部门ID:{}", params = {"#vo.userId", + "#vo.deptIds"}, loopFormat = true) + @Transactional(rollbackFor = Exception.class) + @Override + public void setting(SysUserDeptSettingVo vo) { + + this.doSetting(vo); + + SysUserDeptService thisService = getThis(this.getClass()); + thisService.cleanCacheByKey(vo.getUserId()); + } + + @Cacheable(value = SysUserDept.CACHE_NAME, key = "@cacheVariables.tenantId() + #userId") + @Override + public List getByUserId(String userId) { + + return doGetByUserId(userId); + } + + @Override + public List getByDeptId(String deptId) { + + return doGetByDeptId(deptId); + } + + @Override + public Boolean hasByDeptId(String deptId) { + + return doHasByDeptId(deptId); + } + + protected void doSetting(SysUserDeptSettingVo vo) { + + Wrapper deleteWrapper = Wrappers.lambdaQuery(SysUserDept.class) + .eq(SysUserDept::getUserId, vo.getUserId()); + getBaseMapper().delete(deleteWrapper); + + if (!CollectionUtil.isEmpty(vo.getDeptIds())) { + for (String deptId : vo.getDeptIds()) { + SysUserDept record = new SysUserDept(); + record.setId(IdUtil.getId()); + record.setUserId(vo.getUserId()); + record.setDeptId(deptId); + + getBaseMapper().insert(record); + } + } + } + + protected List doGetByUserId(String userId) { + + return getBaseMapper().getByUserId(userId); + } + + protected List doGetByDeptId(String deptId) { + + return getBaseMapper().getByDeptId(deptId); + } + + protected Boolean doHasByDeptId(String deptId) { + + return getBaseMapper().hasByDeptId(deptId) != null; + } + + @CacheEvict(value = SysUserDept.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupDetailServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupDetailServiceImpl.java new file mode 100644 index 0000000..7d5bda4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupDetailServiceImpl.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.entity.SysUserGroupDetail; +import com.lframework.starter.web.inner.mappers.system.SysUserGroupDetailMapper; +import com.lframework.starter.web.inner.service.system.SysUserGroupDetailService; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.stereotype.Service; + +@Service +public class SysUserGroupDetailServiceImpl extends + BaseMpServiceImpl + implements SysUserGroupDetailService { + + @Override + public List getUserIdsByGroupId(String groupId) { + Wrapper queryWrapper = Wrappers.lambdaQuery( + SysUserGroupDetail.class).select(SysUserGroupDetail::getUserId) + .eq(SysUserGroupDetail::getGroupId, groupId); + return this.list(queryWrapper).stream().map(SysUserGroupDetail::getUserId) + .collect(Collectors.toList()); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupServiceImpl.java new file mode 100644 index 0000000..3125ff4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserGroupServiceImpl.java @@ -0,0 +1,170 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import com.lframework.starter.web.inner.entity.SysUserGroupDetail; +import com.lframework.starter.web.inner.mappers.system.SysUserGroupMapper; +import com.lframework.starter.web.inner.service.system.SysUserGroupDetailService; +import com.lframework.starter.web.inner.service.system.SysUserGroupService; +import com.lframework.starter.web.inner.vo.system.user.group.CreateSysUserGroupVo; +import com.lframework.starter.web.inner.vo.system.user.group.QuerySysUserGroupVo; +import com.lframework.starter.web.inner.vo.system.user.group.SysUserGroupSelectorVo; +import com.lframework.starter.web.inner.vo.system.user.group.UpdateSysUserGroupVo; +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysUserGroupServiceImpl extends + BaseMpServiceImpl implements + SysUserGroupService { + + @Autowired + private SysUserGroupDetailService sysUserGroupDetailService; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysUserGroupVo vo) { + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysUserGroupVo vo) { + return getBaseMapper().query(vo); + } + + @Cacheable(value = SysUserGroup.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysUserGroup findById(String id) { + return this.getById(id); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SysUserGroupSelectorVo vo) { + + PageHelperUtil.startPage(pageIndex, pageSize); + List datas = getBaseMapper().selector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @OpLog(type = SystemOpLogType.class, name = "创建用户组,ID:{}", params = "#_result", autoSaveParams = true) + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysUserGroupVo vo) { + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysUserGroup.class) + .eq(SysUserGroup::getCode, vo.getCode()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号不允许重复!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysUserGroup.class) + .eq(SysUserGroup::getName, vo.getName()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称不允许重复!"); + } + + SysUserGroup record = new SysUserGroup(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + record.setAvailable(Boolean.TRUE); + record.setDescription( + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + + this.save(record); + + List detailList = vo.getUserIds().stream().map(t -> { + SysUserGroupDetail r = new SysUserGroupDetail(); + r.setId(IdUtil.getId()); + r.setGroupId(record.getId()); + r.setUserId(t); + + return r; + }).collect(Collectors.toList()); + + sysUserGroupDetailService.saveBatch(detailList); + + return record.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改用户组,ID:{}", params = "#vo.id", autoSaveParams = true) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysUserGroupVo vo) { + + SysUserGroup record = this.getById(vo.getId()); + if (record == null) { + throw new DefaultClientException("用户组不存在!"); + } + + Wrapper checkWrapper = Wrappers.lambdaQuery(SysUserGroup.class) + .eq(SysUserGroup::getCode, vo.getCode()) + .ne(SysUserGroup::getId, record.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("编号不允许重复!"); + } + + checkWrapper = Wrappers.lambdaQuery(SysUserGroup.class) + .eq(SysUserGroup::getName, vo.getName()) + .ne(SysUserGroup::getId, record.getId()); + if (this.count(checkWrapper) > 0) { + throw new DefaultClientException("名称不允许重复!"); + } + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysUserGroup.class) + .eq(SysUserGroup::getId, vo.getId()) + .set(SysUserGroup::getName, vo.getName()) + .set(SysUserGroup::getDescription, + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()) + .set(SysUserGroup::getAvailable, vo.getAvailable()); + this.update(updateWrapper); + + Wrapper deleteDetailWrapper = Wrappers.lambdaQuery( + SysUserGroupDetail.class).eq(SysUserGroupDetail::getGroupId, record.getId()); + sysUserGroupDetailService.remove(deleteDetailWrapper); + + List receiverList = vo.getUserIds().stream().map(t -> { + SysUserGroupDetail r = new SysUserGroupDetail(); + r.setId(IdUtil.getId()); + r.setGroupId(record.getId()); + r.setUserId(t); + + return r; + }).collect(Collectors.toList()); + + sysUserGroupDetailService.saveBatch(receiverList); + } + + @CacheEvict(value = SysUserGroup.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserRoleServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserRoleServiceImpl.java new file mode 100644 index 0000000..e25670a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserRoleServiceImpl.java @@ -0,0 +1,113 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.CollectionUtil; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.core.components.security.SecurityConstants; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.inner.mappers.system.SysUserRoleMapper; +import com.lframework.starter.web.inner.service.system.SysRoleService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.system.user.SysUserRoleSettingVo; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysUserRoleServiceImpl extends + BaseMpServiceImpl + implements SysUserRoleService { + + @Autowired + private SysRoleService sysRoleService; + + @Autowired + private SysUserService sysUserService; + + @OpLog(type = SystemOpLogType.class, name = "用户授权角色,用户ID:{},角色ID:{}", params = { + "#vo.userIds", + "#vo.roleIds"}, loopFormat = true) + @Transactional(rollbackFor = Exception.class) + @Override + public void setting(SysUserRoleSettingVo vo) { + + for (String userId : vo.getUserIds()) { + this.doSetting(userId, vo.getRoleIds()); + } + } + + @Override + public List getByUserId(String userId) { + + return doGetByUserId(userId); + } + + @Override + public List getByRoleId(String roleId) { + + return doGetByRoleId(roleId); + } + + protected void doSetting(String userId, List roleIds) { + + Wrapper deleteWrapper = Wrappers.lambdaQuery(SysUserRole.class) + .eq(SysUserRole::getUserId, userId); + if (!SecurityUtil.getCurrentUser().isAdmin()) { + List checkList = this.list(deleteWrapper); + if (!CollectionUtil.isEmpty(checkList)) { + List roleList = sysRoleService.listByIds( + checkList.stream().map(SysUserRole::getRoleId) + .collect(Collectors.toList())); + if (roleList.stream() + .anyMatch(t -> SecurityConstants.PERMISSION_ADMIN_NAME.equals(t.getPermission()))) { + SysUser user = sysUserService.findById(userId); + throw new DefaultClientException( + "用户【" + user.getName() + "】的权限为管理员,非管理员用户无法为管理员用户授权!"); + } + } + } + getBaseMapper().delete(deleteWrapper); + + if (!CollectionUtil.isEmpty(roleIds)) { + Set roleIdSet = new HashSet<>(roleIds); + + for (String roleId : roleIdSet) { + SysRole role = sysRoleService.findById(roleId); + if (ObjectUtil.isNull(role)) { + throw new DefaultClientException("角色不存在,请检查!"); + } + + SysUserRole record = new SysUserRole(); + record.setId(IdUtil.getId()); + record.setUserId(userId); + record.setRoleId(role.getId()); + + getBaseMapper().insert(record); + } + } + } + + protected List doGetByUserId(String userId) { + + return getBaseMapper().getByUserId(userId); + } + + protected List doGetByRoleId(String roleId) { + + return getBaseMapper().getByRoleId(roleId); + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserServiceImpl.java new file mode 100644 index 0000000..3dd1b69 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserServiceImpl.java @@ -0,0 +1,411 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.common.constants.StringPool; +import com.lframework.starter.common.exceptions.impl.DefaultClientException; +import com.lframework.starter.common.utils.Assert; +import com.lframework.starter.common.utils.ObjectUtil; +import com.lframework.starter.common.utils.RegUtil; +import com.lframework.starter.common.utils.StringUtil; +import com.lframework.starter.web.core.components.security.PasswordEncoderWrapper; +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.utils.EnumUtil; +import com.lframework.starter.web.core.utils.IdUtil; +import com.lframework.starter.web.core.utils.PageHelperUtil; +import com.lframework.starter.web.core.utils.PageResultUtil; +import com.lframework.starter.web.core.annotations.oplog.OpLog; +import com.lframework.starter.web.inner.components.oplog.SystemOpLogType; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.enums.system.Gender; +import com.lframework.starter.web.inner.service.GenerateCodeService; +import com.lframework.starter.web.core.utils.OpLogUtil; +import com.lframework.starter.web.inner.dto.system.UserInfoDto; +import com.lframework.starter.web.inner.mappers.system.SysUserMapper; +import com.lframework.starter.web.inner.service.system.SysUserDeptService; +import com.lframework.starter.web.inner.service.system.SysUserRoleService; +import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.system.dept.SysUserDeptSettingVo; +import com.lframework.starter.web.inner.vo.system.user.CreateSysUserVo; +import com.lframework.starter.web.inner.vo.system.user.QuerySysUserVo; +import com.lframework.starter.web.inner.vo.system.user.RegistUserVo; +import com.lframework.starter.web.inner.vo.system.user.SysUserRoleSettingVo; +import com.lframework.starter.web.inner.vo.system.user.SysUserSelectorVo; +import com.lframework.starter.web.inner.vo.system.user.UpdateSysUserVo; +import java.io.Serializable; +import java.util.Collections; +import java.util.List; +import lombok.NonNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class SysUserServiceImpl extends BaseMpServiceImpl implements + SysUserService { + + @Autowired + private PasswordEncoderWrapper encoderWrapper; + + @Autowired + private SysUserDeptService sysUserDeptService; + + @Autowired + private SysUserRoleService sysUserRoleService; + + @Autowired + private GenerateCodeService generateCodeService; + + private static final Integer CODE_KEY = 1; + + @Override + public PageResult query(Integer pageIndex, Integer pageSize, + QuerySysUserVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.doQuery(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Override + public List query(QuerySysUserVo vo) { + + return this.doQuery(vo); + } + + @Cacheable(value = SysUser.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") + @Override + public SysUser findById(String id) { + + return this.doGetById(id); + } + + @Override + public SysUser findByCode(String code) { + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUser.class).eq(SysUser::getCode, code); + return getOne(queryWrapper); + } + + @OpLog(type = SystemOpLogType.class, name = "启用用户,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void enable(String id) { + + this.doEnable(id); + } + + @OpLog(type = SystemOpLogType.class, name = "停用用户,ID:{}", params = "#id") + @Transactional(rollbackFor = Exception.class) + @Override + public void unable(String id) { + + this.doUnable(id); + } + + @OpLog(type = SystemOpLogType.class, name = "新增用户,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public String create(CreateSysUserVo vo) { + + SysUser record = this.doCreate(vo); + + SysUserDeptSettingVo deptSettingVo = new SysUserDeptSettingVo(); + deptSettingVo.setUserId(record.getId()); + deptSettingVo.setDeptIds(vo.getDeptIds()); + sysUserDeptService.setting(deptSettingVo); + + SysUserRoleSettingVo roleSettingVo = new SysUserRoleSettingVo(); + roleSettingVo.setUserIds(Collections.singletonList(record.getId())); + roleSettingVo.setRoleIds(vo.getRoleIds()); + sysUserRoleService.setting(roleSettingVo); + + OpLogUtil.setVariable("id", record.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + + return record.getId(); + } + + @OpLog(type = SystemOpLogType.class, name = "修改用户,ID:{}, 编号:{}", params = {"#id", + "#code"}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(UpdateSysUserVo vo) { + + SysUser data = this.findById(vo.getId()); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("用户不存在!"); + } + + if (!StringUtil.isBlank(vo.getPassword())) { + if (!RegUtil.isMatch(PatternPool.PATTERN_PASSWORD, vo.getPassword())) { + throw new DefaultClientException( + "密码长度必须为5-16位,只允许包含大写字母、小写字母、数字、下划线!"); + } + } + + if (!StringUtil.isBlank(vo.getTelephone())) { + if (!RegUtil.isMatch(PatternPool.PATTERN_CN_TEL, vo.getTelephone())) { + throw new DefaultClientException("联系电话格式不正确!"); + } + } + + this.doUpdate(vo); + + SysUserDeptSettingVo deptSettingVo = new SysUserDeptSettingVo(); + deptSettingVo.setUserId(vo.getId()); + deptSettingVo.setDeptIds(vo.getDeptIds()); + sysUserDeptService.setting(deptSettingVo); + + SysUserRoleSettingVo roleSettingVo = new SysUserRoleSettingVo(); + roleSettingVo.setUserIds(Collections.singletonList(vo.getId())); + roleSettingVo.setRoleIds(vo.getRoleIds()); + sysUserRoleService.setting(roleSettingVo); + + OpLogUtil.setVariable("id", data.getId()); + OpLogUtil.setVariable("code", vo.getCode()); + OpLogUtil.setExtra(vo); + } + + @Override + public PageResult selector(Integer pageIndex, Integer pageSize, + SysUserSelectorVo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + + List datas = this.doSelector(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void regist(RegistUserVo vo) { + + this.doRegist(vo); + } + + protected List doQuery(QuerySysUserVo vo) { + + return getBaseMapper().query(vo); + } + + protected SysUser doGetById(String id) { + + return getBaseMapper().findById(id); + } + + protected void doEnable(String id) { + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysUser.class) + .set(SysUser::getAvailable, Boolean.TRUE).eq(SysUser::getId, id); + getBaseMapper().update(updateWrapper); + } + + protected void doUnable(String id) { + + Wrapper updateWrapper = Wrappers.lambdaUpdate(SysUser.class) + .set(SysUser::getAvailable, Boolean.FALSE).eq(SysUser::getId, id); + getBaseMapper().update(updateWrapper); + } + + protected SysUser doCreate(CreateSysUserVo vo) { + + Wrapper checkCodeWrapper = Wrappers.lambdaQuery(SysUser.class) + .eq(SysUser::getCode, vo.getCode()); + if (getBaseMapper().selectCount(checkCodeWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + Wrapper checkUsernameWrapper = Wrappers.lambdaQuery(SysUser.class) + .eq(SysUser::getUsername, vo.getUsername()); + if (getBaseMapper().selectCount(checkUsernameWrapper) > 0) { + throw new DefaultClientException("用户名重复,请重新输入!"); + } + + SysUser record = new SysUser(); + record.setId(IdUtil.getId()); + record.setCode(vo.getCode()); + record.setName(vo.getName()); + record.setUsername(vo.getUsername()); + record.setPassword(encoderWrapper.getEncoder().encode(vo.getPassword())); + if (!StringUtil.isBlank(vo.getEmail())) { + record.setEmail(vo.getEmail()); + } + + if (!StringUtil.isBlank(vo.getTelephone())) { + record.setTelephone(vo.getTelephone()); + } + + record.setGender(EnumUtil.getByCode(Gender.class, vo.getGender())); + record.setAvailable(Boolean.TRUE); + record.setDescription( + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + + getBaseMapper().insert(record); + + return record; + } + + protected void doUpdate(UpdateSysUserVo vo) { + + Wrapper checkCodeWrapper = Wrappers.lambdaQuery(SysUser.class) + .eq(SysUser::getCode, vo.getCode()).ne(SysUser::getId, vo.getId()); + if (getBaseMapper().selectCount(checkCodeWrapper) > 0) { + throw new DefaultClientException("编号重复,请重新输入!"); + } + + Wrapper checkUsernameWrapper = Wrappers.lambdaQuery(SysUser.class) + .eq(SysUser::getUsername, vo.getUsername()).ne(SysUser::getId, vo.getId()); + if (getBaseMapper().selectCount(checkUsernameWrapper) > 0) { + throw new DefaultClientException("用户名重复,请重新输入!"); + } + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(SysUser.class) + .eq(SysUser::getId, vo.getId()).set(SysUser::getCode, vo.getCode()) + .set(SysUser::getUsername, vo.getUsername()) + .set(SysUser::getName, vo.getName()) + .set(SysUser::getEmail, null).set(SysUser::getTelephone, null) + .set(SysUser::getGender, EnumUtil.getByCode(Gender.class, vo.getGender())) + .set(SysUser::getAvailable, vo.getAvailable()).set(SysUser::getDescription, + StringUtil.isBlank(vo.getDescription()) ? StringPool.EMPTY_STR : vo.getDescription()); + + if (!StringUtil.isBlank(vo.getPassword())) { + updateWrapper.set(SysUser::getPassword, + encoderWrapper.getEncoder().encode(vo.getPassword())); + } + + if (!StringUtil.isBlank(vo.getEmail())) { + updateWrapper.set(SysUser::getEmail, vo.getEmail()); + } + + if (!StringUtil.isBlank(vo.getTelephone())) { + updateWrapper.set(SysUser::getTelephone, vo.getTelephone()); + } + + getBaseMapper().update(updateWrapper); + } + + protected List doSelector(SysUserSelectorVo vo) { + + return getBaseMapper().selector(vo); + } + + protected void doRegist(RegistUserVo vo) { + + Wrapper queryWrapper = Wrappers.lambdaQuery(SysUser.class) + .eq(SysUser::getUsername, vo.getUsername()); + if (getBaseMapper().selectCount(queryWrapper) > 0) { + throw new DefaultClientException("用户名重复,请重新输入!"); + } + + SysUser record = new SysUser(); + record.setId(IdUtil.getId()); + record.setCode(generateCodeService.generate(CODE_KEY)); + record.setName(vo.getName()); + record.setUsername(vo.getUsername()); + record.setPassword(encoderWrapper.getEncoder().encode(vo.getPassword())); + if (!StringUtil.isBlank(vo.getEmail())) { + record.setEmail(vo.getEmail()); + } + + if (!StringUtil.isBlank(vo.getTelephone())) { + record.setTelephone(vo.getTelephone()); + } + + record.setGender(Gender.UNKNOWN); + record.setAvailable(Boolean.TRUE); + record.setDescription(StringPool.EMPTY_STR); + + getBaseMapper().insert(record); + } + + @Cacheable(value = UserInfoDto.CACHE_NAME, key = "@cacheVariables.tenantId() + #userId", unless = "#result == null") + @Override + public UserInfoDto getInfo(@NonNull String userId) { + + return this.doGetInfo(userId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updatePassword(@NonNull String userId, @NonNull String password) { + + this.doUpdatePassword(userId, this.encodePassword(password)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateEmail(@NonNull String userId, @NonNull String email) { + + this.doUpdateEmail(userId, email); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTelephone(@NonNull String userId, @NonNull String telephone) { + + this.doUpdateTelephone(userId, telephone); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void lockById(String id) { + + getBaseMapper().lockById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unlockById(String id) { + + getBaseMapper().unlockById(id); + } + + protected UserInfoDto doGetInfo(@NonNull String userId) { + + return getBaseMapper().getInfo(userId); + } + + protected void doUpdatePassword(@NonNull String userId, @NonNull String password) { + + getBaseMapper().updatePassword(userId, password); + } + + protected void doUpdateEmail(@NonNull String userId, @NonNull String email) { + + getBaseMapper().updateEmail(userId, email); + } + + protected void doUpdateTelephone(@NonNull String userId, @NonNull String telephone) { + + getBaseMapper().updateTelephone(userId, telephone); + } + + protected String encodePassword(String password) { + + return encoderWrapper.getEncoder().encode(password); + } + + @CacheEvict(value = {UserInfoDto.CACHE_NAME, + SysUser.CACHE_NAME}, key = "@cacheVariables.tenantId() + #key") + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserTelephoneServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserTelephoneServiceImpl.java new file mode 100644 index 0000000..c5ce2d0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysUserTelephoneServiceImpl.java @@ -0,0 +1,14 @@ +package com.lframework.starter.web.inner.impl.system; + +import com.lframework.starter.web.core.impl.BaseMpServiceImpl; +import com.lframework.starter.web.inner.mappers.system.SysUserTelephoneMapper; +import com.lframework.starter.web.inner.entity.SysUserTelephone; +import com.lframework.starter.web.inner.service.system.SysUserTelephoneService; +import org.springframework.stereotype.Service; + +@Service +public class SysUserTelephoneServiceImpl extends + BaseMpServiceImpl implements + SysUserTelephoneService { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/listeners/OpLogTimerListener.java b/web-starter/src/main/java/com/lframework/starter/web/inner/listeners/OpLogTimerListener.java new file mode 100644 index 0000000..2469c7a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/listeners/OpLogTimerListener.java @@ -0,0 +1,86 @@ +package com.lframework.starter.web.inner.listeners; + +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.components.qrtz.QrtzJob; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.core.components.qrtz.QrtzHandler; +import com.lframework.starter.web.inner.service.OpLogsService; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.inner.service.TenantService; +import java.time.LocalDateTime; +import java.util.List; +import org.quartz.JobDetail; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +@Component +public class OpLogTimerListener implements ApplicationListener { + + private static final String JOB_NAME = "OP_LOG_TIMER"; + + private static final String JOB_GROUP_NAME = "OP_LOG_TIMER_GROUP"; + + private static final String TRIGGER_NAME = "OP_LOG_TIMER_TRIGGER"; + + private static final String TRIGGER_GROUP_NAME = "OP_LOG_TIMER_TRIGGER_GROUP"; + + @Value("${op-logs.enabled:'true'}") + private Boolean enabled; + + @Override + public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { + + // 没有使用@Bean的配置方式是因为当enabled==false时,需要移除定时任务 + JobDetail jobDetail = QrtzHandler.getJob(JOB_NAME, JOB_GROUP_NAME); + if (jobDetail == null) { + // 没有任务 + if (!this.enabled) { + return; + } + + QrtzHandler.addJob(JOB_NAME, JOB_GROUP_NAME, OpLogClearJob.class, TRIGGER_NAME, + TRIGGER_GROUP_NAME, + "0 0 * * * ? *"); + } else { + if (!this.enabled) { + QrtzHandler.deleteJob(JOB_NAME, JOB_GROUP_NAME, TRIGGER_NAME, TRIGGER_GROUP_NAME); + } + } + } + + public static class OpLogClearJob extends QrtzJob { + + @Autowired + private OpLogsService opLogsService; + + @Autowired + private TenantService tenantService; + + /** + * 操作日志保留天数 + */ + @Value("${op-logs.retain-days:7}") + private Integer retainDays; + + @Override + public void onExecute(JobExecutionContext context) { + + LocalDateTime now = LocalDateTime.now(); + LocalDateTime endTime = now.minusDays(retainDays); + + if (TenantUtil.enableTenant()) { + List tenants = tenantService.list(); + for (Tenant tenant : tenants) { + TenantContextHolder.setTenantId(tenant.getId()); + opLogsService.clearLogs(endTime); + } + } else { + opLogsService.clearLogs(endTime); + } + } + } +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/DicCityMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/DicCityMapper.java new file mode 100644 index 0000000..70f2b69 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/DicCityMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.dto.dic.city.DicCityDto; +import com.lframework.starter.web.inner.entity.DicCity; +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-07-07 + */ +public interface DicCityMapper extends BaseMapper { + + /** + * 查询所有数据 + * + * @return + */ + List getAll(); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + DicCityDto findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/GenerateCodeMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/GenerateCodeMapper.java new file mode 100644 index 0000000..30263ab --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/GenerateCodeMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.dto.GenerateCodeDto; + +public interface GenerateCodeMapper { + + GenerateCodeDto findById(Integer id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OpLogsMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OpLogsMapper.java new file mode 100644 index 0000000..64ff5ef --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OpLogsMapper.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.OpLogs; +import com.lframework.starter.web.inner.vo.oplogs.QueryOpLogsVo; +import java.time.LocalDateTime; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 操作日志 Mapper + *

+ * + * @author zmj + */ +public interface OpLogsMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QueryOpLogsVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + OpLogs findById(String id); + + /** + * 根据截止时间删除日志 + * + * @param endTime + */ + void clearLogs(@Param("endTime") LocalDateTime endTime); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OrderTimeLineMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OrderTimeLineMapper.java new file mode 100644 index 0000000..6c4582d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/OrderTimeLineMapper.java @@ -0,0 +1,12 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.OrderTimeLine; + +/** + * @author zmj + * @since 2022/8/10 + */ +public interface OrderTimeLineMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/QrtzMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/QrtzMapper.java new file mode 100644 index 0000000..0e2918a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/QrtzMapper.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.inner.dto.qrtz.QrtzDto; +import com.lframework.starter.web.inner.vo.qrtz.QueryQrtzVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + * @author zmj + * @since 2022/8/20 + */ +public interface QrtzMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QueryQrtzVo vo); + + /** + * 根据ID查询 + * + * @param name + * @param group + * @return + */ + QrtzDto findById(@Param("name") String name, @Param("group") String group); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/RecursionMappingMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/RecursionMappingMapper.java new file mode 100644 index 0000000..915129b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/RecursionMappingMapper.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.RecursionMapping; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 递归映射 Mapper 接口 + *

+ * + * @author zmj + * @since 2021-06-27 + */ +public interface RecursionMappingMapper extends BaseMapper { + + List getNodeChildIds(@Param("nodeId") String nodeId, @Param("nodeType") Integer nodeType); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SecurityUploadRecordMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SecurityUploadRecordMapper.java new file mode 100644 index 0000000..f03c7b7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SecurityUploadRecordMapper.java @@ -0,0 +1,13 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.SecurityUploadRecord; + +/** + *

+ * 安全上传记录 Mapper 接口 + *

+ */ +public interface SecurityUploadRecordMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleMapper.java new file mode 100644 index 0000000..9e6bd95 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.inner.entity.SysModule; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface SysModuleMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleTenantMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleTenantMapper.java new file mode 100644 index 0000000..ec79c0b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/SysModuleTenantMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.inner.entity.SysModuleTenant; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface SysModuleTenantMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/TenantMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/TenantMapper.java new file mode 100644 index 0000000..221cbc2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/TenantMapper.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.tenant.QueryTenantVo; +import com.lframework.starter.web.inner.vo.system.tenant.TenantSelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface TenantMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + @Sorts({ + @Sort(value = "id", alias = "tb", autoParse = true), + @Sort(value = "name", alias = "tb", autoParse = true), + }) + List query(@Param("vo") QueryTenantVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") TenantSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/UserDetailsMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/UserDetailsMapper.java new file mode 100644 index 0000000..8d1b749 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/UserDetailsMapper.java @@ -0,0 +1,20 @@ +package com.lframework.starter.web.inner.mappers; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.core.components.security.DefaultUserDetails; + +/** + * 用于登录的用户信息查询Mapper + * + * @author zmj + */ +public interface UserDetailsMapper extends BaseMapper { + + /** + * 根据登录名查询 + * + * @param username + * @return + */ + DefaultUserDetails findByUsername(String username); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicCategoryMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicCategoryMapper.java new file mode 100644 index 0000000..e09e1e3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicCategoryMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.dic.category.SysDataDicCategorySelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据字典分类 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysDataDicCategoryMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + List query(); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") SysDataDicCategorySelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicItemMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicItemMapper.java new file mode 100644 index 0000000..584b416 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicItemMapper.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.dic.item.QuerySysDataDicItemVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据字典值 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysDataDicItemMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + @Sorts({ + @Sort(value = "code", alias = "tb", autoParse = true), + @Sort(value = "name", alias = "tb", autoParse = true), + }) + List query(@Param("vo") QuerySysDataDicItemVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicMapper.java new file mode 100644 index 0000000..aeaa7c3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataDicMapper.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.dic.QuerySysDataDicVo; +import com.lframework.starter.web.inner.vo.system.dic.SysDataDicSelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 数据字典 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysDataDicMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + @Sorts({ + @Sort(value = "code", alias = "tb", autoParse = true), + @Sort(value = "name", alias = "tb", autoParse = true), + }) + List query(@Param("vo") QuerySysDataDicVo vo); + + /** + * 选择器 + * + * @return + */ + List selector(@Param("vo") SysDataDicSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionDataMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionDataMapper.java new file mode 100644 index 0000000..202e808 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionDataMapper.java @@ -0,0 +1,9 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysDataPermissionData; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface SysDataPermissionDataMapper extends + BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionModelDetailMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionModelDetailMapper.java new file mode 100644 index 0000000..d8c8e97 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDataPermissionModelDetailMapper.java @@ -0,0 +1,9 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.SysDataPermissionModelDetail; + +public interface SysDataPermissionModelDetailMapper extends + BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java new file mode 100644 index 0000000..3feaed8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; + +/** + *

+ * 部门 Mapper 接口 + *

+ * + * @author zmj + * @since 2021-06-26 + */ +public interface SysDeptMapper extends BaseMapper { + + /** + * 选择器 + * + * @return + */ + List selector(); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysDept findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysGenerateCodeMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysGenerateCodeMapper.java new file mode 100644 index 0000000..db314e2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysGenerateCodeMapper.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysGenerateCode; +import com.lframework.starter.web.inner.vo.system.generate.QuerySysGenerateCodeVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SysGenerateCodeMapper extends + BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + @Sorts({ + @Sort(value = "id", alias = "tb", autoParse = true), + @Sort(value = "name", alias = "tb", autoParse = true), + }) + List query(@Param("vo") QuerySysGenerateCodeVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMailMessageMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMailMessageMapper.java new file mode 100644 index 0000000..bbf3954 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMailMessageMapper.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.SysMailMessage; +import com.lframework.starter.web.inner.vo.system.message.mail.QuerySysMailMessageVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 邮件消息 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysMailMessageMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QuerySysMailMessageVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMenuMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMenuMapper.java new file mode 100644 index 0000000..5752e52 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysMenuMapper.java @@ -0,0 +1,113 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.dto.system.MenuDto; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.menu.SysMenuSelectorVo; +import java.util.List; +import java.util.Set; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 系统菜单 Mapper 接口 + *

+ * + * @author zmj + * @since 2021-05-10 + */ +public interface SysMenuMapper extends BaseMapper { + + /** + * 系统菜单列表 + * + * @return + */ + List query(@Param("moduleIds") List moduleIds); + + /** + * 根据角色ID查询已授权的菜单 + * + * @param roleId + * @return + */ + List getByRoleId(@Param("roleId") String roleId, + @Param("moduleIds") List moduleIds); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysMenu findById(String id); + + /** + * 系统菜单选择器数据 + * + * @return + */ + List selector(@Param("vo") SysMenuSelectorVo vo, @Param("moduleIds") List moduleIds); + + /** + * 根据ID查询子节点 + * + * @param id + * @return + */ + List getChildrenById(String id); + + /** + * 根据用户ID查询菜单 + * + * @param userId + * @param isAdmin 是否为管理员 + * @return + */ + List getMenuByUserId(@Param("userId") String userId, @Param("isAdmin") boolean isAdmin, + @Param("moduleIds") List moduleIds); + + /** + * 根据用户ID查询收藏的菜单 + * + * @param userId + * @return + */ + List getCollectMenuIds(@Param("userId") String userId); + + /** + * 根据用户ID查询权限 + * + * @param userId + * @return + */ + Set getPermissionsByUserId(@Param("userId") String userId, + @Param("isAdmin") boolean isAdmin, + @Param("moduleIds") List moduleIds); + + /** + * 根据用户ID查询角色权限 + * + * @param userId + * @return + */ + Set getRolePermissionByUserId(@Param("userId") String userId); + + /** + * 收藏菜单 + * + * @param id + * @param userId + * @param menuId + */ + void collectMenu(@Param("id") String id, @Param("userId") String userId, + @Param("menuId") String menuId); + + /** + * 取消收藏菜单 + * + * @param userId + * @param menuId + */ + void cancelCollectMenu(@Param("userId") String userId, @Param("menuId") String menuId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeLogMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeLogMapper.java new file mode 100644 index 0000000..223e56a --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeLogMapper.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysNoticeLog; +import com.lframework.starter.web.core.mapper.BaseMapper; + +/** + *

+ * 系统通知记录 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysNoticeLogMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeMapper.java new file mode 100644 index 0000000..fecd384 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNoticeMapper.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysNotice; +import com.lframework.starter.web.inner.dto.system.notice.QuerySysNoticeByUserDto; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeByUserVo; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 系统通知 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysNoticeMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QuerySysNoticeVo vo); + + /** + * 设置已读 + * + * @param id + */ + void setReaded(String id); + + /** + * 根据用户查询 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + List queryByUser(@Param("vo") QuerySysNoticeByUserVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupMapper.java new file mode 100644 index 0000000..9a22d46 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupMapper.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.vo.system.notify.QuerySysNotifyGroupVo; +import com.lframework.starter.web.inner.vo.system.notify.SysNotifyGroupSelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 消息通知组 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysNotifyGroupMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + @Sorts({ + @Sort(value = "name", alias = "tb.name"), + @Sort(value = "createTime", alias = "tb.create_time"), + }) + List query(@Param("vo") QuerySysNotifyGroupVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") SysNotifyGroupSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupReceiverMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupReceiverMapper.java new file mode 100644 index 0000000..8fe183d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysNotifyGroupReceiverMapper.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.SysNotifyGroupReceiver; + +/** + *

+ * 消息通知组-接收者关系表 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysNotifyGroupReceiverMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysOpenDomainMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysOpenDomainMapper.java new file mode 100644 index 0000000..54cdd2f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysOpenDomainMapper.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.open.QuerySysOpenDomainVo; +import com.lframework.starter.web.inner.vo.system.open.SysOpenDomainSelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-07-02 + */ +public interface SysOpenDomainMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + @Sorts({ + @Sort(value = "id", autoParse = true), + @Sort(value = "name", autoParse = true), + @Sort(value = "tenantId", autoParse = true), + }) + List query(@Param("vo") QuerySysOpenDomainVo vo); + + /** + * 选择器 + * + * @return + */ + List selector(@Param("vo") SysOpenDomainSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysParameterMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysParameterMapper.java new file mode 100644 index 0000000..8137636 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysParameterMapper.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysParameter; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.parameter.QuerySysParameterVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 系统参数 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysParameterMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + @Sorts({ + @Sort(value = "pmKey", alias = "tb", autoParse = true), + @Sort(value = "createTime", alias = "tb", autoParse = true), + }) + List query(@Param("vo") QuerySysParameterVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleCategoryMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleCategoryMapper.java new file mode 100644 index 0000000..c5c1dee --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleCategoryMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import com.lframework.starter.web.inner.vo.system.role.category.SysRoleCategorySelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 角色分类 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysRoleCategoryMapper extends BaseMapper { + + /** + * 查询列表 + * + * @return + */ + List query(); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") SysRoleCategorySelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMapper.java new file mode 100644 index 0000000..335d0ab --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMapper.java @@ -0,0 +1,59 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.role.QuerySysRoleVo; +import com.lframework.starter.web.inner.vo.system.role.SysRoleSelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-07-02 + */ +public interface SysRoleMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + @Sorts({ + @Sort(value = "code", autoParse = true), + @Sort(value = "name", autoParse = true), + @Sort(value = "createTime", autoParse = true), + @Sort(value = "updateTime", autoParse = true), + }) + List query(@Param("vo") QuerySysRoleVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysRole findById(String id); + + /** + * 根据用户ID查询 + * + * @param userId + * @return + */ + List getByUserId(String userId); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") SysRoleSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMenuMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMenuMapper.java new file mode 100644 index 0000000..2e95ad0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysRoleMenuMapper.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysRoleMenu; +import com.lframework.starter.web.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-07-04 + */ +public interface SysRoleMenuMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysSiteMessageMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysSiteMessageMapper.java new file mode 100644 index 0000000..e8e4877 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysSiteMessageMapper.java @@ -0,0 +1,34 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageByUserVo; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 站内信 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysSiteMessageMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(@Param("vo") QuerySysSiteMessageVo vo); + + /** + * 根据用户查询 + * + * @param vo + * @return + */ + List queryByUser(@Param("vo") QuerySysSiteMessageByUserVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserDeptMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserDeptMapper.java new file mode 100644 index 0000000..69cbe6d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserDeptMapper.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-07-04 + */ +public interface SysUserDeptMapper extends BaseMapper { + + /** + * 根据用户ID查询 + * + * @param userId + * @return + */ + List getByUserId(String userId); + + /** + * 根据部门ID查询 + * + * @param deptId + * @return + */ + List getByDeptId(String deptId); + + /** + * 根据部门ID查询是否存在 + * + * @param deptId + * @return + */ + SysUserDept hasByDeptId(String deptId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupDetailMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupDetailMapper.java new file mode 100644 index 0000000..8df8b27 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupDetailMapper.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.entity.SysUserGroupDetail; + +/** + *

+ * 用户与用户组关系表 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysUserGroupDetailMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupMapper.java new file mode 100644 index 0000000..90efb64 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserGroupMapper.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import com.lframework.starter.web.inner.vo.system.user.group.QuerySysUserGroupVo; +import com.lframework.starter.web.inner.vo.system.user.group.SysUserGroupSelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 用户组 Mapper 接口 + *

+ * + * @author zmj + */ +public interface SysUserGroupMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + @Sorts({ + @Sort(value = "code", alias = "tb.code"), + @Sort(value = "name", alias = "tb.name"), + @Sort(value = "createTime", alias = "tb.create_time"), + }) + List query(@Param("vo") QuerySysUserGroupVo vo); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") SysUserGroupSelectorVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserMapper.java new file mode 100644 index 0000000..7a3db59 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserMapper.java @@ -0,0 +1,99 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.core.annotations.sort.Sort; +import com.lframework.starter.web.core.annotations.sort.Sorts; +import com.lframework.starter.web.inner.dto.system.UserInfoDto; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.user.QuerySysUserVo; +import com.lframework.starter.web.inner.vo.system.user.SysUserSelectorVo; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-07-04 + */ +public interface SysUserMapper extends BaseMapper { + + /** + * 查询列表 + * + * @param vo + * @return + */ + @Sorts({ + @Sort(value = "code", alias = "u", autoParse = true), + @Sort(value = "username", alias = "u", autoParse = true), + @Sort(value = "name", alias = "u", autoParse = true), + @Sort(value = "createTime", alias = "u", autoParse = true), + @Sort(value = "updateTime", alias = "u", autoParse = true), + }) + List query(@Param("vo") QuerySysUserVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysUser findById(String id); + + /** + * 选择器 + * + * @param vo + * @return + */ + List selector(@Param("vo") SysUserSelectorVo vo); + + /** + * 获取用户信息 + * + * @param userId 用户ID + * @return + */ + UserInfoDto getInfo(String userId); + + /** + * 修改用户密码 + * + * @param userId 用户ID + * @param password 新密码(密文) + */ + void updatePassword(@Param("userId") String userId, @Param("password") String password); + + /** + * 修改邮箱 + * + * @param userId 用户ID + * @param email 邮箱 + */ + void updateEmail(@Param("userId") String userId, @Param("email") String email); + + /** + * 修改联系电话 + * + * @param userId 用户ID + * @param telephone 联系电话 + */ + void updateTelephone(@Param("userId") String userId, @Param("telephone") String telephone); + + /** + * 根据ID锁定 + * + * @param id + */ + void lockById(String id); + + /** + * 根据ID解锁 + * + * @param id + */ + void unlockById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserRoleMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserRoleMapper.java new file mode 100644 index 0000000..18e34dd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserRoleMapper.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.core.mapper.BaseMapper; +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zmj + * @since 2021-07-04 + */ +public interface SysUserRoleMapper extends BaseMapper { + + /** + * 根据用户ID查询 + * + * @param userId + * @return + */ + List getByUserId(String userId); + + /** + * 根据角色ID查询 + * + * @param roleId + * @return + */ + List getByRoleId(String roleId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserTelephoneMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserTelephoneMapper.java new file mode 100644 index 0000000..9c07190 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysUserTelephoneMapper.java @@ -0,0 +1,8 @@ +package com.lframework.starter.web.inner.mappers.system; + +import com.lframework.starter.web.inner.entity.SysUserTelephone; +import com.lframework.starter.web.core.mapper.BaseMapper; + +public interface SysUserTelephoneMapper extends BaseMapper { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/DicCityService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/DicCityService.java new file mode 100644 index 0000000..877155c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/DicCityService.java @@ -0,0 +1,32 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.dto.dic.city.DicCityDto; +import com.lframework.starter.web.inner.entity.DicCity; +import java.util.List; + +public interface DicCityService extends BaseMpService { + + /** + * 查询所有数据 + * + * @return + */ + List getAll(); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + DicCityDto findById(String id); + + /** + * 根据ID查询链路数据 + * + * @param id 末级ID + * @return 返回值顺序:省、市、区 + */ + List getChainById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/GenerateCodeService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/GenerateCodeService.java new file mode 100644 index 0000000..7a8b891 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/GenerateCodeService.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.components.generator.rule.GenerateCodeRule; +import com.lframework.starter.web.core.dto.GenerateCodeDto; +import com.lframework.starter.web.core.service.BaseService; +import java.util.List; + +/** + * 生成单号Service + * + * @author zmj + */ +public interface GenerateCodeService extends BaseService { + + /** + * 生成code + * + * @param id + * @return + */ + String generate(Integer id); + + /** + * 根据实体类获取编号规则 + * + * @param entity + * @return + */ + List getRules(GenerateCodeDto entity); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/GroovySupportService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/GroovySupportService.java similarity index 72% rename from web-starter/src/main/java/com/lframework/starter/web/service/GroovySupportService.java rename to web-starter/src/main/java/com/lframework/starter/web/inner/service/GroovySupportService.java index e52189d..2efe3f4 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/GroovySupportService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/GroovySupportService.java @@ -1,4 +1,4 @@ -package com.lframework.starter.web.service; +package com.lframework.starter.web.inner.service; /** * 支持groovy脚本调用的service diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/MailService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/MailService.java similarity index 93% rename from web-starter/src/main/java/com/lframework/starter/web/service/MailService.java rename to web-starter/src/main/java/com/lframework/starter/web/inner/service/MailService.java index b332a62..9ad9d25 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/MailService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/MailService.java @@ -1,5 +1,6 @@ -package com.lframework.starter.web.service; +package com.lframework.starter.web.inner.service; +import com.lframework.starter.web.core.service.BaseService; import java.io.File; import java.util.List; diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/OpLogsService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/OpLogsService.java new file mode 100644 index 0000000..ccaa886 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/OpLogsService.java @@ -0,0 +1,58 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.OpLogs; +import com.lframework.starter.web.inner.vo.oplogs.CreateOpLogsVo; +import com.lframework.starter.web.inner.vo.oplogs.QueryOpLogsVo; +import java.time.LocalDateTime; +import java.util.Collection; + +/** + * 操作日志Service + * + * @author zmj + */ +public interface OpLogsService extends BaseMpService { + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateOpLogsVo vo); + + /** + * 创建 + * + * @param list + * @return + */ + void create(Collection list); + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QueryOpLogsVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + OpLogs findById(String id); + + /** + * 根据截止时间删除日志 + * + * @param endTime + */ + void clearLogs(LocalDateTime endTime); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/OrderTimeLineService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/OrderTimeLineService.java new file mode 100644 index 0000000..c681b74 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/OrderTimeLineService.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.OrderTimeLine; +import java.util.List; + +/** + * @author zmj + * @since 2022/8/10 + */ +public interface OrderTimeLineService extends BaseMpService { + + /** + * 根据订单查询 + * @param orderId + * @return + */ + List getByOrder(String orderId); + + /** + * 根据订单删除 + * @param orderId + */ + void deleteByOrder(String orderId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/QrtzService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/QrtzService.java new file mode 100644 index 0000000..7497fd7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/QrtzService.java @@ -0,0 +1,80 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseService; +import com.lframework.starter.web.inner.vo.qrtz.CreateQrtzVo; +import com.lframework.starter.web.inner.vo.qrtz.UpdateQrtzVo; +import com.lframework.starter.web.inner.vo.qrtz.QueryQrtzVo; +import com.lframework.starter.web.inner.dto.qrtz.QrtzDto; + +/** + * @author zmj + * @since 2022/8/20 + */ +public interface QrtzService extends BaseService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QueryQrtzVo vo); + + /** + * 根据ID查询 + * + * @param name + * @param group + * @return + */ + QrtzDto findById(String name, String group); + + /** + * 创建 + * + * @param vo + */ + void create(CreateQrtzVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateQrtzVo vo); + + /** + * 恢复 + * + * @param name + * @param group + */ + void resume(String name, String group); + + /** + * 暂停 + * + * @param name + * @param group + */ + void pause(String name, String group); + + /** + * 触发 + * + * @param name + * @param group + */ + void trigger(String name, String group); + + /** + * 删除 + * + * @param name + * @param group + */ + void delete(String name, String group); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/RecursionMappingService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/RecursionMappingService.java new file mode 100644 index 0000000..b2ef089 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/RecursionMappingService.java @@ -0,0 +1,62 @@ +package com.lframework.starter.web.inner.service; + + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.RecursionMapping; +import com.lframework.starter.web.inner.enums.system.NodeType; +import java.util.List; + +public interface RecursionMappingService extends BaseMpService { + + /** + * 查询节点的父节点ID + * + * @param nodeId + * @param nodeTypeClazz + * @return + */ + List getNodeParentIds(String nodeId, Class nodeTypeClazz); + + /** + * 查询节点的子节点ID + * + * @param nodeId + * @param nodeTypeClazz + * @return + */ + List getNodeChildIds(String nodeId, Class nodeTypeClazz); + + + /** + * 保存节点递归信息 + * + * @param nodeId + * @param nodeTypeClazz + * @param parentIds 顺序有意义,需要从顶点到终点的顺序排列 + */ + void saveNode(String nodeId, Class nodeTypeClazz, List parentIds); + + /** + * 保存节点递归信息 + * + * @param nodeId + * @param nodeTypeClazz + */ + void saveNode(String nodeId, Class nodeTypeClazz); + + /** + * 根据节点ID删除 + * + * @param nodeId + * @param nodeTypeClazz + */ + void deleteNode(String nodeId, Class nodeTypeClazz); + + /** + * 根据节点ID删除以及子节点 + * + * @param nodeId + * @param nodeTypeClazz + */ + void deleteNodeAndChildren(String nodeId, Class nodeTypeClazz); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/SecurityUploadRecordService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SecurityUploadRecordService.java new file mode 100644 index 0000000..d5b60ba --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SecurityUploadRecordService.java @@ -0,0 +1,19 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SecurityUploadRecord; + +/** + * 安全上传记录 Service + */ +public interface SecurityUploadRecordService extends BaseMpService { + + /** + * 新增 + * + * @param uploadType + * @param filePath + * @return + */ + String create(String uploadType, String filePath); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysConfService.java similarity index 92% rename from web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java rename to web-starter/src/main/java/com/lframework/starter/web/inner/service/SysConfService.java index 03dfd0c..b5dd130 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/service/SysConfService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysConfService.java @@ -1,6 +1,7 @@ -package com.lframework.starter.web.service; +package com.lframework.starter.web.inner.service; import com.lframework.starter.common.exceptions.impl.ParameterNotFoundException; +import com.lframework.starter.web.core.service.BaseService; public interface SysConfService extends BaseService { diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleService.java new file mode 100644 index 0000000..9e7c217 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleService.java @@ -0,0 +1,7 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysModule; + +public interface SysModuleService extends BaseMpService { +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleTenantService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleTenantService.java new file mode 100644 index 0000000..3dc9949 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/SysModuleTenantService.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysModuleTenant; +import com.lframework.starter.web.inner.vo.system.module.SysModuleTenantVo; +import java.util.List; + +public interface SysModuleTenantService extends BaseMpService { + + /** + * 根据租户ID查询可用模块ID + * + * @param tenantId + * @return + */ + List getAvailableModuleIdsByTenantId(Integer tenantId); + + /** + * 根据租户ID查询 + * @param tenantId + * @return + */ + List getByTenantId(Integer tenantId); + + /** + * 设置模块 + * @param vo + */ + void setting(SysModuleTenantVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/TenantService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/TenantService.java new file mode 100644 index 0000000..a5109c0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/TenantService.java @@ -0,0 +1,60 @@ +package com.lframework.starter.web.inner.service; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.Tenant; +import com.lframework.starter.web.inner.vo.system.tenant.CreateTenantVo; +import com.lframework.starter.web.inner.vo.system.tenant.QueryTenantVo; +import com.lframework.starter.web.inner.vo.system.tenant.TenantSelectorVo; +import com.lframework.starter.web.inner.vo.system.tenant.UpdateTenantVo; + +/** + * 租户Service + * + * @author zmj + */ +public interface TenantService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QueryTenantVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, TenantSelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + Tenant findById(Integer id); + + /** + * 新增 + * + * @param data + * @return + */ + Integer create(CreateTenantVo data); + + /** + * 修改 + * + * @param data + */ + void update(UpdateTenantVo data); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicCategoryService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicCategoryService.java new file mode 100644 index 0000000..56bf7c1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicCategoryService.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysDataDicCategory; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.dic.category.CreateSysDataDicCategoryVo; +import com.lframework.starter.web.inner.vo.system.dic.category.SysDataDicCategorySelectorVo; +import com.lframework.starter.web.inner.vo.system.dic.category.UpdateSysDataDicCategoryVo; +import java.util.List; + +/** + * 数据字典分类 Service + * + * @author zmj + */ +public interface SysDataDicCategoryService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + List queryList(); + + /** + * 选择器 + * + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + SysDataDicCategorySelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysDataDicCategory findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysDataDicCategoryVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysDataDicCategoryVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicItemService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicItemService.java new file mode 100644 index 0000000..cac0fc2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicItemService.java @@ -0,0 +1,81 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysDataDicItem; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.dic.item.CreateSysDataDicItemVo; +import com.lframework.starter.web.inner.vo.system.dic.item.QuerySysDataDicItemVo; +import com.lframework.starter.web.inner.vo.system.dic.item.UpdateSysDataDicItemVo; +import java.util.List; + +/** + * 数据字典值 Service + * + * @author zmj + */ +public interface SysDataDicItemService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysDataDicItemVo vo); + + /** + * 查询列表 + * + * @return + */ + List query(QuerySysDataDicItemVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysDataDicItem findById(String id); + + /** + * 根据字典Code、字典值Code查询 + * + * @param dicCode + * @param code + * @return + */ + SysDataDicItem findByCode(String dicCode, String code); + + /** + * 根据字典编号查询 + * + * @param dicCode + * @return + */ + List findByDicCode(String dicCode); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysDataDicItemVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysDataDicItemVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicService.java new file mode 100644 index 0000000..d69cc3d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataDicService.java @@ -0,0 +1,75 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysDataDic; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.dic.CreateSysDataDicVo; +import com.lframework.starter.web.inner.vo.system.dic.QuerySysDataDicVo; +import com.lframework.starter.web.inner.vo.system.dic.SysDataDicSelectorVo; +import com.lframework.starter.web.inner.vo.system.dic.UpdateSysDataDicVo; +import java.util.List; + +/** + * 数据字典 Service + * + * @author zmj + */ +public interface SysDataDicService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysDataDicVo vo); + + /** + * 查询列表 + * + * @return + */ + List query(QuerySysDataDicVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, SysDataDicSelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysDataDic findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysDataDicVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysDataDicVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionDataService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionDataService.java new file mode 100644 index 0000000..949b01b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionDataService.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysDataPermissionData; +import com.lframework.starter.web.core.service.BaseMpService; +import java.util.List; + +public interface SysDataPermissionDataService extends + BaseMpService { + + /** + * 根据业务ID查询 + * + * @param bizId + * @return + */ + List getByBizId(String bizId); + + /** + * 根据业务ID查询 + * + * @param bizId + * @param bizType + * @return + */ + SysDataPermissionData getByBizId(String bizId, Integer bizType, Integer permissionType); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionModelDetailService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionModelDetailService.java new file mode 100644 index 0000000..010293f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDataPermissionModelDetailService.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysDataPermissionModelDetail; +import com.lframework.starter.web.inner.vo.system.permission.SysDataPermissionModelDetailVo; +import java.util.List; +import java.util.Map; + +public interface SysDataPermissionModelDetailService extends + BaseMpService { + + /** + * 解析SQL + * + * @param models + * @return + */ + String toSql(List models); + + /** + * 格式化SQL + * + * @param sqlTemplate + * @param params 表别名Map Key:表名占位符,具体定义数据表中的table_name Value:具体SQL的别名 + * @return + */ + String formatSql(String sqlTemplate, Map params); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java new file mode 100644 index 0000000..f7d8f72 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java @@ -0,0 +1,62 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysDept; +import com.lframework.starter.web.inner.vo.system.dept.CreateSysDeptVo; +import com.lframework.starter.web.inner.vo.system.dept.UpdateSysDeptVo; +import java.util.List; + +public interface SysDeptService extends BaseMpService { + + /** + * 选择器 + * + * @return + */ + List selector(); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysDept findById(String id); + + /** + * 根据编号查询 + * + * @param code + * @return + */ + SysDept findByCode(String code); + + /** + * 根据ID停用 + * + * @param id + */ + void unable(String id); + + /** + * 根据ID启用 + * + * @param id + */ + void enable(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysDeptVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysDeptVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysGenerateCodeService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysGenerateCodeService.java new file mode 100644 index 0000000..98a89e5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysGenerateCodeService.java @@ -0,0 +1,71 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysGenerateCode; +import com.lframework.starter.web.inner.vo.system.generate.CreateSysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.QuerySysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.SettingSysGenerateCodeVo; +import com.lframework.starter.web.inner.vo.system.generate.UpdateSysGenerateCodeVo; +import java.util.List; + +/** + * 编号规则 Service + * + * @author zmj + */ +public interface SysGenerateCodeService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysGenerateCodeVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysGenerateCodeVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysGenerateCode findById(Integer id); + + /** + * 创建 + * + * @param vo + * @return + */ + Integer create(CreateSysGenerateCodeVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysGenerateCodeVo vo); + + /** + * 根据ID删除 + * + * @param id + * @return + */ + void deleteById(Integer id); + + /** + * 设置 + * + * @param vo + */ + void setting(SettingSysGenerateCodeVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMailMessageService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMailMessageService.java new file mode 100644 index 0000000..d1323f8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMailMessageService.java @@ -0,0 +1,36 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysMailMessage; +import com.lframework.starter.web.inner.vo.system.message.mail.QuerySysMailMessageVo; +import java.util.List; + +public interface SysMailMessageService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysMailMessageVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysMailMessageVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysMailMessage findById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMenuService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMenuService.java new file mode 100644 index 0000000..fe8b45f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysMenuService.java @@ -0,0 +1,141 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.dto.system.MenuDto; +import com.lframework.starter.web.inner.entity.SysMenu; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.menu.CreateSysMenuVo; +import com.lframework.starter.web.inner.vo.system.menu.SysMenuSelectorVo; +import com.lframework.starter.web.inner.vo.system.menu.UpdateSysMenuVo; +import java.util.List; +import java.util.Set; + +/** + *

+ * 系统菜单 服务类 + *

+ * + * @author zmj + * @since 2021-05-10 + */ +public interface SysMenuService extends BaseMpService { + + /** + * 系统菜单列表 + * + * @return + */ + List queryList(List moduleIds); + + /** + * 根据角色ID查询已授权的菜单 + * + * @param roleId + * @return + */ + List getByRoleId(String roleId, List moduleIds); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysMenu findById(String id); + + /** + * 创建系统菜单 + * + * @param vo + */ + String create(CreateSysMenuVo vo); + + /** + * 修改系统菜单 + * + * @param vo + */ + void update(UpdateSysMenuVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); + + /** + * 系统菜单选择器数据 + * + * @return + */ + List selector(SysMenuSelectorVo vo, List moduleIds); + + /** + * 批量启用 + * + * @param id + */ + void enable(String id); + + /** + * 停用 + * + * @param id + */ + void unable(String id); + + /** + * 是否存在权限 + * + * @param permission + * @return + */ + Boolean existPermission(String permission); + + /** + * 根据用户ID查询菜单 + * + * @param userId + * @param isAdmin 是否为管理员 + * @return + */ + List getMenuByUserId(String userId, boolean isAdmin, List moduleIds); + + /** + * 根据用户ID查询权限 + * + * @param userId + * @return + */ + Set getPermissionsByUserId(String userId, boolean isAdmin, List moduleIds); + + /** + * 根据用户ID查询角色权限 + * @param userId + * @return + */ + Set getRolePermissionByUserId(String userId); + + /** + * 收藏菜单 + * + * @param userId + * @param menuId + */ + void collect(String userId, String menuId); + + /** + * 取消收藏菜单 + * + * @param userId + * @param menuId + */ + void cancelCollect(String userId, String menuId); + + /** + * 根据菜单ID查询父级菜单ID + * @param menuId + * @return + */ + List getParentMenuIds(String menuId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeLogService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeLogService.java new file mode 100644 index 0000000..91f9f21 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeLogService.java @@ -0,0 +1,20 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysNoticeLog; +import com.lframework.starter.web.core.service.BaseMpService; + +/** + * 系统通知记录 Service + * + * @author zmj + */ +public interface SysNoticeLogService extends BaseMpService { + + /** + * 设置已读 + * + * @param noticeId + * @param userId + */ + boolean setReaded(String noticeId, String userId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeService.java new file mode 100644 index 0000000..68c6252 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNoticeService.java @@ -0,0 +1,108 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.dto.system.notice.QuerySysNoticeByUserDto; +import com.lframework.starter.web.inner.dto.system.notice.SysNoticeDto; +import com.lframework.starter.web.inner.entity.SysNotice; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.notice.CreateSysNoticeVo; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeByUserVo; +import com.lframework.starter.web.inner.vo.system.notice.QuerySysNoticeVo; +import com.lframework.starter.web.inner.vo.system.notice.UpdateSysNoticeVo; +import java.util.List; + +/** + * 系统通知 Service + * + * @author zmj + */ +public interface SysNoticeService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysNoticeVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysNoticeVo vo); + + /** + * 根据用户查询 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult queryByUser(Integer pageIndex, Integer pageSize, + QuerySysNoticeByUserVo vo); + + /** + * 根据ID查询内容 + * + * @param id + * @return + */ + SysNoticeDto getContent(String id); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysNotice findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysNoticeVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysNoticeVo vo); + + /** + * 发布 + * + * @param id + */ + void publish(String id); + + /** + * 设置已读 + * + * @param id + * @param userId + */ + void setReaded(String id, String userId); + + /** + * 发送通知 + */ + void noticeForWs(); + + /** + * 发送通知 + */ + void noticeForWs(String userId); + + /** + * 发送通知 + */ + void noticeForWsWithSessionId(String sessionId); + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupReceiverService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupReceiverService.java new file mode 100644 index 0000000..5051d24 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupReceiverService.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysNotifyGroupReceiver; +import java.util.List; + +public interface SysNotifyGroupReceiverService extends BaseMpService { + + /** + * 根据组ID查询接收方ID + * + * @param groupId + * @return + */ + List getReceiverIdsByGroupId(String groupId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupService.java new file mode 100644 index 0000000..2ecb764 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysNotifyGroupService.java @@ -0,0 +1,72 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysNotifyGroup; +import com.lframework.starter.web.inner.vo.system.notify.CreateSysNotifyGroupVo; +import com.lframework.starter.web.inner.vo.system.notify.QuerySysNotifyGroupVo; +import com.lframework.starter.web.inner.vo.system.notify.SysNotifyGroupSelectorVo; +import com.lframework.starter.web.inner.vo.system.notify.UpdateSysNotifyGroupVo; +import java.util.List; +import java.util.Set; + +public interface SysNotifyGroupService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, + QuerySysNotifyGroupVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysNotifyGroupVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysNotifyGroup findById(String id); + + /** + * 选择器 + * + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + SysNotifyGroupSelectorVo vo); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysNotifyGroupVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysNotifyGroupVo vo); + + /** + * 根据ID查询接收人ID + * + * @param id + * @return + */ + Set getReceiveUserIds(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysOpenDomainService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysOpenDomainService.java new file mode 100644 index 0000000..4e85f73 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysOpenDomainService.java @@ -0,0 +1,58 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysOpenDomain; +import com.lframework.starter.web.inner.vo.system.open.QuerySysOpenDomainVo; +import com.lframework.starter.web.inner.vo.system.open.CreateSysOpenDomainVo; +import com.lframework.starter.web.inner.vo.system.open.SysOpenDomainSelectorVo; +import com.lframework.starter.web.inner.vo.system.open.UpdateSysOpenDomainSecretVo; +import com.lframework.starter.web.inner.vo.system.open.UpdateSysOpenDomainVo; + +public interface SysOpenDomainService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + PageResult query(QuerySysOpenDomainVo vo); + + /** + * 选择器 + * + * @return + */ + PageResult selector(SysOpenDomainSelectorVo vo); + + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysOpenDomain findById(Integer id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysOpenDomainVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysOpenDomainVo vo); + + /** + * 修改Api密钥 + * + * @param vo + */ + void updateApiSecret(UpdateSysOpenDomainSecretVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysParameterService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysParameterService.java new file mode 100644 index 0000000..8dc299b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysParameterService.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysParameter; +import com.lframework.starter.web.inner.vo.system.parameter.CreateSysParameterVo; +import com.lframework.starter.web.inner.vo.system.parameter.QuerySysParameterVo; +import com.lframework.starter.web.inner.vo.system.parameter.UpdateSysParameterVo; +import java.util.List; + +/** + * 系统参数 Service + * + * @author zmj + */ +public interface SysParameterService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysParameterVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysParameterVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysParameter findById(Long id); + + /** + * 创建 + * + * @param vo + * @return + */ + Long create(CreateSysParameterVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysParameterVo vo); + + /** + * 根据ID删除 + * + * @param id + * @return + */ + void deleteById(Long id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleCategoryService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleCategoryService.java new file mode 100644 index 0000000..0174849 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleCategoryService.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysRoleCategory; +import com.lframework.starter.web.inner.vo.system.role.category.CreateSysRoleCategoryVo; +import com.lframework.starter.web.inner.vo.system.role.category.SysRoleCategorySelectorVo; +import com.lframework.starter.web.inner.vo.system.role.category.UpdateSysRoleCategoryVo; +import java.util.List; + +/** + * 角色分类 Service + * + * @author zmj + */ +public interface SysRoleCategoryService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + List queryList(); + + /** + * 选择器 + * + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + SysRoleCategorySelectorVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysRoleCategory findById(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysRoleCategoryVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysRoleCategoryVo vo); + + /** + * 根据ID删除 + * + * @param id + */ + void deleteById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleMenuService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleMenuService.java new file mode 100644 index 0000000..43d20b1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleMenuService.java @@ -0,0 +1,15 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysRoleMenu; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.role.SysRoleMenuSettingVo; + +public interface SysRoleMenuService extends BaseMpService { + + /** + * 授权角色菜单 + * + * @param vo + */ + void setting(SysRoleMenuSettingVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleService.java new file mode 100644 index 0000000..fce8417 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysRoleService.java @@ -0,0 +1,80 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysRole; +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.role.CreateSysRoleVo; +import com.lframework.starter.web.inner.vo.system.role.QuerySysRoleVo; +import com.lframework.starter.web.inner.vo.system.role.SysRoleSelectorVo; +import com.lframework.starter.web.inner.vo.system.role.UpdateSysRoleVo; +import java.util.List; + +public interface SysRoleService extends BaseMpService { + + /** + * 查询列表 + * + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysRoleVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysRoleVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysRole findById(String id); + + /** + * 选择器 + * + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, SysRoleSelectorVo vo); + + /** + * 根据ID停用 + * + * @param id + */ + void unable(String id); + + /** + * 根据ID启用 + * + * @param id + */ + void enable(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysRoleVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysRoleVo vo); + + /** + * 根据用户ID查询 + * + * @param userId + * @return + */ + List getByUserId(String userId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysSiteMessageService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysSiteMessageService.java new file mode 100644 index 0000000..e0f721f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysSiteMessageService.java @@ -0,0 +1,76 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.dto.message.site.SiteMessageDto; +import com.lframework.starter.web.inner.entity.SysSiteMessage; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageByUserVo; +import com.lframework.starter.web.inner.vo.system.message.site.QuerySysSiteMessageVo; +import java.util.List; + +public interface SysSiteMessageService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysSiteMessageVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysSiteMessageVo vo); + + /** + * 根据用户查询 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult queryByUser(Integer pageIndex, Integer pageSize, + QuerySysSiteMessageByUserVo vo); + + /** + * 查询内容 + * + * @param id + * @return + */ + SiteMessageDto getContent(String id); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysSiteMessage findById(String id); + + /** + * 设置已读 + * + * @param id + */ + boolean setReaded(String id); + + /** + * WS通知 + * + * @param userId + */ + void noticeForWs(String userId); + + /** + * 发送通知 + */ + void noticeForWsWithSessionId(String sessionId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserDeptService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserDeptService.java new file mode 100644 index 0000000..51229e5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserDeptService.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysUserDept; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.dept.SysUserDeptSettingVo; +import java.util.List; + +public interface SysUserDeptService extends BaseMpService { + + /** + * 设置部门 + * + * @param vo + */ + void setting(SysUserDeptSettingVo vo); + + /** + * 根据用户ID查询 + * + * @param userId + * @return + */ + List getByUserId(String userId); + + /** + * 根据部门ID查询 + * + * @param deptId + * @return + */ + List getByDeptId(String deptId); + + /** + * 根据部门ID查询是否存在 + * + * @param deptId + * @return + */ + Boolean hasByDeptId(String deptId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupDetailService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupDetailService.java new file mode 100644 index 0000000..8de6dc6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupDetailService.java @@ -0,0 +1,16 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysUserGroupDetail; +import java.util.List; + +public interface SysUserGroupDetailService extends BaseMpService { + + /** + * 根据组ID查询用户ID + * + * @param groupId + * @return + */ + List getUserIdsByGroupId(String groupId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupService.java new file mode 100644 index 0000000..86a5fb7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserGroupService.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysUserGroup; +import com.lframework.starter.web.inner.vo.system.user.group.CreateSysUserGroupVo; +import com.lframework.starter.web.inner.vo.system.user.group.QuerySysUserGroupVo; +import com.lframework.starter.web.inner.vo.system.user.group.SysUserGroupSelectorVo; +import com.lframework.starter.web.inner.vo.system.user.group.UpdateSysUserGroupVo; +import java.util.List; + +public interface SysUserGroupService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, + QuerySysUserGroupVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysUserGroupVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysUserGroup findById(String id); + + /** + * 选择器 + * + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, + SysUserGroupSelectorVo vo); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysUserGroupVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysUserGroupVo vo); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserRoleService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserRoleService.java new file mode 100644 index 0000000..4164de7 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserRoleService.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysUserRole; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.vo.system.user.SysUserRoleSettingVo; +import java.util.List; + +public interface SysUserRoleService extends BaseMpService { + + /** + * 用户授权 + * + * @param vo + */ + void setting(SysUserRoleSettingVo vo); + + /** + * 根据用户ID查询 + * + * @param userId + * @return + */ + List getByUserId(String userId); + + /** + * 根据角色ID查询 + * @param roleId + * @return + */ + List getByRoleId(String roleId); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserService.java new file mode 100644 index 0000000..1d77f64 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserService.java @@ -0,0 +1,141 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.core.components.resp.PageResult; +import com.lframework.starter.web.core.service.BaseMpService; +import com.lframework.starter.web.inner.entity.SysUser; +import com.lframework.starter.web.inner.dto.system.UserInfoDto; +import com.lframework.starter.web.inner.vo.system.user.CreateSysUserVo; +import com.lframework.starter.web.inner.vo.system.user.QuerySysUserVo; +import com.lframework.starter.web.inner.vo.system.user.RegistUserVo; +import com.lframework.starter.web.inner.vo.system.user.SysUserSelectorVo; +import com.lframework.starter.web.inner.vo.system.user.UpdateSysUserVo; +import java.util.List; + +public interface SysUserService extends BaseMpService { + + /** + * 查询列表 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult query(Integer pageIndex, Integer pageSize, QuerySysUserVo vo); + + /** + * 查询列表 + * + * @param vo + * @return + */ + List query(QuerySysUserVo vo); + + /** + * 根据ID查询 + * + * @param id + * @return + */ + SysUser findById(String id); + + /** + * 根据编号查询 + * + * @param code + * @return + */ + SysUser findByCode(String code); + + /** + * 启用 + * + * @param id + */ + void enable(String id); + + /** + * 停用 + * + * @param id + */ + void unable(String id); + + /** + * 创建 + * + * @param vo + * @return + */ + String create(CreateSysUserVo vo); + + /** + * 修改 + * + * @param vo + */ + void update(UpdateSysUserVo vo); + + /** + * 选择器 + * + * @param pageIndex + * @param pageSize + * @param vo + * @return + */ + PageResult selector(Integer pageIndex, Integer pageSize, SysUserSelectorVo vo); + + /** + * 注册 + * + * @param vo + */ + void regist(RegistUserVo vo); + + /** + * 获取用户信息 + * + * @param userId 用户ID + * @return + */ + UserInfoDto getInfo(String userId); + + /** + * 修改用户密码 + * + * @param userId 用户ID + * @param password 新密码(明文) + */ + void updatePassword(String userId, String password); + + /** + * 修改邮箱 + * + * @param userId 用户ID + * @param email 邮箱 + */ + void updateEmail(String userId, String email); + + /** + * 修改联系电话 + * + * @param userId 用户ID + * @param telephone 联系电话 + */ + void updateTelephone(String userId, String telephone); + + /** + * 根据ID锁定 + * + * @param id + */ + void lockById(String id); + + /** + * 根据ID解锁 + * + * @param id + */ + void unlockById(String id); +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserTelephoneService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserTelephoneService.java new file mode 100644 index 0000000..666e24f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysUserTelephoneService.java @@ -0,0 +1,8 @@ +package com.lframework.starter.web.inner.service.system; + +import com.lframework.starter.web.inner.entity.SysUserTelephone; +import com.lframework.starter.web.core.service.BaseMpService; + +public interface SysUserTelephoneService extends BaseMpService { + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/vo/OpenApiReqVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/openapi/OpenApiReqVo.java similarity index 86% rename from web-starter/src/main/java/com/lframework/starter/web/vo/OpenApiReqVo.java rename to web-starter/src/main/java/com/lframework/starter/web/inner/vo/openapi/OpenApiReqVo.java index 98506c9..28fdf26 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/vo/OpenApiReqVo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/openapi/OpenApiReqVo.java @@ -1,5 +1,6 @@ -package com.lframework.starter.web.vo; +package com.lframework.starter.web.inner.vo.openapi; +import com.lframework.starter.web.core.vo.BaseVo; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/CreateOpLogsVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/CreateOpLogsVo.java new file mode 100644 index 0000000..4ab76e8 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/CreateOpLogsVo.java @@ -0,0 +1,51 @@ +package com.lframework.starter.web.inner.vo.oplogs; + +import com.lframework.starter.web.core.vo.BaseVo; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +/** + * 新增操作日志Vo + * + * @author zmj + */ +@Data +public class CreateOpLogsVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 日志名称 + */ + @NotBlank(message = "日志名称不能为空!") + private String name; + + /** + * 类型 + */ + @NotNull(message = "日志类型不能为空!") + private Integer logType; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建人ID + */ + private String createById; + + /** + * IP地址 + */ + @NotBlank(message = "IP地址不能为空!") + private String ip; + + /** + * 补充信息 + */ + private String extra; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/QueryOpLogsVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/QueryOpLogsVo.java new file mode 100644 index 0000000..71d6222 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/oplogs/QueryOpLogsVo.java @@ -0,0 +1,47 @@ +package com.lframework.starter.web.inner.vo.oplogs; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * 查询操作日志Vo + * + * @author zmj + */ +@Data +public class QueryOpLogsVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 日志名称 + */ + @ApiModelProperty("日志名称") + private String name; + + /** + * 创建人ID + */ + @ApiModelProperty("创建人ID") + private String createBy; + + /** + * 日志类别 + */ + @ApiModelProperty("日志类别") + private Integer logType; + + /** + * 创建起始时间 + */ + @ApiModelProperty("创建起始时间") + private LocalDateTime startTime; + + /** + * 创建截止时间 + */ + @ApiModelProperty("创建截止时间") + private LocalDateTime endTime; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/CreateQrtzVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/CreateQrtzVo.java new file mode 100644 index 0000000..04d686c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/CreateQrtzVo.java @@ -0,0 +1,91 @@ +package com.lframework.starter.web.inner.vo.qrtz; + +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.inner.enums.system.QrtzJobType; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author zmj + * @since 2022/8/20 + */ +@Data +public class CreateQrtzVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 分组 + */ + @ApiModelProperty(value = "分组", required = true) + @NotBlank(message = "分组不能为空!") + private String group; + + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + private Integer tenantId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 执行类名 + */ + @ApiModelProperty("执行类名") + private String targetClassName; + + /** + * 执行方法名 + */ + @ApiModelProperty("执行方法名") + private String targetMethodName; + + /** + * 执行参数类型 + */ + @ApiModelProperty("执行参数类型") + private List targetParamTypes; + + /** + * 执行参数 + */ + @ApiModelProperty("执行参数") + private List targetParams; + + /** + * Cron表达式 + */ + @ApiModelProperty("Cron表达式") + @NotBlank(message = "Cron表达式不能为空!") + private String cron; + + /** + * 任务类型 + */ + @NotNull(message = "任务类型不能为空!") + @IsEnum(message = "任务类型不能为空!", enumClass = QrtzJobType.class) + private Integer jobType; + + /** + * 脚本 + */ + @ApiModelProperty("脚本") + private String script; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/QueryQrtzVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/QueryQrtzVo.java new file mode 100644 index 0000000..a48eff5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/QueryQrtzVo.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.inner.vo.qrtz; + +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.PageVo; +import com.lframework.starter.web.inner.enums.system.TriggerState; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import lombok.Data; + +/** + * @author zmj + * @since 2022/8/20 + */ +@Data +public class QueryQrtzVo extends PageVo { + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 组 + */ + @ApiModelProperty("组") + private String group; + + /** + * 状态 + */ + @ApiModelProperty("状态") + @IsEnum(message = "状态格式错误!", enumClass = TriggerState.class) + private String state; + + /** + * 任务类 + */ + @ApiModelProperty(hidden = true) + private List jobClasses; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/UpdateQrtzVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/UpdateQrtzVo.java new file mode 100644 index 0000000..d64de2b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/qrtz/UpdateQrtzVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.qrtz; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +/** + * @author zmj + * @since 2022/8/20 + */ +@Data +public class UpdateQrtzVo extends CreateQrtzVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 原始任务名称 + */ + @ApiModelProperty(value = "原始任务名称", required = true) + @NotBlank(message = "原始任务名称不能为空!") + private String oriName; + + /** + * 原始任务分组 + */ + @ApiModelProperty(value = "原始任务分组", required = true) + @NotBlank(message = "原始任务分组不能为空!") + private String oriGroup; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/config/UpdateSysConfigVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/config/UpdateSysConfigVo.java new file mode 100644 index 0000000..910d0f2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/config/UpdateSysConfigVo.java @@ -0,0 +1,96 @@ +package com.lframework.starter.web.inner.vo.system.config; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysConfigVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 是否允许注册 + */ + @ApiModelProperty(value = "是否允许注册", required = true) + @NotNull(message = "请选择是否允许注册!") + @TypeMismatch(message = "是否允许注册格式错误!") + private Boolean allowRegist; + + /** + * 是否允许手机号登录 + */ + @ApiModelProperty(value = "是否允许手机号登录", required = true) + @NotNull(message = "请选择是否允许手机号登录!") + @TypeMismatch(message = "是否允许手机号登录格式错误!") + private Boolean allowTelephoneLogin; + + /** + * 手机号登录时的signName + */ + private String telephoneLoginSignName; + + /** + * 手机号登录时的templateCode + */ + private String telephoneLoginTemplateCode; + + /** + * 是否允许锁定用户 + */ + @ApiModelProperty(value = "是否允许锁定用户", required = true) + @NotNull(message = "请选择是否允许锁定用户!") + @TypeMismatch(message = "是否允许锁定用户格式错误!") + private Boolean allowLock; + + /** + * 登录失败次数 + */ + @ApiModelProperty(value = "登录失败次数") + private Integer failNum; + + /** + * 是否允许验证码 + */ + @ApiModelProperty(value = "是否允许验证码", required = true) + @NotNull(message = "请选择是否允许验证码!") + @TypeMismatch(message = "是否允许验证码格式错误!") + private Boolean allowCaptcha; + + /** + * 是否开启忘记密码 + */ + @ApiModelProperty(value = "是否开启忘记密码", required = true) + @NotNull(message = "请选择是否开启忘记密码!") + @TypeMismatch(message = "是否开启忘记密码格式错误!") + private Boolean allowForgetPsw; + + /** + * 忘记密码是否使用邮箱 + */ + @ApiModelProperty(value = "忘记密码是否使用邮箱,allowForgetPsw == true时必填") + @TypeMismatch(message = "忘记密码是否使用邮箱格式错误!") + private Boolean forgetPswRequireMail; + + /** + * 忘记密码是否使用短信 + */ + @ApiModelProperty(value = "忘记密码是否使用短信,allowForgetPsw == true时必填") + @TypeMismatch(message = "忘记密码是否使用短信格式错误!") + private Boolean forgetPswRequireSms; + + /** + * signName + */ + @ApiModelProperty(value = "signName,forgetPswRequireSms == true时必填") + private String signName; + + /** + * templateCode + */ + @ApiModelProperty(value = "templateCode,forgetPswRequireSms == true时必填") + private String templateCode; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/CreateSysDeptVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/CreateSysDeptVo.java new file mode 100644 index 0000000..61d0318 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/CreateSysDeptVo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.inner.vo.system.dept; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateSysDeptVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @IsCode + @NotBlank(message = "编号不能为空!") + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 简称 + */ + @ApiModelProperty(value = "简称", required = true) + @NotBlank(message = "简称不能为空!") + private String shortName; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysUserDeptSettingVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysUserDeptSettingVo.java new file mode 100644 index 0000000..41e1eae --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysUserDeptSettingVo.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.inner.vo.system.dept; + +import com.lframework.starter.web.core.vo.BaseVo; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class SysUserDeptSettingVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @NotBlank(message = "用户ID不能为空!") + private String userId; + + /** + * 部门ID + */ + private List deptIds; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/UpdateSysDeptVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/UpdateSysDeptVo.java new file mode 100644 index 0000000..c758deb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/UpdateSysDeptVo.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.inner.vo.system.dept; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysDeptVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @IsCode + @NotBlank(message = "编号不能为空!") + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 简称 + */ + @ApiModelProperty(value = "简称", required = true) + @NotBlank(message = "简称不能为空!") + private String shortName; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "请选择状态!") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/CreateSysDataDicVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/CreateSysDataDicVo.java new file mode 100644 index 0000000..13b3868 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/CreateSysDataDicVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.vo.system.dic; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateSysDataDicVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/QuerySysDataDicVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/QuerySysDataDicVo.java new file mode 100644 index 0000000..f2def3d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/QuerySysDataDicVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.inner.vo.system.dic; + +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class QuerySysDataDicVo extends SortPageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/SysDataDicSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/SysDataDicSelectorVo.java new file mode 100644 index 0000000..60bf7b3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/SysDataDicSelectorVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.inner.vo.system.dic; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDataDicSelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/UpdateSysDataDicVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/UpdateSysDataDicVo.java new file mode 100644 index 0000000..0114f15 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/UpdateSysDataDicVo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.vo.system.dic; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysDataDicVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/CreateSysDataDicCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/CreateSysDataDicCategoryVo.java new file mode 100644 index 0000000..e2256a9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/CreateSysDataDicCategoryVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.inner.vo.system.dic.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateSysDataDicCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/SysDataDicCategorySelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/SysDataDicCategorySelectorVo.java new file mode 100644 index 0000000..1e7d77f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/SysDataDicCategorySelectorVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.inner.vo.system.dic.category; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysDataDicCategorySelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/UpdateSysDataDicCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/UpdateSysDataDicCategoryVo.java new file mode 100644 index 0000000..4611993 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/category/UpdateSysDataDicCategoryVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.vo.system.dic.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysDataDicCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/CreateSysDataDicItemVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/CreateSysDataDicItemVo.java new file mode 100644 index 0000000..18dad71 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/CreateSysDataDicItemVo.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.inner.vo.system.dic.item; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateSysDataDicItemVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * 字典ID + */ + @ApiModelProperty("字典ID") + @NotBlank(message = "字典ID不能为空!") + private String dicId; + + /** + * 排序 + */ + @ApiModelProperty("排序") + @NotNull(message = "请输入排序!") + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/QuerySysDataDicItemVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/QuerySysDataDicItemVo.java new file mode 100644 index 0000000..afc0373 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/QuerySysDataDicItemVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.system.dic.item; + +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class QuerySysDataDicItemVo extends SortPageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 字典ID + */ + @ApiModelProperty("字典ID") + @NotBlank(message = "字典ID不能为空!") + private String dicId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/UpdateSysDataDicItemVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/UpdateSysDataDicItemVo.java new file mode 100644 index 0000000..e2fde4e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dic/item/UpdateSysDataDicItemVo.java @@ -0,0 +1,44 @@ +package com.lframework.starter.web.inner.vo.system.dic.item; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysDataDicItemVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * 排序 + */ + @ApiModelProperty("排序") + @NotNull(message = "请输入排序!") + private Integer orderNo; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/CreateSysGenerateCodeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/CreateSysGenerateCodeVo.java new file mode 100644 index 0000000..67289d0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/CreateSysGenerateCodeVo.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.vo.system.generate; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateSysGenerateCodeVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 规则ID + */ + @ApiModelProperty(value = "规则ID", required = true) + @NotNull(message = "请输入规则ID!") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/PreviewSysGenerateCodeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/PreviewSysGenerateCodeVo.java new file mode 100644 index 0000000..e80b4f6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/PreviewSysGenerateCodeVo.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.inner.vo.system.generate; + +import com.lframework.starter.web.core.components.validation.IsJsonArray; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class PreviewSysGenerateCodeVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 配置规则 + */ + @ApiModelProperty(value = "配置规则", required = true) + @NotBlank(message = "配置规则不能为空!") + @IsJsonArray(message = "配置规则格式错误!") + private String configStr; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/QuerySysGenerateCodeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/QuerySysGenerateCodeVo.java new file mode 100644 index 0000000..ee3e718 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/QuerySysGenerateCodeVo.java @@ -0,0 +1,22 @@ +package com.lframework.starter.web.inner.vo.system.generate; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QuerySysGenerateCodeVo extends SortPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("规则ID") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/SettingSysGenerateCodeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/SettingSysGenerateCodeVo.java new file mode 100644 index 0000000..1c33481 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/SettingSysGenerateCodeVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.vo.system.generate; + +import com.lframework.starter.web.core.components.validation.IsJsonArray; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class SettingSysGenerateCodeVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private Integer id; + + /** + * 配置规则 + */ + @ApiModelProperty(value = "配置规则", required = true) + @NotBlank(message = "配置规则不能为空!") + @IsJsonArray(message = "配置规则格式错误!") + private String configStr; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/UpdateSysGenerateCodeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/UpdateSysGenerateCodeVo.java new file mode 100644 index 0000000..9a19fc4 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/generate/UpdateSysGenerateCodeVo.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.vo.system.generate; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysGenerateCodeVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/CreateSysMenuVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/CreateSysMenuVo.java new file mode 100644 index 0000000..69f78cd --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/CreateSysMenuVo.java @@ -0,0 +1,113 @@ +package com.lframework.starter.web.inner.vo.system.menu; + +import com.lframework.starter.web.inner.enums.system.SysMenuComponentType; +import com.lframework.starter.web.inner.enums.system.SysMenuDisplay; +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +/** + * 创建菜单Vo + */ +@Data +public class CreateSysMenuVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @IsCode + @NotBlank(message = "请输入编号!") + private String code; + + /** + * 标题 + */ + @ApiModelProperty(value = "标题", required = true) + @NotBlank(message = "请输入标题!") + private String title; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 类型 + */ + @ApiModelProperty(value = "类型", required = true) + @NotNull(message = "请选择类型!") + @IsEnum(message = "请选择类型!", enumClass = SysMenuDisplay.class) + private Integer display; + + /** + * 父级ID + */ + @ApiModelProperty("父级ID") + private String parentId; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + // 以下均为前端配置项 + + /** + * 路由名称 + */ + @ApiModelProperty("路由名称") + private String name; + + /** + * 组件类型 + */ + @ApiModelProperty("组件类型") + @IsEnum(message = "组件类型格式错误!", enumClass = SysMenuComponentType.class) + private Integer componentType; + + /** + * 组件 + */ + @ApiModelProperty("组件") + private String component; + + /** + * 自定义请求参数 + */ + @ApiModelProperty("自定义请求参数") + private String requestParam; + + /** + * 路径 + */ + @ApiModelProperty("路径") + private String path; + + /** + * 是否隐藏 + */ + @ApiModelProperty("是否隐藏") + private Boolean hidden; + + /** + * 是否不缓存 + */ + @ApiModelProperty("是否不缓存") + private Boolean noCache; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/SysMenuSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/SysMenuSelectorVo.java new file mode 100644 index 0000000..920e7f0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/SysMenuSelectorVo.java @@ -0,0 +1,21 @@ +package com.lframework.starter.web.inner.vo.system.menu; + +import com.lframework.starter.web.inner.enums.system.SysMenuDisplay; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysMenuSelectorVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("类型") + @IsEnum(message = "类型格式不正确!", enumClass = SysMenuDisplay.class) + private Integer display; + + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/UpdateSysMenuVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/UpdateSysMenuVo.java new file mode 100644 index 0000000..0daaed6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/menu/UpdateSysMenuVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.vo.system.menu; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysMenuVo extends CreateSysMenuVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + @TypeMismatch(message = "状态格式有误!") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/mail/QuerySysMailMessageVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/mail/QuerySysMailMessageVo.java new file mode 100644 index 0000000..c68ce52 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/mail/QuerySysMailMessageVo.java @@ -0,0 +1,47 @@ +package com.lframework.starter.web.inner.vo.system.message.mail; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysMailMessageVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + + /** + * 邮箱地址 + */ + @ApiModelProperty("邮箱地址") + private String mail; + + /** + * 发送状态 + */ + @ApiModelProperty("发送状态") + private Integer sendStatus; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageByUserVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageByUserVo.java new file mode 100644 index 0000000..c773081 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageByUserVo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.inner.vo.system.message.site; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysSiteMessageByUserVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + + /** + * 用户ID + */ + @ApiModelProperty(hidden = true) + private String userId; + + /** + * 是否已读 + */ + @ApiModelProperty("是否已读") + private Boolean readed; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageVo.java new file mode 100644 index 0000000..0deff77 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/message/site/QuerySysSiteMessageVo.java @@ -0,0 +1,42 @@ +package com.lframework.starter.web.inner.vo.system.message.site; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysSiteMessageVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + + /** + * 是否已读 + */ + @ApiModelProperty("是否已读") + private Boolean readed; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/module/SysModuleTenantVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/module/SysModuleTenantVo.java new file mode 100644 index 0000000..c03e7a2 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/module/SysModuleTenantVo.java @@ -0,0 +1,50 @@ +package com.lframework.starter.web.inner.vo.system.module; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class SysModuleTenantVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + @Data + public static class SysModuleVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 模块ID + */ + @ApiModelProperty(value = "模块ID", required = true) + @NotNull(message = "模块ID不能为空!") + private Integer moduleId; + + /** + * 过期时间 + */ + @ApiModelProperty(value = "过期时间", required = true) + @NotNull(message = "过期时间不能为空!") + private LocalDateTime expireTime; + } + + /** + * 租户ID + */ + @ApiModelProperty(value = "租户ID", required = true) + @NotNull(message = "租户ID不能为空!") + private Integer tenantId; + + /** + * 模块 + */ + @ApiModelProperty("模块") + @Valid + private List modules; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/CreateSysNoticeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/CreateSysNoticeVo.java new file mode 100644 index 0000000..9ce367e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/CreateSysNoticeVo.java @@ -0,0 +1,38 @@ +package com.lframework.starter.web.inner.vo.system.notice; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateSysNoticeVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty(value = "标题", required = true) + @NotBlank(message = "请输入标题!") + private String title; + + /** + * 内容 + */ + @ApiModelProperty(value = "内容", required = true) + @NotBlank(message = "请输入内容!") + private String content; + + /** + * 是否发布 + */ + @ApiModelProperty(value = "是否发布", required = true) + @TypeMismatch(message = "是否发布格式有误!") + @NotNull(message = "请选择是否发布!") + private Boolean published; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeByUserVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeByUserVo.java new file mode 100644 index 0000000..2cbc853 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeByUserVo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.inner.vo.system.notice; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysNoticeByUserVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + + /** + * 用户ID + */ + @ApiModelProperty(hidden = true) + private String userId; + + /** + * 是否已读 + */ + @ApiModelProperty("是否已读") + private Boolean readed; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeVo.java new file mode 100644 index 0000000..524dae1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/QuerySysNoticeVo.java @@ -0,0 +1,42 @@ +package com.lframework.starter.web.inner.vo.system.notice; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysNoticeVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + @ApiModelProperty("标题") + private String title; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/UpdateSysNoticeVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/UpdateSysNoticeVo.java new file mode 100644 index 0000000..c292afb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notice/UpdateSysNoticeVo.java @@ -0,0 +1,52 @@ +package com.lframework.starter.web.inner.vo.system.notice; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysNoticeVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "id不能为空!") + private String id; + + /** + * 标题 + */ + @ApiModelProperty(value = "标题", required = true) + @NotBlank(message = "请输入标题!") + private String title; + + /** + * 内容 + */ + @ApiModelProperty(value = "内容", required = true) + @NotBlank(message = "请输入内容!") + private String content; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @TypeMismatch(message = "状态格式有误!") + @NotNull(message = "请选择状态!") + private Boolean available; + + /** + * 是否发布 + */ + @ApiModelProperty(value = "是否发布", required = true) + @TypeMismatch(message = "是否发布格式有误!") + @NotNull(message = "请选择是否发布!") + private Boolean published; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/CreateSysNotifyGroupVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/CreateSysNotifyGroupVo.java new file mode 100644 index 0000000..bf5e278 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/CreateSysNotifyGroupVo.java @@ -0,0 +1,53 @@ +package com.lframework.starter.web.inner.vo.system.notify; + +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.inner.enums.system.SysNotifyReceiverType; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateSysNotifyGroupVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 接收者类型 + */ + @ApiModelProperty(value = "接收者类型", required = true) + @NotNull(message = "接收者类型不能为空!") + @IsEnum(enumClass = SysNotifyReceiverType.class, message = "接收者类型格式不正确!") + private Integer receiverType; + + /** + * 接收者ID + */ + @ApiModelProperty(value = "接收者ID", required = true) + @NotEmpty(message = "接收者ID不能为空!") + private List receiverIds; + + /** + * 消息类型 + */ + @ApiModelProperty(value = "消息类型", required = true) + @NotEmpty(message = "消息类型不能为空!") + private List messageType; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/QuerySysNotifyGroupVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/QuerySysNotifyGroupVo.java new file mode 100644 index 0000000..d2d77b6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/QuerySysNotifyGroupVo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.vo.system.notify; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysNotifyGroupVo extends SortPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + + /** + * 状态 + */ + @ApiModelProperty("状态") + @TypeMismatch(message = "状态格式有误!") + private Boolean available; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/SysNotifyGroupSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/SysNotifyGroupSelectorVo.java new file mode 100644 index 0000000..9c7cdca --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/SysNotifyGroupSelectorVo.java @@ -0,0 +1,25 @@ +package com.lframework.starter.web.inner.vo.system.notify; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysNotifyGroupSelectorVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/UpdateSysNotifyGroupVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/UpdateSysNotifyGroupVo.java new file mode 100644 index 0000000..647d519 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/notify/UpdateSysNotifyGroupVo.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.inner.vo.system.notify; + +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysNotifyGroupVo extends CreateSysNotifyGroupVo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "id不能为空!") + private String id; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/CreateSysOpenDomainVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/CreateSysOpenDomainVo.java new file mode 100644 index 0000000..4405c57 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/CreateSysOpenDomainVo.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.inner.vo.system.open; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateSysOpenDomainVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * API密钥 + */ + @ApiModelProperty(value = "API密钥", required = true) + @NotBlank(message = "API密钥不能为空!") + private String apiSecret; + + /** + * 租户ID + */ + @ApiModelProperty(value = "租户ID", required = true) + @NotNull(message = "租户ID不能为空!") + private Integer tenantId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/QuerySysOpenDomainVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/QuerySysOpenDomainVo.java new file mode 100644 index 0000000..eed871f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/QuerySysOpenDomainVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.system.open; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QuerySysOpenDomainVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/SysOpenDomainSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/SysOpenDomainSelectorVo.java new file mode 100644 index 0000000..88c969b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/SysOpenDomainSelectorVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.system.open; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysOpenDomainSelectorVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + private String id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainSecretVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainSecretVo.java new file mode 100644 index 0000000..6d4c63c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainSecretVo.java @@ -0,0 +1,28 @@ +package com.lframework.starter.web.inner.vo.system.open; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysOpenDomainSecretVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private Long id; + + /** + * Api密钥 + */ + @ApiModelProperty(value = "Api密钥", required = true) + @NotBlank(message = "Api密钥不能为空!") + private String apiSecret; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainVo.java new file mode 100644 index 0000000..6668210 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/open/UpdateSysOpenDomainVo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.inner.vo.system.open; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysOpenDomainVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private Long id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + @NotNull(message = "租户ID不能为空!") + private Integer tenantId; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/CreateSysParameterVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/CreateSysParameterVo.java new file mode 100644 index 0000000..69277e0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/CreateSysParameterVo.java @@ -0,0 +1,35 @@ +package com.lframework.starter.web.inner.vo.system.parameter; + +import com.lframework.starter.web.core.components.validation.Pattern; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateSysParameterVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 键 + */ + @ApiModelProperty(value = "键", required = true) + @NotBlank(message = "请输入键!") + @Pattern(regexp = "^[A-Za-z0-9\\.\\-_]+$", message = "键只能由大写字母、小写字母、数字或._-组成") + private String pmKey; + + /** + * 值 + */ + @ApiModelProperty("值") + private String pmValue; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/QuerySysParameterVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/QuerySysParameterVo.java new file mode 100644 index 0000000..1b62977 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/QuerySysParameterVo.java @@ -0,0 +1,36 @@ +package com.lframework.starter.web.inner.vo.system.parameter; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysParameterVo extends SortPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 键 + */ + @ApiModelProperty("键") + private String pmKey; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/UpdateSysParameterVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/UpdateSysParameterVo.java new file mode 100644 index 0000000..499a83c --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/parameter/UpdateSysParameterVo.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.inner.vo.system.parameter; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysParameterVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private Long id; + + /** + * 值 + */ + @ApiModelProperty("值") + private String pmValue; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/CreateSysDataPermissionDataVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/CreateSysDataPermissionDataVo.java new file mode 100644 index 0000000..445f3c5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/CreateSysDataPermissionDataVo.java @@ -0,0 +1,45 @@ +package com.lframework.starter.web.inner.vo.system.permission; + +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.inner.enums.system.SysDataPermissionDataBizType; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateSysDataPermissionDataVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 业务ID + */ + @ApiModelProperty(value = "业务ID", required = true) + @NotEmpty(message = "业务ID不能为空!") + private List bizIds; + + /** + * 业务类型 + */ + @ApiModelProperty(value = "业务类型", required = true) + @NotNull(message = "业务类型不能为空!") + @IsEnum(message = "业务类型格式错误!", enumClass = SysDataPermissionDataBizType.class) + private Integer bizType; + + /** + * 权限类型 + */ + @ApiModelProperty(value = "权限类型", required = true) + @NotNull(message = "权限类型不能为空!") + private Integer permissionType; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/SysDataPermissionModelDetailVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/SysDataPermissionModelDetailVo.java new file mode 100644 index 0000000..c3e9078 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/permission/SysDataPermissionModelDetailVo.java @@ -0,0 +1,65 @@ +package com.lframework.starter.web.inner.vo.system.permission; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class SysDataPermissionModelDetailVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty("ID") + + private String id; + + /** + * 明细ID + */ + @ApiModelProperty(value = "明细ID", required = true) + @NotNull(message = "明细ID不能为空!") + private Integer detailId; + + /** + * 节点类型 + */ + @ApiModelProperty(value = "节点类型", required = true) + @NotNull(message = "节点类型不能为空!") + private Integer nodeType; + + /** + * 计算类型 + */ + @ApiModelProperty("计算类型") + private Integer calcType; + + /** + * 值 + */ + @ApiModelProperty("值") + private String value; + + /** + * 值 + */ + @ApiModelProperty("值") + private List values; + + /** + * 条件类型 + */ + @ApiModelProperty("条件类型") + private Integer conditionType; + + /** + * 子节点 + */ + @ApiModelProperty("子节点") + private List children; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/CreateSysRoleVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/CreateSysRoleVo.java new file mode 100644 index 0000000..998d45e --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/CreateSysRoleVo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.inner.vo.system.role; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateSysRoleVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @IsCode + @NotBlank(message = "请输入编号!") + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty(value = "分类ID", required = true) + @NotBlank(message = "请选择分类!") + private String categoryId; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/QuerySysRoleVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/QuerySysRoleVo.java new file mode 100644 index 0000000..2ce3203 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/QuerySysRoleVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.vo.system.role; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QuerySysRoleVo extends SortPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 分类ID + */ + @ApiModelProperty("分类ID") + private String categoryId; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleMenuSettingVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleMenuSettingVo.java new file mode 100644 index 0000000..b586cf1 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleMenuSettingVo.java @@ -0,0 +1,24 @@ +package com.lframework.starter.web.inner.vo.system.role; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.util.List; +import javax.validation.constraints.NotEmpty; +import lombok.Data; + +@Data +public class SysRoleMenuSettingVo implements BaseVo { + + /** + * 角色ID + */ + @ApiModelProperty(value = "角色ID", required = true) + @NotEmpty(message = "角色ID不能为空!") + private List roleIds; + + /** + * 菜单ID + */ + @ApiModelProperty("菜单ID") + private List menuIds; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleSelectorVo.java new file mode 100644 index 0000000..6381e4b --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/SysRoleSelectorVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.system.role; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysRoleSelectorVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/UpdateSysRoleVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/UpdateSysRoleVo.java new file mode 100644 index 0000000..64940cb --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/UpdateSysRoleVo.java @@ -0,0 +1,63 @@ +package com.lframework.starter.web.inner.vo.system.role; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysRoleVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @IsCode + @NotBlank(message = "请输入编号!") + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * 分类ID + */ + @ApiModelProperty(value = "分类ID", required = true) + @NotBlank(message = "请选择分类!") + private String categoryId; + + /** + * 权限 + */ + @ApiModelProperty("权限") + private String permission; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/CreateSysRoleCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/CreateSysRoleCategoryVo.java new file mode 100644 index 0000000..57dcf9f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/CreateSysRoleCategoryVo.java @@ -0,0 +1,29 @@ +package com.lframework.starter.web.inner.vo.system.role.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateSysRoleCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/SysRoleCategorySelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/SysRoleCategorySelectorVo.java new file mode 100644 index 0000000..0ed7a09 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/SysRoleCategorySelectorVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.inner.vo.system.role.category; + +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class SysRoleCategorySelectorVo extends PageVo { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/UpdateSysRoleCategoryVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/UpdateSysRoleCategoryVo.java new file mode 100644 index 0000000..74e5633 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/role/category/UpdateSysRoleCategoryVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.vo.system.role.category; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysRoleCategoryVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "id不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "请输入编号!") + @IsCode + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/CreateTenantVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/CreateTenantVo.java new file mode 100644 index 0000000..c7a5d4d --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/CreateTenantVo.java @@ -0,0 +1,41 @@ +package com.lframework.starter.web.inner.vo.system.tenant; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateTenantVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * JdbcUrl + */ + @ApiModelProperty(value = "JdbcUrl", required = true) + @NotBlank(message = "请输入JdbcUrl!") + private String jdbcUrl; + + /** + * Jdbc用户名 + */ + @ApiModelProperty(value = "Jdbc用户名", required = true) + @NotBlank(message = "请输入Jdbc用户名!") + private String jdbcUsername; + + /** + * Jdbc密码 + */ + @ApiModelProperty(value = "Jdbc密码", required = true) + @NotBlank(message = "请输入Jdbc密码!") + private String jdbcPassword; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/QueryTenantVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/QueryTenantVo.java new file mode 100644 index 0000000..2363da0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/QueryTenantVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.system.tenant; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QueryTenantVo extends SortPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + private String tenantId; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/TenantSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/TenantSelectorVo.java new file mode 100644 index 0000000..7cda5c0 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/TenantSelectorVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.system.tenant; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class TenantSelectorVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + private String tenantId; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/UpdateTenantVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/UpdateTenantVo.java new file mode 100644 index 0000000..8128872 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/tenant/UpdateTenantVo.java @@ -0,0 +1,53 @@ +package com.lframework.starter.web.inner.vo.system.tenant; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateTenantVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotNull(message = "ID不能为空!") + private Integer id; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "请输入名称!") + private String name; + + /** + * JdbcUrl + */ + @ApiModelProperty("JdbcUrl") + private String jdbcUrl; + + /** + * Jdbc用户名 + */ + @ApiModelProperty("Jdbc用户名") + private String jdbcUsername; + + /** + * Jdbc密码 + */ + @ApiModelProperty("Jdbc密码") + private String jdbcPassword; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "请选择状态!") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/CreateSysUserVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/CreateSysUserVo.java new file mode 100644 index 0000000..86e2260 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/CreateSysUserVo.java @@ -0,0 +1,90 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.components.validation.Pattern; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.inner.enums.system.Gender; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CreateSysUserVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @IsCode + @NotBlank(message = "请输入编号!") + @ApiModelProperty(value = "编号", required = true) + private String code; + + /** + * 姓名 + */ + @NotBlank(message = "请输入姓名!") + @ApiModelProperty(value = "姓名", required = true) + private String name; + + /** + * 用户名 + */ + @NotBlank(message = "请输入用户名!") + @ApiModelProperty(value = "用户名", required = true) + private String username; + + /** + * 密码 + */ + @Pattern(regexp = PatternPool.PATTERN_STR_PASSWORD, message = "密码长度必须为5-16位,只允许包含大写字母、小写字母、数字、下划线") + @NotBlank(message = "请输入密码!") + @ApiModelProperty(value = "密码", required = true) + private String password; + + /** + * 邮箱 + */ + @Pattern(regexp = PatternPool.PATTERN_STR_EMAIL, message = "邮箱地址格式不正确!") + @ApiModelProperty("邮箱") + private String email; + + /** + * 联系电话 + */ + @Pattern(regexp = PatternPool.PATTERN_STR_CN_TEL, message = "联系电话格式不正确!") + @ApiModelProperty("联系电话") + private String telephone; + + /** + * 性别 0-未知 1-男 2-女 + */ + @NotNull(message = "请选择性别!") + @IsEnum(message = "请选择性别!", enumClass = Gender.class) + @ApiModelProperty("性别") + private Integer gender; + + /** + * 部门ID + */ + @ApiModelProperty("部门ID") + private List deptIds; + + /** + * 角色ID + */ + @ApiModelProperty("角色ID") + private List roleIds; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetLoginCaptchaRequieVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetLoginCaptchaRequieVo.java new file mode 100644 index 0000000..7c61fdf --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetLoginCaptchaRequieVo.java @@ -0,0 +1,30 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 用户登录请求参数 + */ +@Data +public class GetLoginCaptchaRequieVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 租户名称 + */ + @ApiModelProperty("租户名称") + private String tenantName; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名", required = true) + @NotBlank(message = "用户名不能为空!") + private String username; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetTelephoneLoginCaptchaVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetTelephoneLoginCaptchaVo.java new file mode 100644 index 0000000..fe64181 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/GetTelephoneLoginCaptchaVo.java @@ -0,0 +1,23 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.web.core.components.validation.Pattern; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class GetTelephoneLoginCaptchaVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号", required = true) + @Pattern(regexp = PatternPool.PATTERN_STR_CN_TEL, message = "手机号格式不正确!") + @NotBlank(message = "手机号不能为空!") + private String telephone; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/LoginVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/LoginVo.java new file mode 100644 index 0000000..a15f417 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/LoginVo.java @@ -0,0 +1,48 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +/** + * 用户登录请求参数 + */ +@Data +public class LoginVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 租户名称 + */ + @ApiModelProperty("租户名称") + private String tenantName; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名", required = true) + @NotBlank(message = "用户名不能为空!") + private String username; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码", required = true) + @NotBlank(message = "密码不能为空!") + private String password; + + /** + * sn + */ + @ApiModelProperty(value = "sn,验证码流水号", required = true) + private String sn; + + /** + * 验证码 + */ + @ApiModelProperty(value = "验证码", required = true) + private String captcha; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/QuerySysUserVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/QuerySysUserVo.java new file mode 100644 index 0000000..7afa761 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/QuerySysUserVo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class QuerySysUserVo extends SortPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 用户名 + */ + @ApiModelProperty("用户名") + private String username; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 部门ID + */ + @ApiModelProperty("部门ID") + private String deptId; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; + + /** + * 是否锁定 + */ + @ApiModelProperty("是否锁定") + private Boolean lockStatus; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/RegistUserVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/RegistUserVo.java new file mode 100644 index 0000000..441947f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/RegistUserVo.java @@ -0,0 +1,51 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.web.core.components.validation.Pattern; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class RegistUserVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名", required = true) + @NotBlank(message = "用户名不能为空!") + private String username; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码", required = true) + @Pattern(regexp = PatternPool.PATTERN_STR_PASSWORD, message = "密码长度必须为5-16位,只允许包含大写字母、小写字母、数字、下划线") + @NotBlank(message = "密码不能为空!") + private String password; + + /** + * 姓名 + */ + @ApiModelProperty(value = "姓名", required = true) + @NotBlank(message = "姓名不能为空!") + private String name; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + @Pattern(regexp = PatternPool.PATTERN_STR_EMAIL, message = "邮箱地址格式不正确!") + private String email; + + /** + * 联系电话 + */ + @ApiModelProperty("联系电话") + @Pattern(regexp = PatternPool.PATTERN_STR_CN_TEL, message = "联系电话格式不正确!") + private String telephone; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserRoleSettingVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserRoleSettingVo.java new file mode 100644 index 0000000..e5bcfe9 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserRoleSettingVo.java @@ -0,0 +1,27 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotEmpty; +import lombok.Data; + +@Data +public class SysUserRoleSettingVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @ApiModelProperty(value = "用户ID", required = true) + @NotEmpty(message = "用户ID不能为空!") + private List userIds; + + /** + * 角色ID + */ + @ApiModelProperty("角色ID") + private List roleIds; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserSelectorVo.java new file mode 100644 index 0000000..14a4ca3 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/SysUserSelectorVo.java @@ -0,0 +1,37 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysUserSelectorVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + private String name; + + /** + * 用户名 + */ + @ApiModelProperty("用户名") + private String username; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneBindUserVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneBindUserVo.java new file mode 100644 index 0000000..9630a55 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneBindUserVo.java @@ -0,0 +1,43 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.web.core.components.validation.Pattern; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +/** + * 手机号绑定用户 + * + * @author zmj + * @since 2022/4/25 + */ +@Data +public class TelephoneBindUserVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号", required = true) + @Pattern(regexp = PatternPool.PATTERN_STR_CN_TEL, message = "手机号格式不正确!") + @NotBlank(message = "手机号不能为空!") + private String telephone; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名", required = true) + @NotBlank(message = "用户名不能为空!") + private String username; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码", required = true) + @NotBlank(message = "密码不能为空!") + private String password; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneLoginVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneLoginVo.java new file mode 100644 index 0000000..4d20e13 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/TelephoneLoginVo.java @@ -0,0 +1,33 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.common.constants.PatternPool; +import com.lframework.starter.web.core.components.validation.Pattern; +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +/** + * 手机号登录请求参数 + */ +@Data +public class TelephoneLoginVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号", required = true) + @Pattern(regexp = PatternPool.PATTERN_STR_CN_TEL, message = "手机号格式不正确!") + @NotBlank(message = "手机号不能为空!") + private String telephone; + + /** + * 验证码 + */ + @ApiModelProperty(value = "验证码", required = true) + @NotBlank(message = "验证码不能为空!") + private String captcha; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/UpdateSysUserVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/UpdateSysUserVo.java new file mode 100644 index 0000000..0d90005 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/UpdateSysUserVo.java @@ -0,0 +1,98 @@ +package com.lframework.starter.web.inner.vo.system.user; + +import com.lframework.starter.web.core.components.validation.IsCode; +import com.lframework.starter.web.core.components.validation.IsEnum; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.inner.enums.system.Gender; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysUserVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "ID不能为空!") + private String id; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @IsCode + @NotBlank(message = "请输入编号!") + private String code; + + /** + * 姓名 + */ + @ApiModelProperty(value = "姓名", required = true) + @NotBlank(message = "请输入姓名!") + private String name; + + /** + * 用户名 + */ + @ApiModelProperty(value = "用户名", required = true) + @NotBlank(message = "请输入用户名!") + private String username; + + /** + * 密码 如果不为空则为修改密码 + */ + @ApiModelProperty("密码 如果不为空则为修改密码") + private String password; + + /** + * 邮箱 + */ + @ApiModelProperty("邮箱") + private String email; + + /** + * 联系电话 + */ + @ApiModelProperty("联系电话") + private String telephone; + + /** + * 性别 + */ + @ApiModelProperty(value = "性别", required = true) + @NotNull(message = "请选择性别!") + @IsEnum(message = "请选择性别!", enumClass = Gender.class) + private Integer gender; + + /** + * 角色ID + */ + @ApiModelProperty("角色ID") + private List roleIds; + + /** + * 部门ID + */ + @ApiModelProperty("部门ID") + private List deptIds; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "请选择状态!") + private Boolean available; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/CreateSysUserGroupVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/CreateSysUserGroupVo.java new file mode 100644 index 0000000..019d96f --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/CreateSysUserGroupVo.java @@ -0,0 +1,40 @@ +package com.lframework.starter.web.inner.vo.system.user.group; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.List; +import javax.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class CreateSysUserGroupVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty(value = "编号", required = true) + @NotBlank(message = "编号不能为空!") + private String code; + + /** + * 名称 + */ + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = "名称不能为空!") + private String name; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String description; + + /** + * 用户ID + */ + @ApiModelProperty("用户ID") + private List userIds; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/QuerySysUserGroupVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/QuerySysUserGroupVo.java new file mode 100644 index 0000000..e845f80 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/QuerySysUserGroupVo.java @@ -0,0 +1,49 @@ +package com.lframework.starter.web.inner.vo.system.user.group; + +import com.lframework.starter.web.core.components.validation.TypeMismatch; +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.SortPageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +@Data +public class QuerySysUserGroupVo extends SortPageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 创建时间 起始时间 + */ + @ApiModelProperty("创建时间 起始时间") + @TypeMismatch(message = "创建时间起始时间格式有误!") + private LocalDateTime createTimeStart; + + /** + * 创建时间 截止时间 + */ + @ApiModelProperty("创建时间 截止时间") + @TypeMismatch(message = "创建时间截止时间格式有误!") + private LocalDateTime createTimeEnd; + + /** + * 状态 + */ + @ApiModelProperty("状态") + @TypeMismatch(message = "状态格式有误!") + private Boolean available; + +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/SysUserGroupSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/SysUserGroupSelectorVo.java new file mode 100644 index 0000000..170faf6 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/SysUserGroupSelectorVo.java @@ -0,0 +1,31 @@ +package com.lframework.starter.web.inner.vo.system.user.group; + +import com.lframework.starter.web.core.vo.BaseVo; +import com.lframework.starter.web.core.vo.PageVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysUserGroupSelectorVo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 编号 + */ + @ApiModelProperty("编号") + private String code; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/UpdateSysUserGroupVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/UpdateSysUserGroupVo.java new file mode 100644 index 0000000..1f30af5 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/user/group/UpdateSysUserGroupVo.java @@ -0,0 +1,26 @@ +package com.lframework.starter.web.inner.vo.system.user.group; + +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class UpdateSysUserGroupVo extends CreateSysUserGroupVo { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID", required = true) + @NotBlank(message = "id不能为空!") + private String id; + + /** + * 状态 + */ + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空!") + private Boolean available; +} diff --git a/web-starter/src/main/java/com/lframework/starter/web/utils/PrintUtil.java b/web-starter/src/main/java/com/lframework/starter/web/utils/PrintUtil.java deleted file mode 100644 index 152066b..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/utils/PrintUtil.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.lframework.starter.web.utils; - -import com.lframework.starter.common.exceptions.impl.DefaultSysException; -import com.lframework.starter.common.utils.CollectionUtil; -import com.lframework.starter.web.bo.BasePrintDataBo; -import com.lframework.starter.web.dto.BaseDto; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateException; -import freemarker.template.TemplateExceptionHandler; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.StringWriter; -import java.util.Map; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class PrintUtil { - - /** - * 获取freeMarker Template - * - * @param templateName - * @return - */ - private static Template getTemplate(String templateName) { - - Configuration cfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); - cfg.setClassForTemplateLoading(PrintUtil.class, "/"); - cfg.setDefaultEncoding("UTF-8"); - cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); - try { - return cfg.getTemplate(templateName); - } catch (IOException e) { - log.error(e.getMessage(), e); - throw new DefaultSysException(e.getMessage()); - } - } - - /** - * 生成打印模板的html - * - * @param templateName 模板名称 - * @param data 数据 - * @return - */ - public static > String generate(String templateName, - T data) { - - Template template = getTemplate(templateName); - Map root = data == null ? CollectionUtil.emptyMap() : JsonUtil.convert(data, Map.class); - StringWriter stringWriter = new StringWriter(); - BufferedWriter writer = new BufferedWriter(stringWriter); - - try { - template.process(root, writer); - } catch (TemplateException | IOException e) { - log.error(e.getMessage(), e); - throw new DefaultSysException(e.getMessage()); - } - - return stringWriter.toString(); - } -} diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPushWorker.java similarity index 92% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPushWorker.java index 0604339..9ecccef 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPushWorker.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPushWorker.java @@ -1,11 +1,11 @@ -package com.lframework.starter.websocket.components; +package com.lframework.starter.web.websocket.components; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.common.utils.StringUtil; import com.lframework.starter.common.utils.ThreadUtil; -import com.lframework.starter.web.dto.WsPushData; -import com.lframework.starter.web.utils.JsonUtil; -import com.lframework.starter.websocket.entity.WsSession; +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.websocket.entity.WsSession; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusher.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPusher.java similarity index 50% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusher.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPusher.java index 8f270f7..b53f74f 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusher.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPusher.java @@ -1,6 +1,6 @@ -package com.lframework.starter.websocket.components; +package com.lframework.starter.web.websocket.components; -import com.lframework.starter.web.dto.WsPushData; +import com.lframework.starter.web.websocket.dto.WsPushData; public interface WsDataPusher { diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusherImpl.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPusherImpl.java similarity index 86% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusherImpl.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPusherImpl.java index d833cd7..6573a85 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsDataPusherImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsDataPusherImpl.java @@ -1,10 +1,10 @@ -package com.lframework.starter.websocket.components; +package com.lframework.starter.web.websocket.components; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.dto.WsPushData; -import com.lframework.starter.web.utils.JsonUtil; -import com.lframework.starter.web.utils.TenantUtil; -import com.lframework.starter.websocket.config.WsProperties; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.config.properties.WsProperties; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsSessionManager.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsSessionManager.java similarity index 94% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsSessionManager.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsSessionManager.java index bb699bc..e63c208 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/components/WsSessionManager.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/components/WsSessionManager.java @@ -1,9 +1,9 @@ -package com.lframework.starter.websocket.components; +package com.lframework.starter.web.websocket.components; import com.lframework.starter.common.exceptions.impl.DefaultSysException; import com.lframework.starter.common.utils.CollectionUtil; -import com.lframework.starter.web.utils.TenantUtil; -import com.lframework.starter.websocket.entity.WsSession; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.websocket.entity.WsSession; import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/constants/WsPool.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/constants/WsPool.java similarity index 86% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/constants/WsPool.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/constants/WsPool.java index 6e26867..5100ebc 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/constants/WsPool.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/constants/WsPool.java @@ -1,4 +1,4 @@ -package com.lframework.starter.websocket.constants; +package com.lframework.starter.web.websocket.constants; public interface WsPool { diff --git a/web-starter/src/main/java/com/lframework/starter/web/dto/WsPushData.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/dto/WsPushData.java similarity index 87% rename from web-starter/src/main/java/com/lframework/starter/web/dto/WsPushData.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/dto/WsPushData.java index 8978fef..f605e38 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/dto/WsPushData.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/dto/WsPushData.java @@ -1,6 +1,7 @@ -package com.lframework.starter.web.dto; +package com.lframework.starter.web.websocket.dto; -import com.lframework.starter.web.utils.JsonUtil; +import com.lframework.starter.web.core.dto.BaseDto; +import com.lframework.starter.web.core.utils.JsonUtil; import java.io.Serializable; import java.util.List; import lombok.Data; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/entity/WsSession.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/entity/WsSession.java similarity index 75% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/entity/WsSession.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/entity/WsSession.java index 589fb95..6f371d1 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/entity/WsSession.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/entity/WsSession.java @@ -1,8 +1,8 @@ -package com.lframework.starter.websocket.entity; +package com.lframework.starter.web.websocket.entity; -import com.lframework.starter.web.components.security.AbstractUserDetails; -import com.lframework.starter.websocket.components.WsSessionManager; -import com.lframework.starter.websocket.constants.WsPool; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.websocket.components.WsSessionManager; +import com.lframework.starter.web.websocket.constants.WsPool; import lombok.Data; import org.springframework.web.socket.WebSocketSession; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserConnectEvent.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/events/UserConnectEvent.java similarity index 83% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserConnectEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/events/UserConnectEvent.java index 7c51d52..c604d1a 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserConnectEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/events/UserConnectEvent.java @@ -1,6 +1,6 @@ -package com.lframework.starter.websocket.events; +package com.lframework.starter.web.websocket.events; -import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; import org.springframework.context.ApplicationEvent; /** diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserDisConnectEvent.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/events/UserDisConnectEvent.java similarity index 83% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserDisConnectEvent.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/events/UserDisConnectEvent.java index a683ec8..b87d39f 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/events/UserDisConnectEvent.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/events/UserDisConnectEvent.java @@ -1,6 +1,6 @@ -package com.lframework.starter.websocket.events; +package com.lframework.starter.web.websocket.events; -import com.lframework.starter.web.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; import org.springframework.context.ApplicationEvent; /** diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/handler/WsHandler.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/handler/WsHandler.java similarity index 75% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/handler/WsHandler.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/handler/WsHandler.java index d5da97e..a010cd2 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/handler/WsHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/handler/WsHandler.java @@ -1,19 +1,19 @@ -package com.lframework.starter.websocket.handler; +package com.lframework.starter.web.websocket.handler; import com.lframework.starter.common.utils.StringUtil; -import com.lframework.starter.websocket.events.UserConnectEvent; -import com.lframework.starter.websocket.events.UserDisConnectEvent; -import com.lframework.starter.web.components.security.AbstractUserDetails; -import com.lframework.starter.web.components.security.SecurityUtil; -import com.lframework.starter.web.components.tenant.TenantContextHolder; -import com.lframework.starter.web.utils.ApplicationUtil; -import com.lframework.starter.web.utils.JsonUtil; -import com.lframework.starter.web.utils.TenantUtil; -import com.lframework.starter.websocket.components.WsSessionManager; -import com.lframework.starter.websocket.constants.WsPool; -import com.lframework.starter.websocket.entity.WsSession; -import com.lframework.starter.websocket.service.WsDataProcessService; -import com.lframework.starter.websocket.vo.WsVo; +import com.lframework.starter.web.websocket.events.UserConnectEvent; +import com.lframework.starter.web.websocket.events.UserDisConnectEvent; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.core.components.tenant.TenantContextHolder; +import com.lframework.starter.web.core.utils.ApplicationUtil; +import com.lframework.starter.web.core.utils.JsonUtil; +import com.lframework.starter.web.core.utils.TenantUtil; +import com.lframework.starter.web.websocket.components.WsSessionManager; +import com.lframework.starter.web.websocket.constants.WsPool; +import com.lframework.starter.web.websocket.entity.WsSession; +import com.lframework.starter.web.websocket.service.WsDataProcessService; +import com.lframework.starter.web.websocket.vo.WsVo; import lombok.extern.slf4j.Slf4j; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/interceptor/WsHandshakeInterceptor.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/interceptor/WsHandshakeInterceptor.java similarity index 80% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/interceptor/WsHandshakeInterceptor.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/interceptor/WsHandshakeInterceptor.java index 8fa6946..be4c74c 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/interceptor/WsHandshakeInterceptor.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/interceptor/WsHandshakeInterceptor.java @@ -1,8 +1,8 @@ -package com.lframework.starter.websocket.interceptor; +package com.lframework.starter.web.websocket.interceptor; -import com.lframework.starter.web.components.security.AbstractUserDetails; -import com.lframework.starter.web.components.security.SecurityUtil; -import com.lframework.starter.websocket.constants.WsPool; +import com.lframework.starter.web.core.components.security.AbstractUserDetails; +import com.lframework.starter.web.core.components.security.SecurityUtil; +import com.lframework.starter.web.websocket.constants.WsPool; import java.util.Map; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/listener/WsUserConnectListener.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/listener/WsUserConnectListener.java similarity index 78% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/listener/WsUserConnectListener.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/listener/WsUserConnectListener.java index 51c4ebb..40015a9 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/listener/WsUserConnectListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/listener/WsUserConnectListener.java @@ -1,9 +1,9 @@ -package com.lframework.starter.websocket.listener; +package com.lframework.starter.web.websocket.listener; -import com.lframework.starter.websocket.events.UserConnectEvent; -import com.lframework.starter.websocket.components.WsDataPusher; -import com.lframework.starter.web.dto.WsPushData; -import com.lframework.starter.websocket.constants.WsPool; +import com.lframework.starter.web.websocket.events.UserConnectEvent; +import com.lframework.starter.web.websocket.components.WsDataPusher; +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.websocket.constants.WsPool; import java.time.LocalDateTime; import java.util.Collections; import java.util.HashMap; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/listener/WsUserDisConnectListener.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/listener/WsUserDisConnectListener.java similarity index 73% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/listener/WsUserDisConnectListener.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/listener/WsUserDisConnectListener.java index 98d75e8..53bf642 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/listener/WsUserDisConnectListener.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/listener/WsUserDisConnectListener.java @@ -1,10 +1,10 @@ -package com.lframework.starter.websocket.listener; +package com.lframework.starter.web.websocket.listener; -import com.lframework.starter.websocket.events.UserDisConnectEvent; -import com.lframework.starter.websocket.components.WsDataPusher; -import com.lframework.starter.web.dto.WsPushData; -import com.lframework.starter.websocket.components.WsSessionManager; -import com.lframework.starter.websocket.constants.WsPool; +import com.lframework.starter.web.websocket.events.UserDisConnectEvent; +import com.lframework.starter.web.websocket.components.WsDataPusher; +import com.lframework.starter.web.websocket.dto.WsPushData; +import com.lframework.starter.web.websocket.components.WsSessionManager; +import com.lframework.starter.web.websocket.constants.WsPool; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/service/WsDataProcessService.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/service/WsDataProcessService.java similarity index 57% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/service/WsDataProcessService.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/service/WsDataProcessService.java index 1b37ca5..e6e5604 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/service/WsDataProcessService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/service/WsDataProcessService.java @@ -1,6 +1,6 @@ -package com.lframework.starter.websocket.service; +package com.lframework.starter.web.websocket.service; -import com.lframework.starter.websocket.vo.WsVo; +import com.lframework.starter.web.websocket.vo.WsVo; /** * WS处理数据Service diff --git a/websocket-starter/src/main/java/com/lframework/starter/websocket/vo/WsVo.java b/web-starter/src/main/java/com/lframework/starter/web/websocket/vo/WsVo.java similarity index 73% rename from websocket-starter/src/main/java/com/lframework/starter/websocket/vo/WsVo.java rename to web-starter/src/main/java/com/lframework/starter/web/websocket/vo/WsVo.java index 145c67d..9451b0d 100644 --- a/websocket-starter/src/main/java/com/lframework/starter/websocket/vo/WsVo.java +++ b/web-starter/src/main/java/com/lframework/starter/web/websocket/vo/WsVo.java @@ -1,6 +1,6 @@ -package com.lframework.starter.websocket.vo; +package com.lframework.starter.web.websocket.vo; -import com.lframework.starter.web.vo.BaseVo; +import com.lframework.starter.web.core.vo.BaseVo; import java.io.Serializable; import lombok.Data; diff --git a/web-starter/src/main/resources/META-INF/spring.factories b/web-starter/src/main/resources/META-INF/spring.factories index 4a8751f..21b3493 100644 --- a/web-starter/src/main/resources/META-INF/spring.factories +++ b/web-starter/src/main/resources/META-INF/spring.factories @@ -2,7 +2,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.lframework.starter.web.config.MybatisAutoConfiguration,\ com.lframework.starter.web.config.MybatisBeanAutoConfiguration,\ com.lframework.starter.web.config.TransactionAutoConfiguration,\ - com.lframework.starter.web.config.TenantConfiguration,\ + com.lframework.starter.web.config.TenantAutoConfiguration,\ com.lframework.starter.web.config.CacheAutoConfiguration,\ com.lframework.starter.web.config.KaptchaAutoConfiguration,\ com.lframework.starter.web.config.LettuceAutoConfiguration,\ @@ -17,4 +17,9 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.lframework.starter.web.config.WebMvcAutoConfiguration,\ com.lframework.starter.web.config.TenantSwitchConfiguration,\ com.lframework.starter.web.config.WebCommonAutoConfiguration,\ - com.lframework.starter.web.config.SaTokenAutoConfiguration \ No newline at end of file + com.lframework.starter.web.config.TenantDynamicDataSourceAutoConfiguration,\ + com.lframework.starter.web.config.SaTokenAutoConfiguration,\ + com.lframework.starter.web.config.GenAutoConfiguration,\ + com.lframework.starter.web.config.MagicCustomAutoConfiguration,\ + com.lframework.starter.web.config.WebSwaggerAutoConfiguration,\ + com.lframework.starter.web.config.WsAutoConfiguration \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/DicCityMapper.xml b/web-starter/src/main/resources/mappers/DicCityMapper.xml new file mode 100644 index 0000000..7499cb3 --- /dev/null +++ b/web-starter/src/main/resources/mappers/DicCityMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + SELECT id, + code, + name, + parent_id, + level + FROM dic_city + + + + + + diff --git a/web-starter/src/main/resources/mappers/GenerateCodeMapper.xml b/web-starter/src/main/resources/mappers/GenerateCodeMapper.xml new file mode 100644 index 0000000..be49558 --- /dev/null +++ b/web-starter/src/main/resources/mappers/GenerateCodeMapper.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/web-starter/src/main/resources/mappers/OpLogsMapper.xml b/web-starter/src/main/resources/mappers/OpLogsMapper.xml new file mode 100644 index 0000000..947b360 --- /dev/null +++ b/web-starter/src/main/resources/mappers/OpLogsMapper.xml @@ -0,0 +1,49 @@ + + + + + + SELECT + * + FROM op_logs + + + DELETE FROM op_logs + WHERE + + + + + + + diff --git a/web-starter/src/main/resources/mappers/QrtzMapper.xml b/web-starter/src/main/resources/mappers/QrtzMapper.xml new file mode 100644 index 0000000..2fe5620 --- /dev/null +++ b/web-starter/src/main/resources/mappers/QrtzMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + SELECT + job.JOB_NAME AS `name`, + job.JOB_GROUP AS `group`, + job.DESCRIPTION AS description, + cron.CRON_EXPRESSION AS cron, + tri.TRIGGER_STATE AS state + FROM qrtz_job_details AS job + LEFT JOIN qrtz_triggers AS tri ON job.JOB_NAME = tri.JOB_NAME AND job.JOB_GROUP = tri.JOB_GROUP + LEFT JOIN qrtz_cron_triggers AS cron ON cron.TRIGGER_NAME = tri.TRIGGER_NAME AND cron.TRIGGER_GROUP= tri.JOB_GROUP + + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/RecursionMappingMappre.xml b/web-starter/src/main/resources/mappers/RecursionMappingMappre.xml new file mode 100644 index 0000000..dcb9a11 --- /dev/null +++ b/web-starter/src/main/resources/mappers/RecursionMappingMappre.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/web-starter/src/main/resources/mappers/SysParameterMapper.xml b/web-starter/src/main/resources/mappers/SysParameterMapper.xml new file mode 100644 index 0000000..e15c82d --- /dev/null +++ b/web-starter/src/main/resources/mappers/SysParameterMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.pm_key, + tb.pm_value, + tb.description, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM sys_parameter AS tb + + diff --git a/web-starter/src/main/resources/mappers/TenantMapper.xml b/web-starter/src/main/resources/mappers/TenantMapper.xml new file mode 100644 index 0000000..e67e978 --- /dev/null +++ b/web-starter/src/main/resources/mappers/TenantMapper.xml @@ -0,0 +1,43 @@ + + + + + SELECT + tb.* + FROM tenant AS tb + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/UserDetailsMapper.xml b/web-starter/src/main/resources/mappers/UserDetailsMapper.xml new file mode 100644 index 0000000..ac1747c --- /dev/null +++ b/web-starter/src/main/resources/mappers/UserDetailsMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/DBMapper.xml b/web-starter/src/main/resources/mappers/gen/DBMapper.xml new file mode 100644 index 0000000..bd32aa6 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/DBMapper.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenCreateColumnConfigMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCreateColumnConfigMapper.xml new file mode 100644 index 0000000..561be3a --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCreateColumnConfigMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + SELECT + g.id, + g.required, + g.order_no + FROM gen_create_column_config AS g + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomListCategoryMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomListCategoryMapper.xml new file mode 100644 index 0000000..2aed7a6 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomListCategoryMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.code, + tb.name, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM gen_custom_list_category AS tb + + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomListHandleColumnMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomListHandleColumnMapper.xml new file mode 100644 index 0000000..ab51402 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomListHandleColumnMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + SELECT o.id, + o.custom_list_id, + o.name, + o.view_type, + o.btn_type, + o.btn_config, + o.icon, + o.request_param, + o.width, + o.order_no + FROM gen_custom_list_handle_column AS o + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomListMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomListMapper.xml new file mode 100644 index 0000000..5763abe --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomListMapper.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + SELECT o.id, + o.name, + o.category_id, + o.data_obj_id, + o.list_type, + o.available, + o.description, + o.create_by, + o.create_time, + o.update_by, + o.update_time + FROM gen_custom_list AS o + + + + + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomListToolbarMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomListToolbarMapper.xml new file mode 100644 index 0000000..b0a7b13 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomListToolbarMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + SELECT o.id, + o.custom_list_id, + o.name, + o.view_type, + o.btn_type, + o.btn_config, + o.icon, + o.request_param, + o.order_no + FROM gen_custom_list_toolbar AS o + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomPageCategoryMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomPageCategoryMapper.xml new file mode 100644 index 0000000..05a6890 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomPageCategoryMapper.xml @@ -0,0 +1,15 @@ + + + + + + SELECT + tb.* + FROM gen_custom_page_category AS tb + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomPageMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomPageMapper.xml new file mode 100644 index 0000000..3ed427b --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomPageMapper.xml @@ -0,0 +1,46 @@ + + + + + + SELECT + o.* + FROM gen_custom_page AS o + + + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomSelectorCategoryMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomSelectorCategoryMapper.xml new file mode 100644 index 0000000..ccfd645 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomSelectorCategoryMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.code, + tb.name, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM gen_custom_selector_category AS tb + + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenCustomSelectorMapper.xml b/web-starter/src/main/resources/mappers/gen/GenCustomSelectorMapper.xml new file mode 100644 index 0000000..e145cc1 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenCustomSelectorMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + SELECT o.id, + o.name, + o.category_id, + o.custom_list_id, + o.available, + o.description, + o.create_by, + o.create_time, + o.update_by, + o.update_time + FROM gen_custom_selector AS o + + + + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenDataEntityCategoryMapper.xml b/web-starter/src/main/resources/mappers/gen/GenDataEntityCategoryMapper.xml new file mode 100644 index 0000000..b817ca1 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenDataEntityCategoryMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.code, + tb.name, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM gen_data_entity_category AS tb + + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenDataEntityMapper.xml b/web-starter/src/main/resources/mappers/gen/GenDataEntityMapper.xml new file mode 100644 index 0000000..e0b5e3b --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenDataEntityMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + SELECT o.id, + o.name, + o.category_id, + o.available, + o.description, + o.create_by, + o.create_time, + o.update_by, + o.update_time, + o.gen_status + FROM gen_data_entity AS o + + + + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenDataObjDetailMapper.xml b/web-starter/src/main/resources/mappers/gen/GenDataObjDetailMapper.xml new file mode 100644 index 0000000..9780f92 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenDataObjDetailMapper.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenDataObjMapper.xml b/web-starter/src/main/resources/mappers/gen/GenDataObjMapper.xml new file mode 100644 index 0000000..85a2066 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenDataObjMapper.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + SELECT o.id, + o.name, + o.category_id, + o.main_table_id, + o.main_table_alias, + o.available, + o.description, + o.create_by, + o.create_time, + o.update_by, + o.update_time + FROM gen_data_obj AS o + + + + + + + + \ No newline at end of file diff --git a/web-starter/src/main/resources/mappers/gen/GenDetailColumnConfigMapper.xml b/web-starter/src/main/resources/mappers/gen/GenDetailColumnConfigMapper.xml new file mode 100644 index 0000000..616ad14 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenDetailColumnConfigMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + SELECT + g.id, + g.span, + g.order_no + FROM gen_detail_column_config AS g + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenGenerateInfoMapper.xml b/web-starter/src/main/resources/mappers/gen/GenGenerateInfoMapper.xml new file mode 100644 index 0000000..a817054 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenGenerateInfoMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + SELECT + i.id, + i.template_type, + i.package_name, + i.module_name, + i.biz_name, + i.class_name, + i.class_description, + i.parent_menu_id, + i.key_type, + i.author, + i.menu_code, + i.menu_name, + i.detail_span, + i.is_cache, + i.has_delete + FROM gen_generate_info AS i + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenMapper.xml b/web-starter/src/main/resources/mappers/gen/GenMapper.xml new file mode 100644 index 0000000..fe0bdad --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenMapper.xml @@ -0,0 +1,33 @@ + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenQueryColumnConfigMapper.xml b/web-starter/src/main/resources/mappers/gen/GenQueryColumnConfigMapper.xml new file mode 100644 index 0000000..3afdb44 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenQueryColumnConfigMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + SELECT + g.id, + g.width_type, + g.width, + g.sortable, + g.order_no + FROM gen_query_column_config AS g + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenQueryParamsColumnConfigMapper.xml b/web-starter/src/main/resources/mappers/gen/GenQueryParamsColumnConfigMapper.xml new file mode 100644 index 0000000..a62d3c4 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenQueryParamsColumnConfigMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + SELECT + g.id, + g.query_type, + g.order_no + FROM gen_query_params_column_config AS g + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenSimpleTableColumnMapper.xml b/web-starter/src/main/resources/mappers/gen/GenSimpleTableColumnMapper.xml new file mode 100644 index 0000000..e115343 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenSimpleTableColumnMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenSimpleTableMapper.xml b/web-starter/src/main/resources/mappers/gen/GenSimpleTableMapper.xml new file mode 100644 index 0000000..e46dec8 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenSimpleTableMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + SELECT + id, + table_name, + engine, + table_collation, + table_comment, + convert_type + FROM gen_simple_table + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigMapper.xml b/web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigMapper.xml new file mode 100644 index 0000000..939cfff --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + SELECT + g.id, + g.required, + g.order_no + FROM gen_update_column_config AS g + + + + diff --git a/web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigService.xml b/web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigService.xml new file mode 100644 index 0000000..f726ba8 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/GenUpdateColumnConfigService.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.code, + tb.name, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM gen_data_obj_category AS tb + + + + + + diff --git a/web-starter/src/main/resources/mappers/gen/SimpleDBMapper.xml b/web-starter/src/main/resources/mappers/gen/SimpleDBMapper.xml new file mode 100644 index 0000000..56294c5 --- /dev/null +++ b/web-starter/src/main/resources/mappers/gen/SimpleDBMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysDataDicCategoryMapper.xml b/web-starter/src/main/resources/mappers/system/SysDataDicCategoryMapper.xml new file mode 100644 index 0000000..e3f3de5 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysDataDicCategoryMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.code, + tb.name, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM sys_data_dic_category AS tb + + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysDataDicItemMapper.xml b/web-starter/src/main/resources/mappers/system/SysDataDicItemMapper.xml new file mode 100644 index 0000000..24cb7c0 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysDataDicItemMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.code, + tb.name, + tb.dic_id, + tb.order_no, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM sys_data_dic_item AS tb + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysDataDicMapper.xml b/web-starter/src/main/resources/mappers/system/SysDataDicMapper.xml new file mode 100644 index 0000000..359798d --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysDataDicMapper.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.code, + tb.name, + tb.category_id, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time + FROM sys_data_dic AS tb + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysDeptMapper.xml b/web-starter/src/main/resources/mappers/system/SysDeptMapper.xml new file mode 100644 index 0000000..1c39957 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysDeptMapper.xml @@ -0,0 +1,19 @@ + + + + + + SELECT + * + FROM sys_dept + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysGenerateCodeMapper.xml b/web-starter/src/main/resources/mappers/system/SysGenerateCodeMapper.xml new file mode 100644 index 0000000..9493ad0 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysGenerateCodeMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + SELECT + tb.id, + tb.name, + tb.config_str + FROM sys_generate_code AS tb + + diff --git a/web-starter/src/main/resources/mappers/system/SysMailMessageMapper.xml.xml b/web-starter/src/main/resources/mappers/system/SysMailMessageMapper.xml.xml new file mode 100644 index 0000000..51ebf5a --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysMailMessageMapper.xml.xml @@ -0,0 +1,35 @@ + + + + + + SELECT + tb.* + FROM sys_mail_message tb + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysMenuMapper.xml b/web-starter/src/main/resources/mappers/system/SysMenuMapper.xml new file mode 100644 index 0000000..c442979 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysMenuMapper.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + SELECT id, + name, + path, + icon, + hidden, + display, + component_type, + component, + request_param, + parent_id, + title, + no_cache + FROM sys_menu + + + + SELECT + * + FROM sys_menu + + + + + + + + + + INSERT INTO sys_menu_collect (id, user_id, menu_id) VALUES (#{id}, #{userId}, #{menuId}) + + + DELETE FROM sys_menu_collect WHERE user_id = #{userId} AND menu_id = #{menuId} + + + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysNoticeLogMapper.xml b/web-starter/src/main/resources/mappers/system/SysNoticeLogMapper.xml new file mode 100644 index 0000000..eb4e9bb --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysNoticeLogMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + SELECT + tb.id, + tb.notice_id, + tb.user_id, + tb.readed, + tb.read_time + FROM sys_notice_log AS tb + + diff --git a/web-starter/src/main/resources/mappers/system/SysNoticeMapper.xml b/web-starter/src/main/resources/mappers/system/SysNoticeMapper.xml new file mode 100644 index 0000000..6c414ed --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysNoticeMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT + tb.id, + tb.title, + tb.content, + tb.available, + tb.published, + tb.publish_time, + tb.create_by, + tb.create_time, + tb.update_by, + tb.update_time, + tb.readed_num, + tb.un_read_num + FROM sys_notice AS tb + + + + SELECT + tb.id, + tb.title, + tb.publish_time, + l.readed + FROM sys_notice_log AS l + INNER JOIN sys_notice AS tb ON tb.id = l.notice_id + + + + + UPDATE sys_notice SET readed_num = readed_num + 1, un_read_num = un_read_num - 1 WHERE id = #{id} + + + diff --git a/web-starter/src/main/resources/mappers/system/SysNotifyGroupMapper.xml b/web-starter/src/main/resources/mappers/system/SysNotifyGroupMapper.xml new file mode 100644 index 0000000..25c8065 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysNotifyGroupMapper.xml @@ -0,0 +1,43 @@ + + + + + SELECT + tb.* + FROM sys_notify_group AS tb + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysOpenDomainMapper.xml b/web-starter/src/main/resources/mappers/system/SysOpenDomainMapper.xml new file mode 100644 index 0000000..bcaf04f --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysOpenDomainMapper.xml @@ -0,0 +1,43 @@ + + + + + + SELECT + * + FROM sys_open_domain + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysRoleCategoryMapper.xml b/web-starter/src/main/resources/mappers/system/SysRoleCategoryMapper.xml new file mode 100644 index 0000000..c110e0f --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysRoleCategoryMapper.xml @@ -0,0 +1,29 @@ + + + + + + SELECT + * + FROM sys_role_category AS tb + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysRoleMapper.xml b/web-starter/src/main/resources/mappers/system/SysRoleMapper.xml new file mode 100644 index 0000000..5f3095a --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysRoleMapper.xml @@ -0,0 +1,62 @@ + + + + + + SELECT + * + FROM sys_role + + + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysSiteMessageMapper.xml b/web-starter/src/main/resources/mappers/system/SysSiteMessageMapper.xml new file mode 100644 index 0000000..3b0d046 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysSiteMessageMapper.xml @@ -0,0 +1,56 @@ + + + + + + SELECT + tb.* + FROM sys_site_message tb + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysUserDeptMapper.xml b/web-starter/src/main/resources/mappers/system/SysUserDeptMapper.xml new file mode 100644 index 0000000..45ff596 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysUserDeptMapper.xml @@ -0,0 +1,29 @@ + + + + + + SELECT + ud.* + FROM sys_user_dept AS ud + INNER JOIN sys_dept AS d ON d.id = ud.dept_id + INNER JOIN sys_user AS u ON u.id = ud.user_id + + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysUserGroupMapper.xml b/web-starter/src/main/resources/mappers/system/SysUserGroupMapper.xml new file mode 100644 index 0000000..9e94ef4 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysUserGroupMapper.xml @@ -0,0 +1,49 @@ + + + + + SELECT + tb.* + FROM sys_user_group AS tb + + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysUserMapper.xml b/web-starter/src/main/resources/mappers/system/SysUserMapper.xml new file mode 100644 index 0000000..20773a5 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysUserMapper.xml @@ -0,0 +1,96 @@ + + + + + + SELECT + u.* + FROM sys_user AS u + + + + + + + + UPDATE sys_user + SET password = #{password} + WHERE id = #{userId} + + + + UPDATE sys_user + SET email = #{email} + WHERE id = #{userId} + + + + UPDATE sys_user + SET telephone = #{telephone} + WHERE id = #{userId} + + + UPDATE sys_user + SET lock_status = TRUE + WHERE id = #{id} + + + UPDATE sys_user + SET lock_status = FALSE + WHERE id = #{id} + + + + diff --git a/web-starter/src/main/resources/mappers/system/SysUserRoleMapper.xml b/web-starter/src/main/resources/mappers/system/SysUserRoleMapper.xml new file mode 100644 index 0000000..67e5191 --- /dev/null +++ b/web-starter/src/main/resources/mappers/system/SysUserRoleMapper.xml @@ -0,0 +1,22 @@ + + + + + SELECT + ur.* + FROM sys_user_role AS ur + INNER JOIN sys_role AS r ON r.id = ur.role_id + INNER JOIN sys_user AS u ON u.id = ur.user_id + + + + diff --git a/web-starter/src/main/resources/templates/add.vue.ftl b/web-starter/src/main/resources/templates/add.vue.ftl new file mode 100644 index 0000000..4fe8267 --- /dev/null +++ b/web-starter/src/main/resources/templates/add.vue.ftl @@ -0,0 +1,111 @@ + + diff --git a/web-starter/src/main/resources/templates/api.ts.ftl b/web-starter/src/main/resources/templates/api.ts.ftl new file mode 100644 index 0000000..417c881 --- /dev/null +++ b/web-starter/src/main/resources/templates/api.ts.ftl @@ -0,0 +1,113 @@ +import { defHttp } from '/@/utils/http/axios'; +import { PageResult } from '@/api/model/pageResult'; +import { ContentTypeEnum } from '@/enums/httpEnum'; +<#if query??>import { Query${className}Vo } from '@/api/${moduleName}/${bizName}/model/query${className}Vo'; +<#if query??>import { Query${className}Bo } from '@/api/${moduleName}/${bizName}/model/query${className}Bo'; +<#if detail??>import { ${r"Get"}${className}${r"Bo"} } from '@/api/${moduleName}/${bizName}/model/${r"get"}${className}${r"Bo"}'; +<#if create??>import { Create${className}Vo } from '@/api/${moduleName}/${bizName}/model/create${className}Vo'; +<#if update??>import { Update${className}Vo } from '@/api/${moduleName}/${bizName}/model/update${className}Vo'; + +const baseUrl = '/${moduleName}/${bizName}'; +const region = 'cloud-api'; + +<#if query??> +/** + * 查询列表 + * @param params + * @returns {Promise} + */ +export function query(params: Query${className}Vo): ${r"Promise>"} { + return defHttp.get<${r"PageResult<"}Query${className}${r"Bo>"}>( + { + url: baseUrl + '/query', + params: params, + }, + { + region, + }, + ); +} + + +<#if detail??> +/** + * 根据ID查询 + * @param ${keys[0].name} + * @returns {Promise} + */ +export function get(${keys[0].name}: ${keys[0].dataType}): ${r"Promise"} { + return defHttp.get<${r"Get"}${className}${r"Bo"}>( + { + url: baseUrl, + params: { + ${keys[0].name}, + } + }, + { + region, + }, + ); +} + + +<#if create??> +/** + * 新增 + * @param params + * @returns {Promise} + */ +export function create(params: Create${className}Vo): ${r"Promise"} { + return defHttp.post( + { + url: baseUrl, + data: params, + }, + { + contentType: ContentTypeEnum.FORM_URLENCODED, + region, + }, + ); +} + + +<#if update??> +/** + * 修改 + * @param params + * @returns {Promise} + */ +export function update(params: Update${className}Vo): ${r"Promise"} { + return defHttp.put( + { + url: baseUrl, + data: params, + }, + { + contentType: ContentTypeEnum.FORM_URLENCODED, + region, + }, + ); +} + + +<#if hasDelete> +/** + * 删除 + * @param params + * @returns {Promise} + */ +export function deleteById(${keys[0].name}: ${keys[0].dataType}): ${r"Promise"} { + return defHttp.delete( + { + url: baseUrl, + data: { + ${keys[0].name}, + }, + }, + { + region, + contentType: ContentTypeEnum.FORM_URLENCODED, + }, + ); +} + \ No newline at end of file diff --git a/web-starter/src/main/resources/templates/controller.java.ftl b/web-starter/src/main/resources/templates/controller.java.ftl new file mode 100644 index 0000000..9be2e8c --- /dev/null +++ b/web-starter/src/main/resources/templates/controller.java.ftl @@ -0,0 +1,149 @@ +package ${packageName}.controller.${moduleName}; + +<#if detail??> +import ${packageName}.bo.${moduleName}.${bizName}.Get${className}Bo; + +<#if query??> +import ${packageName}.bo.${moduleName}.${bizName}.Query${className}Bo; + +<#if queryParams??> +import ${packageName}.vo.${moduleName}.${bizName}.Query${className}Vo; + +import ${packageName}.service.${moduleName}.${className}Service; +<#if create??> +import ${packageName}.vo.${moduleName}.${bizName}.Create${className}Vo; + +<#if update??> +import ${packageName}.vo.${moduleName}.${bizName}.Update${className}Vo; + +import ${packageName}.entity.${className}; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +import com.lframework.starter.web.controller.DefaultBaseController; +import org.springframework.beans.factory.annotation.Autowired; +import com.lframework.starter.web.annotations.security.HasPermission; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; +import java.util.stream.Collectors; + +/** + * ${classDescription} Controller + * +<#if author??> + * @author ${author} + + */ +@Api(tags = "${classDescription}") +@Validated +@RestController +@RequestMapping("/${moduleName}/${bizName}") +public class ${className}Controller extends DefaultBaseController { + + @Autowired + private ${className}Service ${classNameProperty}Service; + <#if query?? && queryParams??> + + /** + * 查询列表 + */ + @ApiOperation("查询列表") + @HasPermission({"${moduleName}:${bizName}:query"}) + @GetMapping("/query") + public ${r"InvokeResult>"} query(@Valid Query${className}Vo vo) { + + PageResult${r"<"}${className}${r">"} pageResult = ${classNameProperty}Service.query(getPageIndex(vo), getPageSize(vo), vo); + + List${r"<"}${className}${r">"} datas = pageResult.getDatas(); + List${r"<"}Query${className}Bo${r">"} results = null; + + if (!CollectionUtil.isEmpty(datas)) { + results = datas.stream().map(Query${className}Bo::new).collect(Collectors.toList()); + } + + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); + } + + <#if detail??> + + /** + * 根据ID查询 + */ + @ApiOperation("根据ID查询") + @ApiImplicitParam(value = "${keys[0].name}", name = "${keys[0].name}", paramType = "query", required = true) + @HasPermission({"${moduleName}:${bizName}:query"}) + @GetMapping + public ${r"InvokeResult"} get(<#if keys[0].dataType == 'String'>@NotBlank<#else>@NotNull(message = "${keys[0].name}不能为空!") ${keys[0].dataType} ${keys[0].name}) { + + ${className} data = ${classNameProperty}Service.findById(${keys[0].name}); + if (data == null) { + throw new DefaultClientException("${classDescription}不存在!"); + } + + Get${className}Bo result = new Get${className}Bo(data); + + return InvokeResultBuilder.success(result); + } + + <#if create??> + + /** + * 新增 + */ + @ApiOperation("新增") + @HasPermission({"${moduleName}:${bizName}:add"}) + @PostMapping + public ${r"InvokeResult"} create(@Valid Create${className}Vo vo) { + + ${classNameProperty}Service.create(vo); + + return InvokeResultBuilder.success(); + } + + <#if update??> + + /** + * 修改 + */ + @ApiOperation("修改") + @HasPermission({"${moduleName}:${bizName}:modify"}) + @PutMapping + public ${r"InvokeResult"} update(@Valid Update${className}Vo vo) { + + ${classNameProperty}Service.update(vo); + <#if isCache> + + ${classNameProperty}Service.cleanCacheByKey(vo.get${keys[0].nameProperty}()); + + + return InvokeResultBuilder.success(); + } + + <#if hasDelete> + + /** + * 根据ID删除 + */ + @ApiOperation("根据ID删除") + @ApiImplicitParam(value = "${keys[0].name}", name = "${keys[0].name}", paramType = "query", required = true) + @HasPermission({"${moduleName}:${bizName}:delete"}) + @DeleteMapping + public ${r"InvokeResult"} deleteById(<#if keys[0].dataType == 'String'>@NotBlank<#else>@NotNull(message = "${keys[0].name}不能为空!") ${keys[0].dataType} ${keys[0].name}) { + + ${classNameProperty}Service.deleteById(${keys[0].name}); + <#if isCache> + + ${classNameProperty}Service.cleanCacheByKey(${keys[0].name}); + + + return InvokeResultBuilder.success(); + } + +} diff --git a/web-starter/src/main/resources/templates/createvo.java.ftl b/web-starter/src/main/resources/templates/createvo.java.ftl new file mode 100644 index 0000000..bb4b6f8 --- /dev/null +++ b/web-starter/src/main/resources/templates/createvo.java.ftl @@ -0,0 +1,51 @@ +package ${packageName}.vo.${moduleName}.${bizName}; + +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +import java.io.Serializable; +import lombok.Data; + +@Data +public class Create${className}Vo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + <#list columns as column> + /** + * ${column.description} + */ + <#if column.required> + @ApiModelProperty(value = "${column.description}", required = true) + <#else> + @ApiModelProperty("${column.description}") + + <#if column.required> + @${column.validateAnno}(message = "${column.validateMsg}${column.description}!") + <#if column.fixEnum> + @IsEnum(message = "${column.validateMsg}${column.description}!", enumClass = ${column.dataType}.class) + + + <#if column.regularExpression??> + @Pattern(regexp = "${column.regularExpression?replace("\\", "\\\\")}", message = "${column.description}格式有误!") + + <#if column.dataType != 'String'> + @TypeMismatch(message = "${column.description}格式有误!") + + <#if column.isDecimalType> + <#if (column.decimals??) && column.decimals gt 0> + @IsNumberPrecision(message = "${column.description}最多允许${column.decimals}位小数!", value = ${column.decimals}) + + <#else> + <#if column.dataType == 'String' && (column.viewType == 0 || column.viewType == 1)> + <#if (column.len??) && column.len gt 0> + @Length(message = "${column.description}最多允许${column.len}个字符!") + + + + private <#if column.fixEnum>${column.enumCodeType}<#else>${column.dataType} ${column.name}; + + +} diff --git a/web-starter/src/main/resources/templates/createvo.ts.ftl b/web-starter/src/main/resources/templates/createvo.ts.ftl new file mode 100644 index 0000000..0ce281e --- /dev/null +++ b/web-starter/src/main/resources/templates/createvo.ts.ftl @@ -0,0 +1,10 @@ +export interface Create${className}Vo { + + <#list columns as column> + /** + * ${column.description} + */ + ${column.name}<#if !column.required>?: ${column.frontDataType}; + + +} diff --git a/web-starter/src/main/resources/templates/detail.vue.ftl b/web-starter/src/main/resources/templates/detail.vue.ftl new file mode 100644 index 0000000..2f6dead --- /dev/null +++ b/web-starter/src/main/resources/templates/detail.vue.ftl @@ -0,0 +1,91 @@ + + diff --git a/web-starter/src/main/resources/templates/entity.java.ftl b/web-starter/src/main/resources/templates/entity.java.ftl new file mode 100644 index 0000000..43deaad --- /dev/null +++ b/web-starter/src/main/resources/templates/entity.java.ftl @@ -0,0 +1,49 @@ +package ${packageName}.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +import lombok.Data; + +/** + *

+ * ${classDescription} + *

+ * +<#if author??> + * @author ${author} + + */ +@Data +@TableName("${tableName}") +public class ${className} extends BaseEntity implements BaseDto { + + private static final long serialVersionUID = 1L; + + public static final String CACHE_NAME = "${className}"; + + <#list columns as column> + /** + * ${column.description} + */ + <#if !column.defaultConvertType> + <#if !column.isKey> + @TableField(value = "${column.columnName}"<#if column.fill?? && column.fill>, fill = FieldFill.${column.fillStrategy}) + <#else> + @TableId(value = "${column.columnName}"<#if column.autoIncrKey>, type = IdType.AUTO<#if column.fill?? && column.fill>, fill = FieldFill.${column.fillStrategy}<#if column.autoIncrKey>, type = IdType.AUTO) + + <#else> + <#if !column.isKey && column.fill?? && column.fill> + @TableField(fill = FieldFill.${column.fillStrategy}) + + + <#if column.defaultConvertType && column.isKey && column.autoIncrKey> + @TableId(value = "${column.columnName}", type = IdType.AUTO) + + private ${column.dataType} ${column.name}; + + +} diff --git a/web-starter/src/main/resources/templates/getbo.java.ftl b/web-starter/src/main/resources/templates/getbo.java.ftl new file mode 100644 index 0000000..8a01ec2 --- /dev/null +++ b/web-starter/src/main/resources/templates/getbo.java.ftl @@ -0,0 +1,97 @@ +package ${packageName}.bo.${moduleName}.${bizName}; + +import com.fasterxml.jackson.annotation.JsonFormat; +import ${packageName}.entity.${className}; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + + +import lombok.Data; + +/** + *

+ * ${classDescription} GetBo + *

+ * +<#if author??> + * @author ${author} + + */ +@Data +public class Get${className}Bo extends BaseBo${r"<"}${className}${r">"} { + + /** + * ${keys[0].description} + */ + @ApiModelProperty("${keys[0].description}") + private ${keys[0].dataType} ${keys[0].name}; + + <#list columns as column> + /** + * ${column.description} + */ + @ApiModelProperty("${column.description}") + <#if column.dataType == 'LocalDateTime'> + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + + <#if column.dataType == 'LocalDate'> + @JsonFormat(pattern = StringPool.DATE_PATTERN) + + <#if column.dataType == 'LocalTime'> + @JsonFormat(pattern = StringPool.TIME_PATTERN) + + private <#if column.fixEnum>${column.enumCodeType}<#else>${column.dataType} ${column.name}; + + <#if column.dataDicCode??> + /** + * ${column.description}字典值 + */ + @ApiModelProperty("${column.description}字典值") + private String ${column.name}DicValue; + + + + public Get${className}Bo() { + + } + + public Get${className}Bo(${className} dto) { + + super(dto); + } + + @Override + public BaseBo${r"<"}${className}${r">"} convert(${className} dto) { + <#if hasFixEnum> + return super.convert(dto<#list columns as column><#if column.fixEnum>, Get${className}Bo::get${column.nameProperty}); + <#else> + return super.convert(dto); + + } + + @Override + protected void afterInit(${className} dto) { + + <#list columns as column> + <#if column.dataDicCode??> + ISysDataDicItemService sysDataDicItemService = ApplicationUtil.getBean(ISysDataDicItemService.class); + + <#break> + + + <#list columns as column> + <#if column.fixEnum> + this.${column.name} = dto.get${column.nameProperty}().getCode(); + + <#elseif column.dataDicCode??> + if (!StringUtil.isBlank(dto.get${column.nameProperty}())) { + String[] ${column.name}DicArr = dto.get${column.nameProperty}().split(StringPool.DATA_DIC_SPLIT); + this.${column.name}DicValue = sysDataDicItemService.findByCode(${column.name}DicArr[0], ${column.name}DicArr[1]).getName(); + } + + + + } +} diff --git a/web-starter/src/main/resources/templates/getbo.ts.ftl b/web-starter/src/main/resources/templates/getbo.ts.ftl new file mode 100644 index 0000000..d4908ca --- /dev/null +++ b/web-starter/src/main/resources/templates/getbo.ts.ftl @@ -0,0 +1,29 @@ +/** + * ${classDescription} GetBo + * +<#if author??> + * @author ${author} + + */ +export interface Get${className}Bo { + + /** + * ${keys[0].description} + */ + ${keys[0].name}: ${keys[0].frontDataType}; + + <#list columns as column> + /** + * ${column.description} + */ + ${column.name}: ${column.frontDataType}; + + <#if column.dataDicCode??> + /** + * ${column.description}字典值 + */ + ${column.name}DicValue: string; + + + +} diff --git a/web-starter/src/main/resources/templates/index.vue.ftl b/web-starter/src/main/resources/templates/index.vue.ftl new file mode 100644 index 0000000..f2cca32 --- /dev/null +++ b/web-starter/src/main/resources/templates/index.vue.ftl @@ -0,0 +1,205 @@ + + + + diff --git a/web-starter/src/main/resources/templates/input-components.ftl b/web-starter/src/main/resources/templates/input-components.ftl new file mode 100644 index 0000000..f0f49c0 --- /dev/null +++ b/web-starter/src/main/resources/templates/input-components.ftl @@ -0,0 +1,78 @@ +<#if column.viewType == 0> + max-length="${column.len}" allow-clear /> +<#elseif column.viewType == 1> + max-length="${column.len}" allow-clear /> +<#elseif column.viewType == 2> + +<#elseif column.viewType == 3> + +<#elseif column.viewType == 4> + + +<#elseif column.viewType == 5> +<#if column.fixEnum> + + {{ item.desc }} + +<#else> +<#if column.hasAvailableTag> + + {{ item.desc }} + +<#else> + + + + + + +<#elseif column.viewType == 6> +<#if column.dataType == 'LocalDateTime'> +
+ + + +
+<#else> +
+ + + +
+ +<#elseif column.viewType == 7> + +<#elseif column.viewType == 8> + + diff --git a/web-starter/src/main/resources/templates/mapper.java.ftl b/web-starter/src/main/resources/templates/mapper.java.ftl new file mode 100644 index 0000000..4a0f8d0 --- /dev/null +++ b/web-starter/src/main/resources/templates/mapper.java.ftl @@ -0,0 +1,35 @@ +package ${packageName}.mappers; + +import ${packageName}.entity.${className}; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +<#if queryParams??> +import ${packageName}.vo.${moduleName}.${bizName}.Query${className}Vo; + +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + *

+ * ${classDescription} Mapper 接口 + *

+ * +<#if author??> + * @author ${author} + + */ +public interface ${className}Mapper extends BaseMapper<${className}> { + + <#if queryParams??> + /** + * 查询列表 + * @param vo + * @return + */ + List${r"<"}${className}${r">"} query(@Param("vo") Query${className}Vo vo); + +} diff --git a/web-starter/src/main/resources/templates/mapper.list.xml.ftl b/web-starter/src/main/resources/templates/mapper.list.xml.ftl new file mode 100644 index 0000000..f77ad20 --- /dev/null +++ b/web-starter/src/main/resources/templates/mapper.list.xml.ftl @@ -0,0 +1,49 @@ + + + + + + <#list entity.columns as column> + <#if column.isKey> + + <#else> + + + + + + + SELECT + <#list entity.columns as column> + tb.${column.columnName}<#if column_index != entity.columns?size - 1>, + + FROM ${entity.tableName} AS tb + + + <#if queryParams??> + + + diff --git a/web-starter/src/main/resources/templates/modify.vue.ftl b/web-starter/src/main/resources/templates/modify.vue.ftl new file mode 100644 index 0000000..3bf5a73 --- /dev/null +++ b/web-starter/src/main/resources/templates/modify.vue.ftl @@ -0,0 +1,128 @@ + + diff --git a/web-starter/src/main/resources/templates/query-type-sql.ftl b/web-starter/src/main/resources/templates/query-type-sql.ftl new file mode 100644 index 0000000..855edb9 --- /dev/null +++ b/web-starter/src/main/resources/templates/query-type-sql.ftl @@ -0,0 +1,27 @@ +<#if column.queryType == 0> +AND tb.${column.columnName} = ${r"#{vo."}${column.name}${r"}"} +<#elseif column.queryType == 1> +AND tb.${column.columnName} > ${r"#{vo."}${column.name}${r"}"} +<#elseif column.queryType == 2> +AND tb.${column.columnName} >= ${r"#{vo."}${column.name}${r"}"} +<#elseif column.queryType == 3> + +<#elseif column.queryType == 4> + +<#elseif column.queryType == 5> +AND tb.${column.columnName} != ${r"#{vo."}${column.name}${r"}"} +<#elseif column.queryType == 6> +AND tb.${column.columnName} IN (${r"#{vo."}${column.name}${r"}"}) +<#elseif column.queryType == 7> +AND tb.${column.columnName} NOT IN (${r"#{vo."}${column.name}${r"}"}) +<#elseif column.queryType == 8> +AND tb.${column.columnName} LIKE CONCAT('%', ${r"#{vo."}${column.name}${r"}"}) +<#elseif column.queryType == 9> +AND tb.${column.columnName} LIKE CONCAT(${r"#{vo."}${column.name}${r"}"}, '%') +<#elseif column.queryType == 10> +AND tb.${column.columnName} LIKE CONCAT('%', ${r"#{vo."}${column.name}${r"}"}, '%') + \ No newline at end of file diff --git a/web-starter/src/main/resources/templates/querybo.java.ftl b/web-starter/src/main/resources/templates/querybo.java.ftl new file mode 100644 index 0000000..2284bf8 --- /dev/null +++ b/web-starter/src/main/resources/templates/querybo.java.ftl @@ -0,0 +1,89 @@ +package ${packageName}.bo.${moduleName}.${bizName}; + +import com.fasterxml.jackson.annotation.JsonFormat; +import ${packageName}.entity.${className}; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + + +import lombok.Data; + +/** + *

+ * ${classDescription} QueryBo + *

+ * +<#if author??> + * @author ${author} + + */ +@Data +public class Query${className}Bo extends BaseBo${r"<"}${className}${r">"} { + + /** + * ${keys[0].description} + */ + @ApiModelProperty("${keys[0].description}") + private ${keys[0].dataType} ${keys[0].name}; + +<#list columns as column> + /** + * ${column.description} + */ + @ApiModelProperty("${column.description}") + <#if column.dataType == 'LocalDateTime'> + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN) + + <#if column.dataType == 'LocalDate'> + @JsonFormat(pattern = StringPool.DATE_PATTERN) + + <#if column.dataType == 'LocalTime'> + @JsonFormat(pattern = StringPool.TIME_PATTERN) + + private <#if column.fixEnum>${column.enumCodeType}<#else>${column.dataType} ${column.name}; + + + public Query${className}Bo() { + + } + + public Query${className}Bo(${className} dto) { + + super(dto); + } + + @Override + public BaseBo${r"<"}${className}${r">"} convert(${className} dto) { + <#if hasFixEnum> + return super.convert(dto<#list columns as column><#if column.fixEnum>, Query${className}Bo::get${column.nameProperty}); + <#else> + return super.convert(dto); + + } + + @Override + protected void afterInit(${className} dto) { + + <#list columns as column> + <#if column.dataDicCode??> + ISysDataDicItemService sysDataDicItemService = ApplicationUtil.getBean(ISysDataDicItemService.class); + + <#break> + + + <#list columns as column> + <#if column.fixEnum> + this.${column.name} = dto.get${column.nameProperty}().getCode(); + + <#elseif column.dataDicCode??> + if (!StringUtil.isBlank(dto.get${column.nameProperty}())) { + String[] ${column.name}DicArr = dto.get${column.nameProperty}().split(StringPool.DATA_DIC_SPLIT); + this.${column.name} = sysDataDicItemService.findByCode(${column.name}DicArr[0], ${column.name}DicArr[1]).getName(); + } + + + + } +} diff --git a/web-starter/src/main/resources/templates/querybo.ts.ftl b/web-starter/src/main/resources/templates/querybo.ts.ftl new file mode 100644 index 0000000..6d2c4f6 --- /dev/null +++ b/web-starter/src/main/resources/templates/querybo.ts.ftl @@ -0,0 +1,22 @@ +/** + * ${classDescription} QueryBo + * +<#if author??> + * @author ${author} + + */ +export interface Query${className}Bo { + + /** + * ${keys[0].description} + */ + ${keys[0].name}: ${keys[0].frontDataType}; + +<#list columns as column> + /** + * ${column.description} + */ + ${column.name}: ${column.frontDataType}; + + +} diff --git a/web-starter/src/main/resources/templates/queryvo.java.ftl b/web-starter/src/main/resources/templates/queryvo.java.ftl new file mode 100644 index 0000000..64374a5 --- /dev/null +++ b/web-starter/src/main/resources/templates/queryvo.java.ftl @@ -0,0 +1,57 @@ +package ${packageName}.vo.${moduleName}.${bizName}; + +import lombok.Data; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +import java.io.Serializable; + +@Data +public class Query${className}Vo extends PageVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + <#list columns as column> + <#if column.viewType != 6> + /** + * ${column.description} + */ + @ApiModelProperty("${column.description}") + + <#if column.fixEnum> + <#if column.dataType != 'String'> + @TypeMismatch(message = "${column.description}格式有误!") + + @IsEnum(message = "${column.description}格式有误!", enumClass = ${column.dataType}.class) + private ${column.enumCodeType} ${column.name}; + <#else> + <#if column.viewType == 6> + /** + * ${column.description} 起始时间 + */ + @ApiModelProperty("${column.description} 起始时间") + <#if column.dataType != 'String'> + @TypeMismatch(message = "${column.description}起始时间格式有误!") + + private ${column.dataType} ${column.name}Start; + + /** + * ${column.description} 截止时间 + */ + @ApiModelProperty("${column.description} 截止时间") + <#if column.dataType != 'String'> + @TypeMismatch(message = "${column.description}截止时间格式有误!") + + private ${column.dataType} ${column.name}End; + <#else> + <#if column.dataType != 'String'> + @TypeMismatch(message = "${column.description}格式有误!") + + private ${column.dataType} ${column.name}; + + + + +} diff --git a/web-starter/src/main/resources/templates/queryvo.ts.ftl b/web-starter/src/main/resources/templates/queryvo.ts.ftl new file mode 100644 index 0000000..c229363 --- /dev/null +++ b/web-starter/src/main/resources/templates/queryvo.ts.ftl @@ -0,0 +1,25 @@ +import { PageVo } from '@/api/model/pageVo'; + +export interface Query${className}Vo extends PageVo { + + <#list columns as column> + <#if column.viewType != 6> + /** + * ${column.description} + */ + ${column.name}: ${column.frontDataType}; + + <#if column.viewType == 6> + /** + * ${column.description} 起始时间 + */ + ${column.name}Start: ${column.frontDataType}; + + /** + * ${column.description} 截止时间 + */ + ${column.name}End: ${column.frontDataType}; + + + +} diff --git a/web-starter/src/main/resources/templates/service.java.ftl b/web-starter/src/main/resources/templates/service.java.ftl new file mode 100644 index 0000000..6262ed1 --- /dev/null +++ b/web-starter/src/main/resources/templates/service.java.ftl @@ -0,0 +1,79 @@ +package ${packageName}.service.${moduleName}; + +<#if create??> +import ${packageName}.vo.${moduleName}.${bizName}.Create${className}Vo; + +<#if queryParams??> +import ${packageName}.vo.${moduleName}.${bizName}.Query${className}Vo; + +<#if update??> +import ${packageName}.vo.${moduleName}.${bizName}.Update${className}Vo; + +import ${packageName}.entity.${className}; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +import java.util.Collection; +import java.util.List; + +/** + * ${classDescription} Service +<#if author??> + * + * @author ${author} + + */ +public interface ${className}Service extends BaseMpService${r"<"}${className}${r">"} { + + <#if queryParams??> + /** + * 查询列表 + * @return + */ + PageResult${r"<"}${className}${r">"} query(Integer pageIndex, Integer pageSize, Query${className}Vo vo); + + + <#if queryParams??> + /** + * 查询列表 + * @param vo + * @return + */ + ${r"List<"}${className}${r">"} query(Query${className}Vo vo); + + + /** + * 根据ID查询 + * @param ${keys[0].name} + * @return + */ + ${className} findById(<#list keys as key>${key.dataType} ${key.name}<#if key_index != keys?size - 1>, ); + + <#if create??> + /** + * 创建 + * @param vo + * @return + */ + ${create.keys[0].dataType} create(Create${className}Vo vo); + + + <#if update??> + /** + * 修改 + * @param vo + */ + void update(Update${className}Vo vo); + + + <#if hasDelete> + /** + * 根据ID删除 + * @param ${keys[0].name} + * @return + */ + void deleteById(<#list keys as key>${key.dataType} ${key.name}<#if key_index != keys?size - 1>, ); + +} diff --git a/web-starter/src/main/resources/templates/serviceimpl.java.ftl b/web-starter/src/main/resources/templates/serviceimpl.java.ftl new file mode 100644 index 0000000..1c8e0af --- /dev/null +++ b/web-starter/src/main/resources/templates/serviceimpl.java.ftl @@ -0,0 +1,167 @@ +package ${packageName}.impl.${moduleName}; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageInfo; +import ${packageName}.entity.${className}; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +import ${packageName}.mappers.${className}Mapper; +import ${packageName}.service.${moduleName}.${className}Service; +<#if create??> +import ${packageName}.vo.${moduleName}.${bizName}.Create${className}Vo; + +<#if queryParams??> +import ${packageName}.vo.${moduleName}.${bizName}.Query${className}Vo; + +<#if update??> +import ${packageName}.vo.${moduleName}.${bizName}.Update${className}Vo; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +@Service +public class ${className}ServiceImpl extends BaseMpServiceImpl${r"<"}${className}Mapper, ${className}${r">"} implements ${className}Service { +<#if queryParams??> + + @Override + public PageResult${r"<"}${className}${r">"} query(Integer pageIndex, Integer pageSize, Query${className}Vo vo) { + + Assert.greaterThanZero(pageIndex); + Assert.greaterThanZero(pageSize); + + PageHelperUtil.startPage(pageIndex, pageSize); + List${r"<"}${className}${r">"} datas = this.query(vo); + + return PageResultUtil.convert(new PageInfo<>(datas)); + } + +<#if queryParams??> + + @Override + public List${r"<"}${className}${r">"} query(Query${className}Vo vo) { + + return getBaseMapper().query(vo); + } + + +<#if isCache> + @Cacheable(value = ${className}.CACHE_NAME, key = "@cacheVariables.tenantId() + #${keys[0].name}", unless = "#result == null") + + @Override + public ${className} findById(<#list keys as key>${key.dataType} ${key.name}<#if key_index != keys?size - 1>, ) { + + return getBaseMapper().selectById(${keys[0].name}); + } +<#if create??> + + @OpLog(type = OtherOpLogType.class, name = "新增${classDescription},ID:{}", params = ${r'{"#'}${create.keys[0].name}${r'"}'}) + @Transactional(rollbackFor = Exception.class) + @Override + public ${create.keys[0].dataType} create(Create${className}Vo vo) { + + ${className} data = new ${className}(); + <#if create.appointId> + data.set${create.keys[0].nameProperty}(${create.idCode}); + + <#list create.columns as column> + <#if column.required> + <#if column.fixEnum> + data.set${column.nameProperty}(EnumUtil.getByCode(${column.dataType}.class, vo.get${column.nameProperty}())); + <#else> + data.set${column.nameProperty}(vo.get${column.nameProperty}()); + + <#else> + <#if column.dataType == 'String'> + if (!StringUtil.isBlank(vo.get${column.nameProperty}())) { + data.set${column.nameProperty}(vo.get${column.nameProperty}()); + } + <#else> + if (vo.get${column.nameProperty}() != null) { + <#if column.fixEnum> + data.set${column.nameProperty}(EnumUtil.getByCode(${column.dataType}.class, vo.get${column.nameProperty}())); + <#else> + data.set${column.nameProperty}(vo.get${column.nameProperty}()); + + } + + + + + getBaseMapper().insert(data); + + OpLogUtil.setVariable("${create.keys[0].name}", <#if create.keys[0].dataType == 'String'>data.get${create.keys[0].nameProperty}()<#else>String.valueOf(data.get${create.keys[0].nameProperty}())); + OpLogUtil.setExtra(vo); + + return data.get${create.keys[0].nameProperty}(); + } + +<#if update??> + + @OpLog(type = OtherOpLogType.class, name = "修改${classDescription},ID:{}", params = ${r'{"#'}${update.keys[0].name}${r'"}'}) + @Transactional(rollbackFor = Exception.class) + @Override + public void update(Update${className}Vo vo) { + + ${className} data = getBaseMapper().selectById(vo.get${update.keys[0].nameProperty}()); + if (ObjectUtil.isNull(data)) { + throw new DefaultClientException("${classDescription}不存在!"); + } + + LambdaUpdateWrapper${r"<"}${className}${r">"} updateWrapper = Wrappers.lambdaUpdate(${className}.class) + <#list update.columns as column> + <#if column.required> + <#if column.fixEnum> + .set(${className}::get${column.nameProperty}, EnumUtil.getByCode(${column.dataType}.class, vo.get${column.nameProperty}())) + <#else> + .set(${className}::get${column.nameProperty}, vo.get${column.nameProperty}()) + + <#else> + <#if column.dataType == 'String'> + .set(${className}::get${column.nameProperty}, StringUtil.isBlank(vo.get${column.nameProperty}()) ? null : vo.get${column.nameProperty}()) + <#else> + <#if column.fixEnum> + .set(${className}::get${column.nameProperty}, vo.get${column.nameProperty}() == null ? null : EnumUtil.getByCode(${column.dataType}.class, vo.get${column.nameProperty}())) + <#else> + .set(${className}::get${column.nameProperty}, vo.get${column.nameProperty}() == null ? null : vo.get${column.nameProperty}()) + + + + + .eq(${className}::get${update.keys[0].nameProperty}, vo.get${update.keys[0].nameProperty}()); + + getBaseMapper().update(updateWrapper); + + OpLogUtil.setVariable("${update.keys[0].name}", <#if update.keys[0].dataType == 'String'>data.get${update.keys[0].nameProperty}()<#else>String.valueOf(data.get${update.keys[0].nameProperty}())); + OpLogUtil.setExtra(vo); + } + + <#if hasDelete> + + @OpLog(type = OtherOpLogType.class, name = "删除${classDescription},ID:{}", params = ${r'{"#'}${keys[0].name}${r'"}'}) + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(<#list keys as key>${key.dataType} ${key.name}<#if key_index != keys?size - 1>, ) { + + getBaseMapper().deleteById(<#list keys as key>${key.name}<#if key_index != keys?size - 1>, ); + } + + + <#if isCache> + @CacheEvict(value = ${className}.CACHE_NAME, key = "@cacheVariables.tenantId() + #key") + + @Override + public void cleanCacheByKey(Serializable key) { + + } +} diff --git a/web-starter/src/main/resources/templates/sql.ftl b/web-starter/src/main/resources/templates/sql.ftl new file mode 100644 index 0000000..789c320 --- /dev/null +++ b/web-starter/src/main/resources/templates/sql.ftl @@ -0,0 +1,9 @@ +-- 功能菜单SQL +INSERT INTO `sys_menu` (`id`, `code`, `name`, `title`, `component`, `parent_id`, `path`, `no_cache`, `display`, `hidden`, `permission`, `is_special`, `available`, `description`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('${menuId}', '${menuCode}', '${className}', '${menuName}', '/${moduleName}/${bizName}/index', <#if parentMenuId??>'${parentMenuId}'<#else>NULL, '/${moduleName}/${bizName}', 0, 1, 0, '${moduleName}:${bizName}:query', 0, 1, '', '1', NOW(), '1', NOW()); +-- 权限SQL +<#if create??> +INSERT INTO `sys_menu` (`id`, `code`, `name`, `title`, `component`, `parent_id`, `path`, `no_cache`, `display`, `hidden`, `permission`, `is_special`, `available`, `description`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('${IdUtil.getId()}', '${menuCode}001', '', '新增${classDescription}', '', '${menuId}', '', 0, 2, 0, '${moduleName}:${bizName}:add', 0, 1, '', '1', NOW(), '1', NOW()); + +<#if update??> +INSERT INTO `sys_menu` (`id`, `code`, `name`, `title`, `component`, `parent_id`, `path`, `no_cache`, `display`, `hidden`, `permission`, `is_special`, `available`, `description`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('${IdUtil.getId()}', '${menuCode}002', '', '修改${classDescription}', '', '${menuId}', '', 0, 2, 0, '${moduleName}:${bizName}:modify', 0, 1, '', '1', NOW(), '1', NOW()); + \ No newline at end of file diff --git a/web-starter/src/main/resources/templates/updatevo.java.ftl b/web-starter/src/main/resources/templates/updatevo.java.ftl new file mode 100644 index 0000000..7e63292 --- /dev/null +++ b/web-starter/src/main/resources/templates/updatevo.java.ftl @@ -0,0 +1,62 @@ +package ${packageName}.vo.${moduleName}.${bizName}; + +import lombok.Data; +<#if importPackages??> + <#list importPackages as p> +import ${p}; + + +import java.io.Serializable; + +@Data +public class Update${className}Vo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ${keys[0].description} + */ + @ApiModelProperty(value = "${keys[0].description}", required = true) +<#if keys[0].dataType == 'String'> + @NotBlank(message = "${keys[0].name}不能为空!") +<#else> + @NotNull(message = "${keys[0].name}不能为空!") + + private ${keys[0].dataType} ${keys[0].name}; + +<#list columns as column> + /** + * ${column.description} + */ + <#if column.required> + @ApiModelProperty(value = "${column.description}", required = true) + <#else> + @ApiModelProperty("${column.description}") + + <#if column.dataType != 'String'> + @TypeMismatch(message = "${column.description}格式有误!") + + <#if column.required> + @${column.validateAnno}(message = "${column.validateMsg}${column.description}!") + <#if column.fixEnum> + @IsEnum(message = "${column.validateMsg}${column.description}!", enumClass = ${column.dataType}.class) + + + <#if column.regularExpression??> + @Pattern(regexp = "${column.regularExpression?replace("\\", "\\\\")}", message = "${column.description}格式有误!") + + <#if column.isDecimalType> + <#if (column.decimals??) && column.decimals gt 0> + @IsNumberPrecision(message = "${column.description}最多允许${column.decimals}位小数!", value = ${column.decimals}) + + <#else> + <#if column.dataType == 'String' && (column.viewType == 0 || column.viewType == 1)> + <#if (column.len??) && column.len gt 0> + @Length(message = "${column.description}最多允许${column.len}个字符!") + + + + private <#if column.fixEnum>${column.enumCodeType}<#else>${column.dataType} ${column.name}; + + +} diff --git a/web-starter/src/main/resources/templates/updatevo.ts.ftl b/web-starter/src/main/resources/templates/updatevo.ts.ftl new file mode 100644 index 0000000..747d111 --- /dev/null +++ b/web-starter/src/main/resources/templates/updatevo.ts.ftl @@ -0,0 +1,17 @@ + +export interface Update${className}Vo { + + /** + * ${keys[0].description} + */ + ${keys[0].name}: ${keys[0].frontDataType}; + +<#list columns as column> + /** + * ${column.description} + */ + + ${column.name}<#if !column.required>?: ${column.frontDataType}; + + +} diff --git a/websocket-starter/pom.xml b/websocket-starter/pom.xml deleted file mode 100644 index e54a8d3..0000000 --- a/websocket-starter/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - - parent - com.lframework - 3.1.8 - - - websocket-starter - 【${project.artifactId}】集成WebSocket能力 - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - com.lframework - web-starter - - - org.springframework.boot - spring-boot-starter-websocket - - - \ No newline at end of file -- Gitee From 0a121703ab077afde99128119d5135b75bd1b6ea Mon Sep 17 00:00:00 2001 From: lframework Date: Thu, 3 Jul 2025 13:36:21 +0800 Subject: [PATCH 14/18] =?UTF-8?q?fix=20=E9=83=A8=E5=88=86Bean=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bpm-starter/pom.xml | 2 +- cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/activemq-starter/pom.xml | 2 +- mq-starter/mq-core/pom.xml | 2 +- mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- pom.xml | 18 ++---------------- web-starter/pom.xml | 2 +- .../config/MagicCustomAutoConfiguration.java | 11 +++++++++++ .../web/config/WebAutoConfiguration.java | 2 +- .../web/config/WebBeanAutoConfiguration.java | 14 ++++++++++++-- .../sign/DefaultCheckSignHandler.java | 17 ----------------- .../sign/handler/DefaultCheckSignHandler.java | 1 - .../web/gen/builders/CustomListBuilder.java | 1 - .../web/gen/builders/CustomPageBuilder.java | 1 - .../gen/builders/CustomSelectorBuilder.java | 1 - .../web/gen/builders/DataEntityBuilder.java | 1 - .../web/gen/builders/DataObjectBuilder.java | 1 - .../converters/GenMysqlDataTypeConverter.java | 1 - .../gen/converters/GenViewTypeConverter.java | 1 - .../inner/enums/system/SysDeptNodeType.java | 1 - 22 files changed, 34 insertions(+), 53 deletions(-) delete mode 100644 web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignHandler.java diff --git a/bpm-starter/pom.xml b/bpm-starter/pom.xml index eddaf95..b741735 100644 --- a/bpm-starter/pom.xml +++ b/bpm-starter/pom.xml @@ -6,7 +6,7 @@ com.lframework parent - 4.0.0 + 4.0.1 bpm-starter diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index feaa09f..056f896 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.0 + 4.0.1 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 96136df..84ff61b 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.0 + 4.0.1 4.0.0 diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index 9c0c1f4..6bc2e56 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 4.0.0 + 4.0.1 activemq-starter diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index 3219cc5..e8e2373 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.0 + 4.0.1 mq-core diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index e7dedf2..a6ffde4 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.0 + 4.0.1 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index 966a25d..233f2da 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.0 + 4.0.1 rabbitmq-starter diff --git a/pom.xml b/pom.xml index 8f422ba..7f986cf 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 4.0.0 + 4.0.1 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 4.0.0 + 4.0.1 1.18.10 1.7.21 1.1.7 @@ -40,8 +40,6 @@ 1.6.2 2.0.9 1.29.0 - 2.8.4-release - 2.8.0-release 2.2.0.RELEASE 1.4.4 1.5.2 @@ -288,18 +286,6 @@ ${sa-token.version} - - net.oschina.j2cache - j2cache-core - ${j2cache.version} - - - - net.oschina.j2cache - j2cache-springcache - ${j2cache-spring.version} - - spring-cloud-starter-alibaba-nacos-discovery diff --git a/web-starter/pom.xml b/web-starter/pom.xml index 342fefb..d2460c7 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.0 + 4.0.1 4.0.0 diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java index d4caaf7..ece53fc 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/MagicCustomAutoConfiguration.java @@ -7,6 +7,10 @@ import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSour import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.lframework.starter.web.config.properties.SecretProperties; +import com.lframework.starter.web.gen.components.magic.MagicCustomAuthorizationInterceptor; +import com.lframework.starter.web.gen.components.magic.MagicCustomJsonValueProvider; +import com.lframework.starter.web.gen.components.magic.MagicCustomMagicFunction; +import com.lframework.starter.web.gen.components.magic.MagicCustomSqlCache; import com.lframework.starter.web.inner.entity.Tenant; import com.lframework.starter.web.inner.service.TenantService; import com.lframework.starter.web.core.utils.DataSourceUtil; @@ -17,11 +21,18 @@ import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.ssssssss.magicapi.datasource.model.MagicDynamicDataSource; @Configuration +@Import({ + MagicCustomAuthorizationInterceptor.class, + MagicCustomJsonValueProvider.class, + MagicCustomMagicFunction.class, + MagicCustomSqlCache.class +}) public class MagicCustomAutoConfiguration { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java index 19a945e..cf064b9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebAutoConfiguration.java @@ -30,7 +30,7 @@ import com.lframework.starter.web.config.properties.DefaultSettingProperties; import com.lframework.starter.web.config.properties.SecretProperties; import com.lframework.starter.web.config.properties.WebProperties; import com.lframework.starter.web.core.components.sign.CheckSignHandler; -import com.lframework.starter.web.core.components.sign.DefaultCheckSignHandler; +import com.lframework.starter.web.core.components.sign.handler.DefaultCheckSignHandler; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java index 8562db6..2afa754 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java @@ -17,6 +17,7 @@ import com.lframework.starter.web.core.components.resp.ResponseErrorBuilder; import com.lframework.starter.web.core.components.security.UserTokenResolverImpl; import com.lframework.starter.web.core.components.sign.CheckSignFactory; import com.lframework.starter.web.core.components.sign.DefaultCheckSignFactory; +import com.lframework.starter.web.core.components.sign.handler.DefaultCheckSignHandler; import com.lframework.starter.web.core.components.upload.handler.SecurityUploadHandler; import com.lframework.starter.web.core.components.upload.handler.UploadHandler; import com.lframework.starter.web.core.components.upload.handler.impl.CosSecurityUploadHandler; @@ -67,6 +68,7 @@ import com.lframework.starter.web.inner.controller.system.SysUserController; import com.lframework.starter.web.inner.controller.system.SysUserGroupController; import com.lframework.starter.web.inner.controller.system.SysUserRoleController; import com.lframework.starter.web.inner.controller.system.TenantController; +import com.lframework.starter.web.inner.enums.system.SysDeptNodeType; import com.lframework.starter.web.inner.handlers.exception.AccessDeniedExceptionConverter; import com.lframework.starter.web.inner.handlers.exception.BindExceptionConverter; import com.lframework.starter.web.inner.handlers.exception.ClientExceptionConverter; @@ -174,6 +176,7 @@ import org.springframework.core.env.Environment; SysMenuServiceImpl.class, SysNoticeLogServiceImpl.class, SysNoticeServiceImpl.class, + SysNoticeServiceImpl.ReloadNoticeListener.class, SysNotifyGroupReceiverServiceImpl.class, SysNotifyGroupServiceImpl.class, SysOpenDomainServiceImpl.class, @@ -182,6 +185,7 @@ import org.springframework.core.env.Environment; SysRoleMenuServiceImpl.class, SysRoleServiceImpl.class, SysSiteMessageServiceImpl.class, + SysSiteMessageServiceImpl.ReloadSiteMessageListener.class, SysUserDeptServiceImpl.class, SysUserGroupDetailServiceImpl.class, SysUserGroupServiceImpl.class, @@ -192,7 +196,8 @@ import org.springframework.core.env.Environment; SysModuleServiceImpl.class, SysModuleTenantServiceImpl.class, TenantServiceImpl.class, - DefaultUserDetailsService.class + DefaultUserDetailsService.class, + DefaultCheckSignHandler.class }) @MapperScan("com.lframework.starter.web.**.mappers") public class WebBeanAutoConfiguration implements EnvironmentAware { @@ -440,7 +445,7 @@ public class WebBeanAutoConfiguration implements EnvironmentAware { } @Bean - public OtherOpLogType otherOpLogType() { + public OtherOpLogType otherOpLogType() { return new OtherOpLogType(); } @@ -448,4 +453,9 @@ public class WebBeanAutoConfiguration implements EnvironmentAware { public void setEnvironment(Environment environment) { log.info("web-starter加载完成"); } + + @Bean + public SysDeptNodeType sysDeptNodeType() { + return new SysDeptNodeType(); + } } diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignHandler.java deleted file mode 100644 index 6e96e72..0000000 --- a/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/DefaultCheckSignHandler.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.lframework.starter.web.core.components.sign; - -import com.lframework.starter.web.inner.vo.openapi.OpenApiReqVo; - -public class DefaultCheckSignHandler implements CheckSignHandler { - - @Override - public boolean check(OpenApiReqVo req) { - - return false; - } - - @Override - public void setTenantId(OpenApiReqVo req) { - - } -} diff --git a/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java index ae6a53c..f9605a5 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java +++ b/web-starter/src/main/java/com/lframework/starter/web/core/components/sign/handler/DefaultCheckSignHandler.java @@ -14,7 +14,6 @@ import com.lframework.starter.web.inner.vo.openapi.OpenApiReqVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -@Component public class DefaultCheckSignHandler implements CheckSignHandler { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java index 42de3db..dfa6c4f 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomListBuilder.java @@ -49,7 +49,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; -@Component public class CustomListBuilder { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java index 5f4604d..257fa89 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomPageBuilder.java @@ -9,7 +9,6 @@ import com.lframework.starter.web.core.utils.JsonUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -@Component public class CustomPageBuilder { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java index a7502d7..de41c29 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/CustomSelectorBuilder.java @@ -14,7 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; -@Component public class CustomSelectorBuilder { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java index 77895c8..83f1f07 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataEntityBuilder.java @@ -21,7 +21,6 @@ import org.springframework.stereotype.Component; /** * 数据实体Builder */ -@Component public class DataEntityBuilder { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java index 0891e6d..87b3c87 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/builders/DataObjectBuilder.java @@ -24,7 +24,6 @@ import org.springframework.stereotype.Component; /** * 数据对象Builder */ -@Component public class DataObjectBuilder { @Autowired diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java index 2cc3bf1..670b10a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenMysqlDataTypeConverter.java @@ -4,7 +4,6 @@ import com.lframework.starter.web.gen.enums.GenDataType; import com.lframework.starter.web.gen.enums.GenMySqlDataType; import org.springframework.stereotype.Component; -@Component public class GenMysqlDataTypeConverter { public GenMySqlDataType convert(GenDataType dataType) { diff --git a/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java index b9568da..1aa1d17 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java +++ b/web-starter/src/main/java/com/lframework/starter/web/gen/converters/GenViewTypeConverter.java @@ -11,7 +11,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @Slf4j -@Component public class GenViewTypeConverter { public boolean canConvert(GenViewType viewType, GenDataType dataType) { diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java index 3be544e..7e565c8 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/enums/system/SysDeptNodeType.java @@ -3,7 +3,6 @@ package com.lframework.starter.web.inner.enums.system; import java.io.Serializable; import org.springframework.stereotype.Component; -@Component public final class SysDeptNodeType implements NodeType, Serializable { private static final long serialVersionUID = 1L; -- Gitee From c5399a2593993cb2084141ea46190fd9d2c07f45 Mon Sep 17 00:00:00 2001 From: lframework Date: Thu, 3 Jul 2025 15:00:31 +0800 Subject: [PATCH 15/18] =?UTF-8?q?fix=20=E9=83=A8=E5=88=86Bean=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bpm-starter/pom.xml | 2 +- cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/activemq-starter/pom.xml | 2 +- mq-starter/mq-core/pom.xml | 2 +- mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- pom.xml | 4 ++-- web-starter/pom.xml | 2 +- .../starter/web/config/WebBeanAutoConfiguration.java | 3 +-- 10 files changed, 11 insertions(+), 12 deletions(-) diff --git a/bpm-starter/pom.xml b/bpm-starter/pom.xml index b741735..3547068 100644 --- a/bpm-starter/pom.xml +++ b/bpm-starter/pom.xml @@ -6,7 +6,7 @@ com.lframework parent - 4.0.1 + 4.0.2 bpm-starter diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index 056f896..d99678f 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.1 + 4.0.2 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 84ff61b..cd964d5 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.1 + 4.0.2 4.0.0 diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index 6bc2e56..1b72d36 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 4.0.1 + 4.0.2 activemq-starter diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index e8e2373..0b0fcd9 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.1 + 4.0.2 mq-core diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index a6ffde4..db42a6d 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.1 + 4.0.2 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index 233f2da..84c52b3 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.1 + 4.0.2 rabbitmq-starter diff --git a/pom.xml b/pom.xml index 7f986cf..9ce1e55 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 4.0.1 + 4.0.2 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 4.0.1 + 4.0.2 1.18.10 1.7.21 1.1.7 diff --git a/web-starter/pom.xml b/web-starter/pom.xml index d2460c7..b9c5d5b 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.1 + 4.0.2 4.0.0 diff --git a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java index 2afa754..872d4c3 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java +++ b/web-starter/src/main/java/com/lframework/starter/web/config/WebBeanAutoConfiguration.java @@ -196,8 +196,7 @@ import org.springframework.core.env.Environment; SysModuleServiceImpl.class, SysModuleTenantServiceImpl.class, TenantServiceImpl.class, - DefaultUserDetailsService.class, - DefaultCheckSignHandler.class + DefaultUserDetailsService.class }) @MapperScan("com.lframework.starter.web.**.mappers") public class WebBeanAutoConfiguration implements EnvironmentAware { -- Gitee From 76f503cd5bc5d14fb657726ccb37b55ab9240ca5 Mon Sep 17 00:00:00 2001 From: lframework Date: Tue, 8 Jul 2025 06:23:28 +0800 Subject: [PATCH 16/18] =?UTF-8?q?fix=20=E6=B5=81=E7=A8=8B=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E4=B8=A2=E5=A4=B1=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bpm-starter/pom.xml | 2 +- .../lframework/starter/bpm/entity/FlowDefinitionWrapper.java | 4 ++++ cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/activemq-starter/pom.xml | 2 +- mq-starter/mq-core/pom.xml | 2 +- mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- pom.xml | 4 ++-- web-starter/pom.xml | 2 +- 10 files changed, 14 insertions(+), 10 deletions(-) diff --git a/bpm-starter/pom.xml b/bpm-starter/pom.xml index 3547068..7dc1dc0 100644 --- a/bpm-starter/pom.xml +++ b/bpm-starter/pom.xml @@ -6,7 +6,7 @@ com.lframework parent - 4.0.2 + 4.0.3 bpm-starter diff --git a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java index 4ca7d3c..49cf273 100644 --- a/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java +++ b/bpm-starter/src/main/java/com/lframework/starter/bpm/entity/FlowDefinitionWrapper.java @@ -3,6 +3,7 @@ package com.lframework.starter.bpm.entity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.lframework.starter.bpm.enums.FlowDefinitionActivityStatus; import com.lframework.starter.bpm.enums.FlowDefinitionIsPublish; @@ -36,6 +37,9 @@ public class FlowDefinitionWrapper extends BaseEntity implements BaseDto, Serial @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; + @TableLogic(value = "0", delval = "1") + private String delFlag; + /** * 租户ID */ diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index d99678f..26db4ed 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.2 + 4.0.3 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index cd964d5..6e95786 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.2 + 4.0.3 4.0.0 diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index 1b72d36..dbdb8f4 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 4.0.2 + 4.0.3 activemq-starter diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index 0b0fcd9..47e2199 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.2 + 4.0.3 mq-core diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index db42a6d..ea281ba 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.2 + 4.0.3 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index 84c52b3..bb4d526 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.2 + 4.0.3 rabbitmq-starter diff --git a/pom.xml b/pom.xml index 9ce1e55..711c2a7 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 4.0.2 + 4.0.3 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 4.0.2 + 4.0.3 1.18.10 1.7.21 1.1.7 diff --git a/web-starter/pom.xml b/web-starter/pom.xml index b9c5d5b..73b6224 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.2 + 4.0.3 4.0.0 -- Gitee From 93487d8b9cf5e3bdb09260bfb732b13572137203 Mon Sep 17 00:00:00 2001 From: lframework Date: Wed, 9 Jul 2025 07:32:46 +0800 Subject: [PATCH 17/18] =?UTF-8?q?fix=20=E9=83=A8=E9=97=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=80=89=E6=8B=A9=E5=99=A8=E5=A2=9E=E5=8A=A0=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bpm-starter/pom.xml | 2 +- cloud-starter/pom.xml | 2 +- common/pom.xml | 2 +- mq-starter/activemq-starter/pom.xml | 2 +- mq-starter/mq-core/pom.xml | 2 +- mq-starter/pom.xml | 2 +- mq-starter/rabbitmq-starter/pom.xml | 2 +- pom.xml | 4 ++-- web-starter/pom.xml | 2 +- .../system/DefaultSysSelectorController.java | 5 +++-- .../controller/system/SysDeptController.java | 10 +++++++--- .../inner/impl/system/SysDeptServiceImpl.java | 9 +++++---- .../inner/mappers/system/SysDeptMapper.java | 4 +++- .../inner/service/system/SysDeptService.java | 3 ++- .../vo/system/dept/SysDeptSelectorVo.java | 18 ++++++++++++++++++ .../resources/mappers/system/SysDeptMapper.xml | 5 +++++ 16 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysDeptSelectorVo.java diff --git a/bpm-starter/pom.xml b/bpm-starter/pom.xml index 7dc1dc0..8cc7f40 100644 --- a/bpm-starter/pom.xml +++ b/bpm-starter/pom.xml @@ -6,7 +6,7 @@ com.lframework parent - 4.0.3 + 4.0.4 bpm-starter diff --git a/cloud-starter/pom.xml b/cloud-starter/pom.xml index 26db4ed..2cc83ab 100644 --- a/cloud-starter/pom.xml +++ b/cloud-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.3 + 4.0.4 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 6e95786..95c274f 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.3 + 4.0.4 4.0.0 diff --git a/mq-starter/activemq-starter/pom.xml b/mq-starter/activemq-starter/pom.xml index dbdb8f4..e641a6d 100644 --- a/mq-starter/activemq-starter/pom.xml +++ b/mq-starter/activemq-starter/pom.xml @@ -6,7 +6,7 @@ mq-starter com.lframework - 4.0.3 + 4.0.4 activemq-starter diff --git a/mq-starter/mq-core/pom.xml b/mq-starter/mq-core/pom.xml index 47e2199..60b1938 100644 --- a/mq-starter/mq-core/pom.xml +++ b/mq-starter/mq-core/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.3 + 4.0.4 mq-core diff --git a/mq-starter/pom.xml b/mq-starter/pom.xml index ea281ba..26071f5 100644 --- a/mq-starter/pom.xml +++ b/mq-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.3 + 4.0.4 mq-starter diff --git a/mq-starter/rabbitmq-starter/pom.xml b/mq-starter/rabbitmq-starter/pom.xml index bb4d526..4d9e50a 100644 --- a/mq-starter/rabbitmq-starter/pom.xml +++ b/mq-starter/rabbitmq-starter/pom.xml @@ -5,7 +5,7 @@ mq-starter com.lframework - 4.0.3 + 4.0.4 rabbitmq-starter diff --git a/pom.xml b/pom.xml index 711c2a7..ff7ebed 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.lframework parent 【${project.artifactId}】Jugg基础框架 - 4.0.3 + 4.0.4 pom https://gitee.com/lframework/jugg @@ -21,7 +21,7 @@ UTF-8 3.8.0 2.2.2.RELEASE - 4.0.3 + 4.0.4 1.18.10 1.7.21 1.1.7 diff --git a/web-starter/pom.xml b/web-starter/pom.xml index 73b6224..6aab74e 100644 --- a/web-starter/pom.xml +++ b/web-starter/pom.xml @@ -5,7 +5,7 @@ parent com.lframework - 4.0.3 + 4.0.4 4.0.0 diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java index 06906c5..9e58d3c 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/DefaultSysSelectorController.java @@ -43,6 +43,7 @@ import com.lframework.starter.web.inner.service.system.SysRoleCategoryService; import com.lframework.starter.web.inner.service.system.SysRoleService; import com.lframework.starter.web.inner.service.system.SysUserGroupService; import com.lframework.starter.web.inner.service.system.SysUserService; +import com.lframework.starter.web.inner.vo.system.dept.SysDeptSelectorVo; import com.lframework.starter.web.inner.vo.system.dic.SysDataDicSelectorVo; import com.lframework.starter.web.inner.vo.system.dic.category.SysDataDicCategorySelectorVo; import com.lframework.starter.web.inner.vo.system.menu.SysMenuSelectorVo; @@ -139,10 +140,10 @@ public class DefaultSysSelectorController extends DefaultBaseController { @ApiOperation("部门") @GetMapping("/dept") - public InvokeResult> dept() { + public InvokeResult> dept(@Valid SysDeptSelectorVo vo) { List results = CollectionUtil.emptyList(); - List datas = sysDeptService.selector(); + List datas = sysDeptService.selector(vo); if (CollectionUtil.isNotEmpty(datas)) { results = datas.stream().map(SysDeptSelectorBo::new).collect(Collectors.toList()); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java index 3964a82..acfa9e9 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/controller/system/SysDeptController.java @@ -1,16 +1,18 @@ package com.lframework.starter.web.inner.controller.system; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.lframework.starter.common.exceptions.impl.DefaultClientException; import com.lframework.starter.common.utils.CollectionUtil; import com.lframework.starter.web.core.annotations.security.HasPermission; -import com.lframework.starter.web.core.controller.DefaultBaseController; import com.lframework.starter.web.core.components.resp.InvokeResult; import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; -import com.lframework.starter.web.inner.service.RecursionMappingService; +import com.lframework.starter.web.core.controller.DefaultBaseController; import com.lframework.starter.web.inner.bo.system.dept.GetSysDeptBo; import com.lframework.starter.web.inner.bo.system.dept.SysDeptTreeBo; import com.lframework.starter.web.inner.entity.SysDept; import com.lframework.starter.web.inner.enums.system.SysDeptNodeType; +import com.lframework.starter.web.inner.service.RecursionMappingService; import com.lframework.starter.web.inner.service.system.SysDeptService; import com.lframework.starter.web.inner.vo.system.dept.CreateSysDeptVo; import com.lframework.starter.web.inner.vo.system.dept.UpdateSysDeptVo; @@ -58,7 +60,9 @@ public class SysDeptController extends DefaultBaseController { @GetMapping("/trees") public InvokeResult> trees() { - List datas = sysDeptService.selector(); + Wrapper queryWrapper = Wrappers.lambdaQuery(SysDept.class) + .orderByAsc(SysDept::getCode); + List datas = sysDeptService.list(queryWrapper); if (CollectionUtil.isEmpty(datas)) { return InvokeResultBuilder.success(CollectionUtil.emptyList()); } diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java index cbe7d11..4e18a83 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/impl/system/SysDeptServiceImpl.java @@ -18,6 +18,7 @@ import com.lframework.starter.web.inner.service.RecursionMappingService; import com.lframework.starter.web.inner.service.system.SysDeptService; import com.lframework.starter.web.core.utils.OpLogUtil; import com.lframework.starter.web.inner.vo.system.dept.CreateSysDeptVo; +import com.lframework.starter.web.inner.vo.system.dept.SysDeptSelectorVo; import com.lframework.starter.web.inner.vo.system.dept.UpdateSysDeptVo; import java.io.Serializable; import java.util.ArrayList; @@ -37,9 +38,9 @@ public class SysDeptServiceImpl extends BaseMpServiceImpl selector() { + public List selector(SysDeptSelectorVo vo) { - return this.doSelector(); + return this.doSelector(vo); } @Cacheable(value = SysDept.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null") @@ -119,9 +120,9 @@ public class SysDeptServiceImpl extends BaseMpServiceImpl doSelector() { + protected List doSelector(SysDeptSelectorVo vo) { - return getBaseMapper().selector(); + return getBaseMapper().selector(vo); } protected SysDept doGetById(String id) { diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java index 3feaed8..5a32f3a 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/mappers/system/SysDeptMapper.java @@ -2,7 +2,9 @@ package com.lframework.starter.web.inner.mappers.system; import com.lframework.starter.web.inner.entity.SysDept; import com.lframework.starter.web.core.mapper.BaseMapper; +import com.lframework.starter.web.inner.vo.system.dept.SysDeptSelectorVo; import java.util.List; +import org.apache.ibatis.annotations.Param; /** *

@@ -19,7 +21,7 @@ public interface SysDeptMapper extends BaseMapper { * * @return */ - List selector(); + List selector(@Param("vo") SysDeptSelectorVo vo); /** * 根据ID查询 diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java index f7d8f72..84adb15 100644 --- a/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/service/system/SysDeptService.java @@ -3,6 +3,7 @@ package com.lframework.starter.web.inner.service.system; import com.lframework.starter.web.core.service.BaseMpService; import com.lframework.starter.web.inner.entity.SysDept; import com.lframework.starter.web.inner.vo.system.dept.CreateSysDeptVo; +import com.lframework.starter.web.inner.vo.system.dept.SysDeptSelectorVo; import com.lframework.starter.web.inner.vo.system.dept.UpdateSysDeptVo; import java.util.List; @@ -13,7 +14,7 @@ public interface SysDeptService extends BaseMpService { * * @return */ - List selector(); + List selector(SysDeptSelectorVo vo); /** * 根据ID查询 diff --git a/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysDeptSelectorVo.java b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysDeptSelectorVo.java new file mode 100644 index 0000000..0059985 --- /dev/null +++ b/web-starter/src/main/java/com/lframework/starter/web/inner/vo/system/dept/SysDeptSelectorVo.java @@ -0,0 +1,18 @@ +package com.lframework.starter.web.inner.vo.system.dept; + +import com.lframework.starter.web.core.vo.BaseVo; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Data; + +@Data +public class SysDeptSelectorVo implements BaseVo, Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 状态 + */ + @ApiModelProperty("状态") + private Boolean available; +} diff --git a/web-starter/src/main/resources/mappers/system/SysDeptMapper.xml b/web-starter/src/main/resources/mappers/system/SysDeptMapper.xml index 1c39957..8590ac8 100644 --- a/web-starter/src/main/resources/mappers/system/SysDeptMapper.xml +++ b/web-starter/src/main/resources/mappers/system/SysDeptMapper.xml @@ -10,6 +10,11 @@ + -- Gitee