diff --git a/cutejava/README.md b/cutejava/README.md index c0568f26..2f6c9a0e 100644 --- a/cutejava/README.md +++ b/cutejava/README.md @@ -1,4 +1,4 @@ -

ELADMIN 后台管理系统

+

CuteJava 后台管理系统

#### 项目简介 diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousAccess.java b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousAccess.java similarity index 87% rename from cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousAccess.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousAccess.java index ad715b30..5ec05754 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousAccess.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousAccess.java @@ -1,4 +1,4 @@ -package cn.odboy.annotation.rest; +package cn.odboy.annotation; import java.lang.annotation.*; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousDeleteMapping.java b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java similarity index 98% rename from cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousDeleteMapping.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java index faeaa72e..7d8ae30b 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousDeleteMapping.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java @@ -1,4 +1,4 @@ -package cn.odboy.annotation.rest; +package cn.odboy.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousGetMapping.java b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousGetMapping.java similarity index 97% rename from cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousGetMapping.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousGetMapping.java index 301eb2fc..8fb6a6da 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousGetMapping.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousGetMapping.java @@ -1,4 +1,4 @@ -package cn.odboy.annotation.rest; +package cn.odboy.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPatchMapping.java b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPatchMapping.java similarity index 98% rename from cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPatchMapping.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPatchMapping.java index de2b55ed..73559cc1 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPatchMapping.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPatchMapping.java @@ -1,4 +1,4 @@ -package cn.odboy.annotation.rest; +package cn.odboy.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPostMapping.java b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPostMapping.java similarity index 98% rename from cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPostMapping.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPostMapping.java index e483db1d..2a413114 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPostMapping.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPostMapping.java @@ -1,4 +1,4 @@ -package cn.odboy.annotation.rest; +package cn.odboy.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPutMapping.java b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPutMapping.java similarity index 98% rename from cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPutMapping.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPutMapping.java index a523bb6e..1419795a 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/rest/AnonymousPutMapping.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/annotation/AnonymousPutMapping.java @@ -1,4 +1,4 @@ -package cn.odboy.annotation.rest; +package cn.odboy.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/base/BaseEntity.java b/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyEntity.java similarity index 88% rename from cutejava/cutejava-common/src/main/java/cn/odboy/base/BaseEntity.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/base/MyEntity.java index 890d4633..6d53bb66 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/base/BaseEntity.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyEntity.java @@ -18,7 +18,7 @@ import java.sql.Timestamp; @Getter @Setter @EqualsAndHashCode(callSuper = false) -public class BaseEntity extends MyObject { +public class MyEntity extends MyObject { @CreatedBy @TableField(fill = FieldFill.INSERT) @@ -33,11 +33,15 @@ public class BaseEntity extends MyObject { @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + // @JSONField(format = "yyyy-MM-dd HH:mm:ss") +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Timestamp createTime; @TableField(fill = FieldFill.INSERT_UPDATE) @ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + // @JSONField(format = "yyyy-MM-dd HH:mm:ss") +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Timestamp updateTime; /* 分组校验 */ diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyLogicEntity.java b/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyLogicEntity.java new file mode 100644 index 00000000..04e0c568 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyLogicEntity.java @@ -0,0 +1,72 @@ +package cn.odboy.base; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableLogic; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.format.annotation.DateTimeFormat; + +import java.lang.reflect.Field; +import java.sql.Timestamp; + +/** + * 逻辑删除通用模型 + * + * @author odboy + * @date 2025-01-12 + */ +@Getter +@Setter +public class MyLogicEntity extends MyObject { + @CreatedBy + @TableField(value = "create_by", fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建人", hidden = true) + private String createBy; + @LastModifiedBy + @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "更新人", hidden = true) + private String updateBy; + @TableField(value = "create_time", fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建时间", hidden = true) + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Timestamp createTime; + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + @ApiModelProperty(value = "更新时间", hidden = true) + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Timestamp updateTime; + @ApiModelProperty(value = "数据有效性", hidden = true) + @TableLogic + @TableField("available") + private Integer available; + + /* 分组校验 */ + public @interface Create { + } + + /* 分组校验 */ + public @interface Update { + } + + @Override + public String toString() { + ToStringBuilder builder = new ToStringBuilder(this); + Field[] fields = this.getClass().getDeclaredFields(); + try { + for (Field f : fields) { + f.setAccessible(true); + builder.append(f.getName(), f.get(this)).append("\n"); + } + } catch (Exception e) { + builder.append("toString builder encounter an error"); + } + return builder.toString(); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyMetaOption.java b/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyMetaOption.java new file mode 100644 index 00000000..94e5f24f --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/base/MyMetaOption.java @@ -0,0 +1,37 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.base; + +import lombok.*; + +import java.util.Map; + +/** + * 元数据选项 + * + * @author odboy + * @date 2025-01-13 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class MyMetaOption extends MyObject { + private String label; + private String value; + private Map ext; +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/base/PageArgs.java b/cutejava/cutejava-common/src/main/java/cn/odboy/base/PageArgs.java new file mode 100644 index 00000000..06d18125 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/base/PageArgs.java @@ -0,0 +1,31 @@ +package cn.odboy.base; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 数据分页参数 + * + * @author odboy + * @date 2025-01-20 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PageArgs implements Serializable { + @NotNull(message = "参数page不能为空") + @Min(value = 1, message = "参数page最小值为1") + @ApiModelProperty(value = "页码", example = "1") + private Integer page; + @NotNull(message = "参数size不能为空") + @Min(value = 1, message = "参数size最小值为1") + @ApiModelProperty(value = "每页数据量", example = "10") + private Integer size; + private T args; +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/PageResult.java b/cutejava/cutejava-common/src/main/java/cn/odboy/base/PageResult.java similarity index 86% rename from cutejava/cutejava-common/src/main/java/cn/odboy/util/PageResult.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/base/PageResult.java index 232c39c3..292801a7 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/PageResult.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/base/PageResult.java @@ -1,6 +1,5 @@ -package cn.odboy.util; +package cn.odboy.base; -import cn.odboy.base.MyObject; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,8 +15,6 @@ import java.util.List; @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class PageResult extends MyObject { - private List content; - private long totalElements; } diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/QueryCustomizer.java b/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/QueryCustomizer.java deleted file mode 100644 index ff3544c0..00000000 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/QueryCustomizer.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.odboy.config.webConfig; - -import org.apache.catalina.connector.Connector; -import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; -import org.springframework.context.annotation.Configuration; - -/** - * 允许在查询字符串中使用特定的特殊字符 - */ -@Configuration(proxyBeanMethods = false) -public class QueryCustomizer implements TomcatConnectorCustomizer { - - @Override - public void customize(Connector connector) { - connector.setProperty("relaxedQueryChars", "[]{}"); - } -} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/AuthorityConfig.java b/cutejava/cutejava-common/src/main/java/cn/odboy/context/AuthorityConfig.java similarity index 97% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/AuthorityConfig.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/context/AuthorityConfig.java index cc0fe248..469349a7 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/AuthorityConfig.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/context/AuthorityConfig.java @@ -1,4 +1,4 @@ -package cn.odboy.config; +package cn.odboy.context; import cn.odboy.util.SecurityUtil; import org.springframework.security.core.GrantedAuthority; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/context/BeanLoadFinishListener.java b/cutejava/cutejava-common/src/main/java/cn/odboy/context/BeanLoadFinishListener.java new file mode 100644 index 00000000..02a2bada --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/context/BeanLoadFinishListener.java @@ -0,0 +1,36 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.context; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +/** + * Bean加载完毕 监听 + * + * @author odboy + * @date 2025-01-16 + */ +@Slf4j +@Component +public class BeanLoadFinishListener implements ApplicationListener { + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + log.info("所有的Bean都加载完毕了"); + } +} \ No newline at end of file diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/context/BootApplication.java b/cutejava/cutejava-common/src/main/java/cn/odboy/context/BootApplication.java new file mode 100644 index 00000000..f035513e --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/context/BootApplication.java @@ -0,0 +1,53 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.context; + +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * 主要目的是输出应用的服务地址 + * + * @author odboy + * @date 2024-04-20 + */ +@Slf4j +public class BootApplication { + @Bean + public SpringBeanHolder springContextHolder() { + return new SpringBeanHolder(); + } + + protected static void inited(ConfigurableApplicationContext application) throws UnknownHostException { + Environment env = application.getEnvironment(); + String ip = InetAddress.getLocalHost().getHostAddress(); + String port = env.getProperty("server.port"); + String path = StrUtil.isEmpty(env.getProperty("config.servlet.context-path")) ? "" : env.getProperty("config.servlet.context-path"); + log.info( + "\n----------------------------------------------------------\n\t" + + "Application is running! Access URLs:\n\t" + + "Local: \t\thttp://localhost:" + port + path + "/\n\t" + + "External: \thttp://" + ip + ":" + port + path + "/\n\t" + + "Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n" + + "----------------------------------------------------------"); + } +} \ No newline at end of file diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/RequestHolder.java b/cutejava/cutejava-common/src/main/java/cn/odboy/context/RequestHolder.java similarity index 94% rename from cutejava/cutejava-common/src/main/java/cn/odboy/util/RequestHolder.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/context/RequestHolder.java index 4e586e77..12f1a976 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/RequestHolder.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/context/RequestHolder.java @@ -1,4 +1,4 @@ -package cn.odboy.util; +package cn.odboy.context; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/SpringBeanHolder.java b/cutejava/cutejava-common/src/main/java/cn/odboy/context/SpringBeanHolder.java similarity index 99% rename from cutejava/cutejava-common/src/main/java/cn/odboy/util/SpringBeanHolder.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/context/SpringBeanHolder.java index 38322e97..e0293b38 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/SpringBeanHolder.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/context/SpringBeanHolder.java @@ -1,4 +1,4 @@ -package cn.odboy.util; +package cn.odboy.context; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/exception/handler/GlobalExceptionHandler.java b/cutejava/cutejava-common/src/main/java/cn/odboy/exception/handler/GlobalExceptionHandler.java index 84669a0f..7aa4f6ca 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/exception/handler/GlobalExceptionHandler.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/exception/handler/GlobalExceptionHandler.java @@ -3,7 +3,7 @@ package cn.odboy.exception.handler; import cn.odboy.exception.BadRequestException; import cn.odboy.exception.EntityExistException; import cn.odboy.exception.EntityNotFoundException; -import cn.odboy.util.ThrowableUtil; +import cn.odboy.exception.util.ThrowableUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/exception/util/LogFmtUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/exception/util/LogFmtUtil.java new file mode 100644 index 00000000..8e506682 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/exception/util/LogFmtUtil.java @@ -0,0 +1,47 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.exception.util; + +/** + * 适配 logger 占位符 + * + * @author odboy + * @date 2025-01-13 + */ +public class LogFmtUtil { + /** + * 替换字符串中的占位符 {} 为传入的参数 + * + * @param message 消息模板 + * @param args 替换占位符的参数 + * @return 替换后的消息 + */ + public static String format(String message, Object... args) { + if (message == null || args == null || args.length == 0) { + return message; + } + // 使用 String.format 替换占位符 + return String.format(message.replace("{}", "%s"), args); + } + + public static void main(String[] args) { + // 示例用法 + String messageTemplate = "获取dingtalk accessToken失败, code={}, message={}"; + String formattedMessage = format(messageTemplate, 400, "Bad Request"); + // 输出: 获取dingtalk accessToken失败, code=400, message=Bad Request + System.out.println(formattedMessage); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/ThrowableUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/exception/util/ThrowableUtil.java similarity index 92% rename from cutejava/cutejava-common/src/main/java/cn/odboy/util/ThrowableUtil.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/exception/util/ThrowableUtil.java index d3a380f9..e766e658 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/ThrowableUtil.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/exception/util/ThrowableUtil.java @@ -1,4 +1,4 @@ -package cn.odboy.util; +package cn.odboy.exception.util; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/monitor/HealthCheckController.java b/cutejava/cutejava-common/src/main/java/cn/odboy/monitor/HealthCheckController.java new file mode 100644 index 00000000..1cf2c97e --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/monitor/HealthCheckController.java @@ -0,0 +1,51 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.monitor; + +import cn.odboy.annotation.AnonymousGetMapping; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 健康检查接口 + * + * @author odboy + * @date 2022-01-06 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/health") +@Api(tags = "系统:健康检查接口") +public class HealthCheckController { + /** + * 健康检查 + */ + @AnonymousGetMapping(value = "/check") + public ResponseEntity doCheck() { + return ResponseEntity.ok().build(); + } + + /** + * 访问首页提示 + */ + @AnonymousGetMapping("/") + public String index() { + return "success"; + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/MybatisPlusConfig.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/config/MybatisPlusConfig.java similarity index 51% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/MybatisPlusConfig.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/config/MybatisPlusConfig.java index 4c2c1055..7f65a35d 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/MybatisPlusConfig.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/config/MybatisPlusConfig.java @@ -1,7 +1,10 @@ -package cn.odboy.config.mybatis; +package cn.odboy.mybatis.config; +import cn.odboy.mybatis.context.InsertBatchSqlInjector; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -10,18 +13,28 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @EnableTransactionManagement public class MybatisPlusConfig { - /** - * MyBatisPlus拦截器(用于分页) - */ @Bean public MybatisPlusInterceptor paginationInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - // 添加MySQL的分页拦截器 + // MySQL的分页拦截器 PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); - paginationInnerInterceptor.setOptimizeJoin(true); paginationInnerInterceptor.setMaxLimit(500L); - paginationInnerInterceptor.setOverflow(false); + /// 这个配置会导致:当分页没数据时,游标从0开始,会导致无论page为什么值,就算分页超出最大页数,依然能够查询到 + /// paginationInnerInterceptor.setOverflow(true); + paginationInnerInterceptor.setOptimizeJoin(true); interceptor.addInnerInterceptor(paginationInnerInterceptor); + // 乐观锁 + interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + // 防全表更新与删除 + interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); return interceptor; } + + /** + * Mapper支持批量插入 + */ + @Bean + public InsertBatchSqlInjector insertBatchSqlInjector() { + return new InsertBatchSqlInjector(); + } } diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/RemoveDruidAdConfig.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/config/RemoveDruidAdConfig.java similarity index 99% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/RemoveDruidAdConfig.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/config/RemoveDruidAdConfig.java index 656f1f4a..93e5571b 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/RemoveDruidAdConfig.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/config/RemoveDruidAdConfig.java @@ -1,4 +1,4 @@ -package cn.odboy.config; +package cn.odboy.mybatis.config; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/DataTypeEnum.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/DataTypeEnum.java new file mode 100644 index 00000000..fe7fdc5e --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/DataTypeEnum.java @@ -0,0 +1,153 @@ +/* + * << + * Davinci + * == + * Copyright (C) 2016 - 2019 EDP + * == + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * >> + * + */ +package cn.odboy.mybatis.constant; + +import lombok.extern.slf4j.Slf4j; + +/** + * @author / + */ +@Slf4j +@SuppressWarnings({"unchecked", "all"}) +public enum DataTypeEnum { + /** + * mysql + */ + MYSQL("mysql", "mysql", "com.mysql.jdbc.Driver", "`", "`", "'", "'"), + /** + * oracle + */ + ORACLE("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""), + /** + * sql config + */ + SQLSERVER("sqlserver", "sqlserver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "\"", "\"", "\"", "\""), + /** + * h2 + */ + H2("h2", "h2", "org.h2.Driver", "`", "`", "\"", "\""), + /** + * phoenix + */ + PHOENIX("phoenix", "hbase phoenix", "org.apache.phoenix.jdbc.PhoenixDriver", "", "", "\"", "\""), + /** + * mongo + */ + MONGODB("mongo", "mongodb", "mongodb.jdbc.MongoDriver", "`", "`", "\"", "\""), + /** + * sql4es + */ + ELASTICSEARCH("sql4es", "elasticsearch", "nl.anchormen.sql4es.jdbc.ESDriver", "", "", "'", "'"), + /** + * presto + */ + PRESTO("presto", "presto", "com.facebook.presto.jdbc.PrestoDriver", "", "", "\"", "\""), + /** + * moonbox + */ + MOONBOX("moonbox", "moonbox", "moonbox.jdbc.MbDriver", "`", "`", "`", "`"), + /** + * cassandra + */ + CASSANDRA("cassandra", "cassandra", "com.github.adejanovski.cassandra.jdbc.CassandraDriver", "", "", "'", "'"), + /** + * click house + */ + CLICKHOUSE("clickhouse", "clickhouse", "ru.yandex.clickhouse.ClickHouseDriver", "", "", "\"", "\""), + /** + * kylin + */ + KYLIN("kylin", "kylin", "org.apache.kylin.jdbc.Driver", "\"", "\"", "\"", "\""), + /** + * vertica + */ + VERTICA("vertica", "vertica", "com.vertica.jdbc.Driver", "", "", "'", "'"), + /** + * sap + */ + HANA("sap", "sap hana", "com.sap.db.jdbc.Driver", "", "", "'", "'"), + /** + * impala + */ + IMPALA("impala", "impala", "com.cloudera.impala.jdbc41.Driver", "", "", "'", "'"); + private String feature; + private String desc; + private String driver; + private String keywordPrefix; + private String keywordSuffix; + private String aliasPrefix; + private String aliasSuffix; + private static final String JDBC_URL_PREFIX = "jdbc:"; + + DataTypeEnum(String feature, String desc, String driver, String keywordPrefix, String keywordSuffix, String aliasPrefix, String aliasSuffix) { + this.feature = feature; + this.desc = desc; + this.driver = driver; + this.keywordPrefix = keywordPrefix; + this.keywordSuffix = keywordSuffix; + this.aliasPrefix = aliasPrefix; + this.aliasSuffix = aliasSuffix; + } + + public static DataTypeEnum urlOf(String jdbcUrl) { + String url = jdbcUrl.toLowerCase().trim(); + for (DataTypeEnum dataTypeEnum : values()) { + if (url.startsWith(JDBC_URL_PREFIX + dataTypeEnum.feature)) { + try { + Class aClass = Class.forName(dataTypeEnum.getDriver()); + if (null == aClass) { + throw new RuntimeException("Unable to get driver instance for jdbcUrl: " + jdbcUrl); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException("Unable to get driver instance: " + jdbcUrl); + } + return dataTypeEnum; + } + } + return null; + } + + public String getFeature() { + return feature; + } + + public String getDesc() { + return desc; + } + + public String getDriver() { + return driver; + } + + public String getKeywordPrefix() { + return keywordPrefix; + } + + public String getKeywordSuffix() { + return keywordSuffix; + } + + public String getAliasPrefix() { + return aliasPrefix; + } + + public String getAliasSuffix() { + return aliasSuffix; + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/MpQuery.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/MpQuery.java new file mode 100644 index 00000000..6eb8a27f --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/MpQuery.java @@ -0,0 +1,58 @@ +package cn.odboy.mybatis.constant; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 查询描述 + * + * @date 2023-11-25 + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface MpQuery { + /** + * 基本对象的属性名 + */ + String propName() default ""; + + /** + * 查询方式 + */ + QueryTypeEnum type() default QueryTypeEnum.EQUAL; + + /** + * 连接查询的属性名, 如User类中的dept + */ + String joinName() default ""; + + /** + * 默认左连接 + */ + Join join() default Join.LEFT; + + /** + * 多字段模糊搜索, 仅支持String类型字段, 多个用逗号隔开, 如@MpQuery(blurry = "email,username") + */ + String blurry() default ""; + + /** + * 适用于简单连接查询, 复杂的请自定义该注解, 或者使用sql查询 + */ + enum Join { + /** + * 左连接 + */ + LEFT, + /** + * 右连接 + */ + RIGHT, + /** + * 内连接 + */ + INNER + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/QueryTypeEnum.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/QueryTypeEnum.java new file mode 100644 index 00000000..efb38d28 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/constant/QueryTypeEnum.java @@ -0,0 +1,59 @@ +package cn.odboy.mybatis.constant; + +/** + * 动态查询 枚举 + */ +public enum QueryTypeEnum { + /** + * 相等 + */ + EQUAL + /** + * 大于等于 + */ + , GREATER_THAN + /** + * 小于等于 + */ + , LESS_THAN + /** + * 中模糊查询 + */ + , INNER_LIKE + /** + * 左模糊查询 + */ + , LEFT_LIKE + /** + * 右模糊查询 + */ + , RIGHT_LIKE + /** + * 小于 + */ + , LESS_THAN_NQ + /** + * 包含 + */ + , IN + /** + * 不包含 + */ + , NOT_IN + /** + * 不等于 + */ + , NOT_EQUAL + /** + * between(注:被注解的属性一定得是数组或者集合, 长度大于等于2) + */ + , BETWEEN + /** + * 不为空 + */ + , NOT_NULL + /** + * 为空 + */ + , IS_NULL +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/CustomP6SpyLogger.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/CustomP6SpyLogger.java similarity index 97% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/CustomP6SpyLogger.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/CustomP6SpyLogger.java index 8ce8d2cc..5e73f280 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/CustomP6SpyLogger.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/CustomP6SpyLogger.java @@ -1,4 +1,4 @@ -package cn.odboy.config.mybatis; +package cn.odboy.mybatis.context; import cn.hutool.core.util.StrUtil; import com.p6spy.engine.spy.appender.MessageFormattingStrategy; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/InsertBatchSqlInjector.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/InsertBatchSqlInjector.java new file mode 100644 index 00000000..77c6c68f --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/InsertBatchSqlInjector.java @@ -0,0 +1,44 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.mybatis.context; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById; +import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; +import org.apache.ibatis.session.Configuration; + +import java.util.List; + +/** + * 批量插入SQL注入器 + * + * @author odboy + * @date 2025-01-11 + */ +public class InsertBatchSqlInjector extends DefaultSqlInjector { + @Override + public List getMethodList(Configuration configuration, Class mapperClass, TableInfo tableInfo) { + List methodList = super.getMethodList(configuration, mapperClass, tableInfo); + // 新增自定义方法, InsertBatchSomeColumn这个方法Mp没有开放出来 + methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE)); + // 全量更新, 包括null字段 + methodList.add(new AlwaysUpdateSomeColumnById(i -> i.getFieldFill() != FieldFill.INSERT)); + return methodList; + } +} \ No newline at end of file diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/MyMetaObjectHandler.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/MyMetaObjectHandler.java similarity index 97% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/MyMetaObjectHandler.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/MyMetaObjectHandler.java index 8fa46e02..f144ec1a 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/mybatis/MyMetaObjectHandler.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/context/MyMetaObjectHandler.java @@ -1,4 +1,4 @@ -package cn.odboy.config.mybatis; +package cn.odboy.mybatis.context; import cn.hutool.core.date.DateTime; import cn.odboy.util.SecurityUtil; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/EasyMapper.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/EasyMapper.java new file mode 100644 index 00000000..4a54fe39 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/EasyMapper.java @@ -0,0 +1,204 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.mybatis.interfaces; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.odboy.base.PageResult; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers; +import org.apache.ibatis.annotations.Param; +import org.springframework.data.domain.Pageable; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 公共抽象Mapper接口类 + * + * @author odboy + * @date 2022-04-03 + */ +public interface EasyMapper extends BaseMapper { + /** + * 批量插入 + * + * @param entityList List + * @return 影响的行数 + */ + int insertBatchSomeColumn(List entityList); + + /** + * 根据id全量更新 + * + * @param entity E + * @return 影响的行数 + */ + int alwaysUpdateSomeColumnById(@Param("et") E entity); + + default QueryChainWrapper select() { + return ChainWrappers.queryChain(this); + } + + default UpdateChainWrapper update() { + return ChainWrappers.updateChain(this); + } + + default LambdaQueryChainWrapper lambdaSelect() { + return ChainWrappers.lambdaQueryChain(this); + } + + default LambdaUpdateChainWrapper lambdaUpdate() { + return ChainWrappers.lambdaUpdateChain(this); + } + + /** + * 获取字典 + * + * @param wrapper LambdaQueryWrapper + * @param keyName 键对应的列名称 + * @param valueName 值对应的列名称 + * @return Map + */ + default Map selectMap(LambdaQueryWrapper wrapper, String keyName, String valueName) { + Map result = new ConcurrentHashMap<>(1); + List list = this.selectList(wrapper); + if (CollUtil.isEmpty(list)) { + return new HashMap<>(); + } + E tempObj = list.stream().findFirst().orElse(null); + if (tempObj == null) { + return new HashMap<>(); + } + Field[] fields = ReflectUtil.getFields(tempObj.getClass()); + for (E e : list) { + Field keyField = null; + Field valueField = null; + for (Field field : fields) { + String fieldName = field.getName(); + if (fieldName.equals(keyName)) { + keyField = field; + } else if (fieldName.equals(valueName)) { + valueField = field; + break; + } + } + String fieldKey = String.valueOf(ReflectUtil.getFieldValue(e, keyField)); + Object fieldValue = ReflectUtil.getFieldValue(e, valueField); + if (fieldKey != null) { + result.put(fieldKey, fieldValue); + } + } + return result; + } + + /** + * 条件查询列表, 并返回期望的对象 + * + * @param wrapper LambdaQueryWrapper + * @param clazz 期望的对象类型 + * @return List + */ + default List selectList(LambdaQueryWrapper wrapper, Class clazz) { + List list = this.selectList(wrapper); + if (CollUtil.isEmpty(list)) { + return new ArrayList<>(); + } + return BeanUtil.copyToList(list, clazz); + } + + /** + * 条件查询列表, 并返回期望的对象 + * + * @param wrapper LambdaQueryWrapper + * @param clazz 期望的对象类型 + * @return List + */ + default List selectList(LambdaQueryChainWrapper wrapper, Class clazz) { + List list = wrapper.list(); + if (CollUtil.isEmpty(list)) { + return new ArrayList<>(); + } + return BeanUtil.copyToList(list, clazz); + } + + /** + * 条件查询分页列表, 并返回期望的对象 + * + * @param pageable 分页参数 + * @param wrapper LambdaQueryWrapper wrapper + * @param clazz 期望的对象类型 + * @return IPage + */ + default PageResult selectPage(Pageable pageable, LambdaQueryWrapper wrapper, Class clazz) { + int pageNumber = pageable.getPageNumber(); + int pageSize = pageable.getPageSize(); + pageNumber = pageNumber <= 0 ? 1 : pageNumber; + pageSize = pageSize <= 0 ? 10 : pageSize; + IPage pageInfo = this.selectPage(new Page<>(pageNumber, pageSize), wrapper); + if (CollUtil.isEmpty(pageInfo.getRecords())) { + return new PageResult<>(new ArrayList<>(), pageInfo.getTotal()); + } + return new PageResult<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal()); + } + + /** + * 条件查询分页列表, 并返回期望的对象 + * + * @param pageable 分页参数 + * @param wrapper LambdaQueryWrapper wrapper + * @param clazz 期望的对象类型 + * @return IPage + */ + default PageResult selectPage(Pageable pageable, LambdaQueryChainWrapper wrapper, Class clazz) { + int pageNumber = pageable.getPageNumber(); + int pageSize = pageable.getPageSize(); + pageNumber = pageNumber <= 0 ? 1 : pageNumber; + pageSize = pageSize <= 0 ? 10 : pageSize; + IPage pageInfo = wrapper.page(new Page<>(pageNumber, pageSize)); + if (CollUtil.isEmpty(pageInfo.getRecords())) { + return new PageResult<>(new ArrayList<>(), pageInfo.getTotal()); + } + return new PageResult<>(BeanUtil.copyToList(pageInfo.getRecords(), clazz), pageInfo.getTotal()); + } + + /** + * 获取目标类 + * + * @param wrapper LambdaQueryChainWrapper wrapper + * @param clazz 期望的对象类型 + * @return T + */ + default T selectOne(LambdaQueryChainWrapper wrapper, Class clazz) { + E e = this.selectOne(wrapper); + if (e == null) { + return null; + } + return BeanUtil.copyProperties(e, clazz); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/EasyService.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/EasyService.java new file mode 100644 index 00000000..ce8c6709 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/EasyService.java @@ -0,0 +1,72 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.mybatis.interfaces; + +import cn.odboy.base.PageResult; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +/** + * 公共抽象Mapper接口类 + * + * @author odboy + * @date 2022-04-03 + */ +public interface EasyService extends IService { + LambdaQueryWrapper quick(); + + int quickSave(G resources); + + int quickSaveBatch(List resources); + + int quickModifyById(G resources); + + boolean quickModifyBatchById(Collection resources, int batchSize); + + G quickGetOneById(Serializable id, Class targetClazz); + + T quickGetOne(LambdaQueryWrapper wrapper, SFunction orderColumn); + + G quickGetOne(LambdaQueryWrapper wrapper, SFunction orderColumn, Class clazz); + + List quickListByIds(List ids, Class targetClazz); + + List quickList(Q criteria); + + List quickList(LambdaQueryWrapper wrapper); + + List quickList(Q criteria, Class targetClazz); + + List quickList(LambdaQueryWrapper wrapper, Class targetClazz); + + PageResult quickPage(LambdaQueryWrapper wrapper, IPage pageable); + + PageResult quickPage(LambdaQueryWrapper wrapper, IPage pageable, Class targetClazz); + + PageResult quickPage(Q criteria, IPage pageable, Class targetClazz); + + PageResult quickPage(Q criteria, IPage pageable); + + int quickUpdate(LambdaQueryWrapper wrapper, T entity); + + int quickDelete(LambdaQueryWrapper wrapper); +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/impl/EasyServiceImpl.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/impl/EasyServiceImpl.java new file mode 100644 index 00000000..cabd24e1 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/interfaces/impl/EasyServiceImpl.java @@ -0,0 +1,260 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.mybatis.interfaces.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.odboy.base.PageResult; +import cn.odboy.exception.BadRequestException; +import cn.odboy.mybatis.interfaces.EasyMapper; +import cn.odboy.mybatis.util.MybatisHelper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.enums.SqlMethod; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.ibatis.binding.MapperMethod; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +/** + * 公共抽象Mapper接口类 + * + * @author odboy + * @date 2022-04-03 + */ +public class EasyServiceImpl, T> extends ServiceImpl { + public LambdaQueryWrapper quick() { + return new LambdaQueryWrapper<>(); + } + + /** + * 快速插入 + * + * @param resources / + */ + public int quickSave(G resources) { + return this.getBaseMapper().insert(BeanUtil.copyProperties(resources, this.getEntityClass())); + } + + /** + * 快速批量插入 + * + * @param resources / + */ + public int quickSaveBatch(List resources) { + return this.getBaseMapper().insertBatchSomeColumn(BeanUtil.copyToList(resources, this.getEntityClass())); + } + + /** + * 快速更新 + * + * @param resources / + */ + public int quickModifyById(G resources) { + return this.getBaseMapper().updateById(BeanUtil.copyProperties(resources, this.getEntityClass())); + } + + /** + * 快速批量更新 + * + * @param resources / + * @param batchSize 每批数量 + */ + public boolean quickModifyBatchById(Collection resources, int batchSize) { + String sqlStatement = this.getSqlStatement(SqlMethod.UPDATE_BY_ID); + return this.executeBatch(resources, batchSize, (sqlSession, entity) -> { + MapperMethod.ParamMap param = new MapperMethod.ParamMap<>(); + param.put("et", BeanUtil.copyProperties(entity, this.getEntityClass())); + sqlSession.update(sqlStatement, param); + }); + } + + /** + * 通过id查询 + * + * @param id / + * @param targetClazz 目标类型 + */ + public G quickGetOneById(Serializable id, Class targetClazz) { + T entity = this.getById(id); + return entity == null ? null : BeanUtil.copyProperties(entity, targetClazz); + } + + /** + * 查一条数据 + * + * @param wrapper 制造条件 + */ + public T quickGetOne(LambdaQueryWrapper wrapper, SFunction orderColumn) { + if (orderColumn == null) { + throw new BadRequestException("参数orderColumn(排序的列)必填"); + } + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + wrapper.last("limit 1"); + wrapper.orderByDesc(orderColumn); + List ts = baseMapper.selectList(wrapper); + if (ts.isEmpty()) { + return null; + } + return ts.stream().findFirst().get(); + } + + public G quickGetOne(LambdaQueryWrapper wrapper, SFunction orderColumn, Class clazz) { + if (orderColumn == null) { + throw new BadRequestException("参数orderColumn(排序的列)必填"); + } + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + wrapper.last("limit 1"); + wrapper.orderByDesc(orderColumn); + List ts = baseMapper.selectList(wrapper); + if (ts.isEmpty()) { + return null; + } + return BeanUtil.copyProperties(ts.stream().findFirst().get(), clazz); + } + + /** + * 通过id集合查询 + * + * @param ids / + * @param targetClazz 目标类型 + */ + public List quickListByIds(List ids, Class targetClazz) { + List entitys = this.listByIds(ids); + return entitys == null || entitys.isEmpty() ? CollUtil.newArrayList() : BeanUtil.copyToList(entitys, targetClazz); + } + + /** + * 查有关的数据 + * + * @param criteria 动态条件 + */ + public List quickList(Q criteria) { + QueryWrapper predicate = MybatisHelper.build(criteria); + return baseMapper.selectList(predicate); + } + + /** + * 查有关的数据 + * + * @param wrapper 制造条件 + */ + public List quickList(LambdaQueryWrapper wrapper) { + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + return baseMapper.selectList(wrapper); + } + + /** + * 查有关的数据并转成目标类型的数据 + * + * @param criteria 动态条件 + * @param targetClazz 目标类型 + */ + public List quickList(Q criteria, Class targetClazz) { + QueryWrapper predicate = MybatisHelper.build(criteria); + List data = baseMapper.selectList(predicate); + return BeanUtil.copyToList(data, targetClazz); + } + + /** + * 查有关的数据并转换为目标类型 + * + * @param wrapper 制造条件 + * @param targetClazz 目标类型 + */ + public List quickList(LambdaQueryWrapper wrapper, Class targetClazz) { + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + return BeanUtil.copyToList(baseMapper.selectList(wrapper), targetClazz); + } + + /** + * 查有关的分页数据 + * + * @param wrapper 制造条件 + * @param pageable 分页参数 + */ + public PageResult quickPage(LambdaQueryWrapper wrapper, IPage pageable) { + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + IPage originPageData = baseMapper.selectPage(pageable, wrapper); + return new PageResult<>(originPageData.getRecords(), originPageData.getTotal()); + } + + /** + * 查有关的分页数据 + * + * @param wrapper 制造条件 + * @param pageable 分页参数 + * @param targetClazz 目标类型 + */ + public PageResult quickPage(LambdaQueryWrapper wrapper, IPage pageable, Class targetClazz) { + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + IPage originPageData = baseMapper.selectPage(pageable, wrapper); + return new PageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal()); + } + + public PageResult quickPage(Q criteria, IPage pageable, Class targetClazz) { + QueryWrapper wrapper = MybatisHelper.build(criteria); + IPage originPageData = baseMapper.selectPage(pageable, wrapper); + return new PageResult<>(BeanUtil.copyToList(originPageData.getRecords(), targetClazz), originPageData.getTotal()); + } + + public PageResult quickPage(Q criteria, IPage pageable) { + QueryWrapper wrapper = MybatisHelper.build(criteria); + IPage originPageData = baseMapper.selectPage(pageable, wrapper); + return new PageResult<>(originPageData.getRecords(), originPageData.getTotal()); + } + + /** + * 条件更新 + * + * @param wrapper 制造条件 + * @param entity 更新内容 + */ + public int quickUpdate(LambdaQueryWrapper wrapper, T entity) { + if (wrapper == null) { + throw new BadRequestException("参数wrapper必填"); + } + return baseMapper.update(entity, wrapper); + } + + /** + * 条件删除 + * + * @param wrapper 制造条件 + */ + public int quickDelete(LambdaQueryWrapper wrapper) { + if (wrapper == null) { + throw new BadRequestException("参数wrapper必填"); + } + return baseMapper.delete(wrapper); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/util/CmdGenHelper.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/util/CmdGenHelper.java new file mode 100644 index 00000000..96a9e1ed --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/util/CmdGenHelper.java @@ -0,0 +1,195 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.mybatis.util; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.config.rules.DateType; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import lombok.Data; + +import java.sql.Types; +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; + +/** + * 代码生成器入口 + * + * @author odboy + * @date 2025-01-11 + */ +@Data +public class CmdGenHelper { + /** + * 数据库类型 MySQL + */ + private static final IDbQuery DB_QUERY = new MySqlQuery(); + /** + * 类型转换 + */ + private static final String TYPE_TINY_INT = "tinyint"; + private static final String TYPE_DATETIME = "datetime"; + private static final String TYPE_DATE = "date"; + private String databaseUrl; + private String databaseUsername; + private String databasePassword; + private String driverClassName; + private String parentPackageName; + private String parentPackageModuleName; + + /** + * 代码生成函数 + * + * @param tablePrefix 表前缀(可空) + * @param tableNames 表名称, 多个用逗号分隔 + */ + public void gen(String tablePrefix, List tableNames) { + // 1.数据库配置 + DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig + .Builder(this.databaseUrl, this.databaseUsername, this.databasePassword) + .driverClassName(this.driverClassName); + dataSourceConfigBuilder.dbQuery(DB_QUERY); + dataSourceConfigBuilder.keyWordsHandler(new MySqlKeyWordsHandler()); + // 1.1.快速生成器 + FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder); + // 2.全局配置 + // 自定义类型转换 + fastAutoGenerator.dataSourceConfig(getDataSourceConfigConsumer()); + // 覆盖已生成文件 + // 添加swagger注解 + // 设置注释的作者 + // 设置注释的日期格式 + // 使用java8新的时间类型 + fastAutoGenerator.globalConfig(getGlobalConfigConsumer()); + // 3.包配置 + // 设置父包名 + // 设置父包模块名 + // 设置MVC下各个模块的包名 + // 设置XML资源文件的目录 + fastAutoGenerator.packageConfig(getPackageConfigConsumer()); + // 4.模板配置 + // 使用Freemarker引擎模板, 默认的是Velocity引擎模板 + AbstractTemplateEngine templateEngine = new FreemarkerTemplateEngine(); + fastAutoGenerator.templateEngine(templateEngine); + // 5.策略配置 + // 设置需要生成的表名 + // 设置过滤表前缀 + fastAutoGenerator.strategyConfig(getStrategyConfigConsumer(tableNames) + ); + if (tablePrefix != null) { + // 表前缀, 可多个 + fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.addTablePrefix(tablePrefix)); + } + // 5.1.Entity策略配置 + // 生成实体时生成字段的注解, 包括@TableId注解等 + // 数据库表和字段映射到实体的命名策略, 为下划线转驼峰 + // 全局主键类型为None + // 实体名称格式化为XXXEntity + fastAutoGenerator.strategyConfig(getEntityConfigConsumer()); + // 5.2.Controller策略配置 + // 开启生成@RestController控制器 + fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle()); + // 如果不需要生成Controller + // fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller("")); + // 5.3.Service策略配置 + // 格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I + fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder + .serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl")); + // 5.4.Mapper策略配置 + // 格式化 mapper文件名,格式化xml实现类文件名称 + fastAutoGenerator.strategyConfig(getStrategyConfigConsumer()); + // 6.生成代码 + fastAutoGenerator.execute(); + } + + private static Consumer getEntityConfigConsumer() { + return strategyConfigBuilder -> strategyConfigBuilder + .entityBuilder() + .enableLombok() + // 如果不需要生成注解, 去掉.enableTableFieldAnnotation() + .enableTableFieldAnnotation() + .enableFileOverride() + .naming(NamingStrategy.underline_to_camel) + .columnNaming(NamingStrategy.underline_to_camel) + .idType(IdType.AUTO); + } + + private static Consumer getStrategyConfigConsumer(List tableNames) { + return strategyConfigBuilder -> strategyConfigBuilder + .enableCapitalMode() + .enableSkipView() + .disableSqlFilter() + .addInclude(tableNames) + .mapperBuilder() + .build(); + } + + private Consumer getPackageConfigConsumer() { + return packageConfigBuilder -> packageConfigBuilder + .parent(this.parentPackageName == null ? "cn.codegen" : this.parentPackageName) + .moduleName(this.parentPackageModuleName == null ? "moduleName" : this.parentPackageModuleName) + .entity("domain") + .service("service") + .mapper("mapper") + .serviceImpl("service.service") + .controller("rest") + .pathInfo(Collections.singletonMap(OutputFile.xml, (System.getProperty("os.name").toLowerCase().contains("win") ? "C:\\CodeGen\\resources\\mapper" : "/tmp/CodeGen/resources/mapper"))); + } + + private static Consumer getGlobalConfigConsumer() { + return globalConfigBuilder -> globalConfigBuilder + .enableSwagger() + .outputDir((System.getProperty("os.name").toLowerCase().contains("win") ? "C:\\CodeGen" : "/tmp/CodeGen")) + .author("codegen") + .commentDate("yyyy-MM-dd") + .dateType(DateType.TIME_PACK); + } + + private static Consumer getStrategyConfigConsumer() { + return strategyConfigBuilder -> strategyConfigBuilder + .mapperBuilder() + .formatMapperFileName("%sMapper") + .formatXmlFileName("%sMapper"); + } + + private static Consumer getDataSourceConfigConsumer() { + return builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { + int typeCode = metaInfo.getJdbcType().TYPE_CODE; + if (typeCode == Types.SMALLINT) { + return DbColumnType.INTEGER; + } + if (typeCode == Types.DATE) { + return DbColumnType.DATE; + } + if (typeCode == Types.TIME) { + return DbColumnType.DATE; + } + if (typeCode == Types.TIMESTAMP) { + return DbColumnType.DATE; + } + return typeRegistry.getColumnType(metaInfo); + }); + } +} \ No newline at end of file diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/util/MybatisHelper.java b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/util/MybatisHelper.java new file mode 100644 index 00000000..88079801 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/mybatis/util/MybatisHelper.java @@ -0,0 +1,239 @@ +package cn.odboy.mybatis.util; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.odboy.base.MyEntity; +import cn.odboy.exception.BadRequestException; +import cn.odboy.mybatis.constant.MpQuery; +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.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 查询条件创建工具 + */ +@Slf4j +public class MybatisHelper { + public static QueryWrapper build(Q query) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (query == null) { + return queryWrapper; + } + Class clazz = query.getClass(); + try { + List fields = getAllFields(clazz, new ArrayList<>()); + for (Field field : fields) { + if (!field.canAccess(clazz)) { + field.setAccessible(true); + MpQuery q = field.getAnnotation(MpQuery.class); + if (q != null) { + String propName = q.propName(); + String blurry = q.blurry(); + String attributeName = StrUtil.isBlank(propName) ? field.getName() : propName; + attributeName = humpToUnderline(attributeName); + Object fieldVal = field.get(query); + if (ObjectUtil.isNull(fieldVal) || "".equals(fieldVal)) { + continue; + } + if (ObjectUtil.isNotEmpty(blurry)) { + handleBlurryQuery(queryWrapper, blurry, fieldVal); + continue; + } + handleWrapper(q, queryWrapper, attributeName, fieldVal); + } + field.setAccessible(false); + } + } + } catch (Exception e) { + log.error("组装SQL失败", e); + } + return queryWrapper; + } + + private static void handleWrapper(MpQuery q, QueryWrapper queryWrapper, String attributeName, Object fieldVal) { + switch (q.type()) { + case EQUAL: + queryWrapper.eq(attributeName, fieldVal); + break; + case GREATER_THAN: + queryWrapper.ge(attributeName, fieldVal); + break; + case LESS_THAN: + queryWrapper.le(attributeName, fieldVal); + break; + case LESS_THAN_NQ: + queryWrapper.lt(attributeName, fieldVal); + break; + case INNER_LIKE: + queryWrapper.like(attributeName, fieldVal); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(attributeName, fieldVal); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(attributeName, fieldVal); + break; + case IN: + handleInQuery(queryWrapper, attributeName, fieldVal); + break; + case NOT_IN: + handleNotInQuery(queryWrapper, attributeName, fieldVal); + break; + case NOT_EQUAL: + queryWrapper.ne(attributeName, fieldVal); + break; + case NOT_NULL: + queryWrapper.isNotNull(attributeName); + break; + case IS_NULL: + queryWrapper.isNull(attributeName); + break; + case BETWEEN: + handleBetweenQuery(queryWrapper, fieldVal, attributeName); + break; + default: + break; + } + } + + private static void handleBetweenQuery(QueryWrapper queryWrapper, Object fieldVal, String finalAttributeName) { + if (fieldVal instanceof List) { + List between = new ArrayList<>((List) fieldVal); + if (CollectionUtil.isNotEmpty(between)) { + if (between.size() >= 2) { + queryWrapper.between(finalAttributeName, between.get(0), between.get(1)); + } else { + throw new BadRequestException("BETWEEN类型的对象列表长度必须 >= 2"); + } + } + } else { + throw new BadRequestException("BETWEEN类型的对象必须是一个List子集合"); + } + } + + private static void handleNotInQuery(QueryWrapper queryWrapper, String finalAttributeName, Object fieldVal) { + Collection wrapNotInVal = (Collection) fieldVal; + if (CollectionUtil.isNotEmpty(wrapNotInVal)) { + Optional anyValOptional = wrapNotInVal.stream().findAny(); + if (anyValOptional.isPresent()) { + Object o = anyValOptional.get(); + if (o instanceof Long) { + queryWrapper.notIn(finalAttributeName, fieldVal); + } else if (o instanceof Integer) { + queryWrapper.notIn(finalAttributeName, fieldVal); + } else { + throw new BadRequestException("NOT_IN类型的对象属性值必须是Long/Integer类型集合"); + } + } + } + } + + /** + * IN查询 + * + * @param queryWrapper / + * @param fieldVal / + * @param finalAttributeName / + * @param / + */ + private static void handleInQuery(QueryWrapper queryWrapper, String finalAttributeName, Object fieldVal) { + Collection wrapInVal = (Collection) fieldVal; + if (CollectionUtil.isNotEmpty(wrapInVal)) { + Optional anyValOptional = wrapInVal.stream().findAny(); + if (anyValOptional.isPresent()) { + Object o = anyValOptional.get(); + if (o instanceof Long) { + queryWrapper.in(finalAttributeName, fieldVal); + } else if (o instanceof Integer) { + queryWrapper.in(finalAttributeName, fieldVal); + } else { + throw new BadRequestException("IN类型的对象属性值必须是Long/Integer类型集合"); + } + } + } + } + + /** + * 模糊多字段 + * + * @param queryWrapper / + * @param blurry / + * @param fieldVal / + * @param / + */ + private static void handleBlurryQuery(QueryWrapper queryWrapper, String blurry, Object fieldVal) { + List blurryList = Arrays.stream(blurry.split(",")).filter(StrUtil::isNotBlank).distinct().collect(Collectors.toList()); + queryWrapper.and(wrapper -> { + for (String blurryItem : blurryList) { + String column = humpToUnderline(blurryItem); + wrapper.or(); + wrapper.like(column, fieldVal.toString()); + } + }); + } + + public static List getAllFields(Class clazz, List fields) { + if (clazz != null) { + fields.addAll(Arrays.asList(clazz.getDeclaredFields())); + getAllFields(clazz.getSuperclass(), fields); + } + return fields; + } + + /*** + * 驼峰命名转为下划线命名 + * + * @param para + * 驼峰命名的字符串 + */ + private static String humpToUnderline(String para) { + return StrUtil.toUnderlineCase(para); + } + + @TableName("test_domain") + private static class TestDomain { + @NotNull(groups = MyEntity.Update.class) + @TableId(value = "user_id", type = IdType.AUTO) + private Long id; + @TableField(value = "dept_id") + private Long deptId; + @NotBlank + private String username; + @NotBlank + private String nickName; + } + + public static void main(String[] args) { + QueryWrapper query = new QueryWrapper(); + //query.or(); + query.or(wrapper -> wrapper.eq("username", 1).or().eq("nickname", 2)); + //query.like("a",1); + //query.or(); + //query.like("b",2); + //query.and(wrapper->wrapper.eq("c",1)); + query.eq("id", 1); + query.orderByDesc("id"); +// query.apply("left join student t1 on t1.id = t1.id"); +// query.last("left join student t1 on t1.id = t1.id"); + System.err.println("getSqlSelect================================="); + System.err.println(query.getSqlSelect()); + System.err.println("getSqlSegment================================="); + System.err.println(query.getSqlSegment()); + System.err.println("getSqlComment================================="); + System.err.println(query.getSqlComment()); + System.err.println("getSqlSet================================="); + System.err.println(query.getSqlSet()); + System.err.println("getTargetSql================================="); + System.err.println(query.getTargetSql()); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/properties/FileProperties.java b/cutejava/cutejava-common/src/main/java/cn/odboy/properties/FileProperties.java similarity index 96% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/properties/FileProperties.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/properties/FileProperties.java index ab2f2ef4..0ef92428 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/properties/FileProperties.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/properties/FileProperties.java @@ -1,4 +1,4 @@ -package cn.odboy.config.properties; +package cn.odboy.properties; import cn.odboy.constant.SystemConstant; import lombok.Data; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/properties/RsaProperties.java b/cutejava/cutejava-common/src/main/java/cn/odboy/properties/RsaProperties.java similarity index 90% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/properties/RsaProperties.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/properties/RsaProperties.java index 0e1c142c..c4e86e17 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/properties/RsaProperties.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/properties/RsaProperties.java @@ -1,4 +1,4 @@ -package cn.odboy.config.properties; +package cn.odboy.properties; import lombok.Data; import org.springframework.beans.factory.annotation.Value; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/RedisConfiguration.java b/cutejava/cutejava-common/src/main/java/cn/odboy/redis/RedisConfiguration.java similarity index 96% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/RedisConfiguration.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/redis/RedisConfiguration.java index f3cfd1f9..d97a2e8c 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/RedisConfiguration.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/redis/RedisConfiguration.java @@ -1,4 +1,4 @@ -package cn.odboy.config; +package cn.odboy.redis; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONFactory; @@ -39,7 +39,10 @@ public class RedisConfiguration extends CachingConfigurerSupport { /** * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全) */ - private static final String[] WHITELIST_STR = {"cn.odboy"}; + private static final String[] WHITELIST_STR = { + "org.springframework", + "cn.odboy.model", + }; /** * 设置 redis 数据默认过期时间,默认2小时 @@ -158,6 +161,9 @@ public class RedisConfiguration extends CachingConfigurerSupport { this.clazz = clazz; } + /** + * 序列化 + */ @Override public byte[] serialize(T t) throws SerializationException { if (t == null) { @@ -166,6 +172,9 @@ public class RedisConfiguration extends CachingConfigurerSupport { return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(StandardCharsets.UTF_8); } + /** + * 反序列化 + */ @Override public T deserialize(byte[] bytes) throws SerializationException { if (bytes == null || bytes.length == 0) { diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/RedissonConfiguration.java b/cutejava/cutejava-common/src/main/java/cn/odboy/redis/RedissonConfiguration.java similarity index 98% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/RedissonConfiguration.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/redis/RedissonConfiguration.java index c3bfbacc..006b8c17 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/RedissonConfiguration.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/redis/RedissonConfiguration.java @@ -1,4 +1,4 @@ -package cn.odboy.config; +package cn.odboy.redis; import cn.hutool.core.util.StrUtil; import lombok.Data; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/ConfigurerAdapter.java b/cutejava/cutejava-common/src/main/java/cn/odboy/server/ConfigurerAdapter.java similarity index 81% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/ConfigurerAdapter.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/server/ConfigurerAdapter.java index 983535e2..a4970d88 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/ConfigurerAdapter.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/server/ConfigurerAdapter.java @@ -1,6 +1,6 @@ -package cn.odboy.config.webConfig; +package cn.odboy.server; -import cn.odboy.config.properties.FileProperties; +import cn.odboy.properties.FileProperties; import com.alibaba.fastjson2.JSONWriter; import com.alibaba.fastjson2.support.config.FastJsonConfig; import com.alibaba.fastjson2.support.spring.http.converter.FastJsonHttpMessageConverter; @@ -67,7 +67,18 @@ public class ConfigurerAdapter implements WebMvcConfigurer { config.setDateFormat("yyyy-MM-dd HH:mm:ss"); // 开启引用检测,枚举支持 config.setWriterFeatures( + // 是否输出值为null的字段 + // SerializerFeature.WriteMapNullValue, + // 字段如果为null,输出为false,而非null +// JSONWriter.Feature.WriteNullBooleanAsFalse, + // 字段如果为null,输出为[],而非null +// JSONWriter.Feature.WriteNullListAsEmpty, + // 字符类型字段如果为null,输出为"",而非null +// JSONWriter.Feature.WriteNullStringAsEmpty, + // 太具体的数值会直接影响逻辑本身,所以不要这个 + // SerializerFeature.WriteNullNumberAsZero, JSONWriter.Feature.WriteEnumUsingToString, +// SerializerFeature.DisableCircularReferenceDetect JSONWriter.Feature.ReferenceDetection ); fastJsonConverter.setFastJsonConfig(config); diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/MultipartConfig.java b/cutejava/cutejava-common/src/main/java/cn/odboy/server/MultipartConfig.java similarity index 62% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/MultipartConfig.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/server/MultipartConfig.java index 869c4802..43b2a7e0 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/MultipartConfig.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/server/MultipartConfig.java @@ -1,5 +1,7 @@ -package cn.odboy.config.webConfig; +package cn.odboy.server; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -8,20 +10,23 @@ import javax.servlet.MultipartConfigElement; import java.io.File; +@Slf4j @Configuration public class MultipartConfig { + @Value("${spring.application.name}") + private String name; /** * 文件上传临时路径 */ @Bean - MultipartConfigElement multipartConfigElement() { + public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); - String location = System.getProperty("user.home") + "/.eladmin/file/tmp"; + String location = System.getProperty("user.home") + "/." + name + "/tmp"; File tmpFile = new File(location); if (!tmpFile.exists()) { if (!tmpFile.mkdirs()) { - System.out.println("create was not successful."); + log.error("创建临时文件失败"); } } factory.setLocation(location); diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/SwaggerConfig.java b/cutejava/cutejava-common/src/main/java/cn/odboy/server/SwaggerConfig.java similarity index 98% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/SwaggerConfig.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/server/SwaggerConfig.java index 95de6d15..bb670901 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/SwaggerConfig.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/server/SwaggerConfig.java @@ -1,4 +1,4 @@ -package cn.odboy.config.webConfig; +package cn.odboy.server; import cn.odboy.util.AnonTagUtil; import lombok.RequiredArgsConstructor; @@ -64,8 +64,8 @@ public class SwaggerConfig { private ApiInfo apiInfo() { return new ApiInfoBuilder() .description("一个简单且易上手的 Spring boot 后台管理框架") - .title("ELADMIN 接口文档") - .version("1.6") + .title("CuteJava 接口文档") + .version("1.3.0") .build(); } diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/AsyncExecutor.java b/cutejava/cutejava-common/src/main/java/cn/odboy/thread/AsyncExecutor.java similarity index 69% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/AsyncExecutor.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/thread/AsyncExecutor.java index 3f8db43f..6e4f8994 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/AsyncExecutor.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/thread/AsyncExecutor.java @@ -1,5 +1,6 @@ -package cn.odboy.config; +package cn.odboy.thread; +import com.alibaba.ttl.TtlRunnable; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -53,7 +54,7 @@ public class AsyncExecutor implements AsyncConfigurer { @Override public Executor getAsyncExecutor() { // 自定义工厂 - ThreadFactory factory = r -> new Thread(r, "el-async-" + new AtomicInteger(1).getAndIncrement()); + ThreadFactory factory = r -> new Thread(r, "default-async-" + new AtomicInteger(1).getAndIncrement()); // 自定义线程池 return new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveSeconds, TimeUnit.SECONDS, new ArrayBlockingQueue<>(queueCapacity), factory, @@ -63,18 +64,23 @@ public class AsyncExecutor implements AsyncConfigurer { /** * 自定义线程池,用法,注入到类中使用 * private ThreadPoolTaskExecutor taskExecutor; - * - * @return ThreadPoolTaskExecutor */ @Bean("taskAsync") public ThreadPoolTaskExecutor taskAsync() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setCorePoolSize(2); - executor.setMaxPoolSize(4); - executor.setQueueCapacity(20); - executor.setKeepAliveSeconds(60); - executor.setThreadNamePrefix("el-task-"); - executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.setCorePoolSize(AsyncExecutor.corePoolSize); + executor.setMaxPoolSize(AsyncExecutor.maxPoolSize); + executor.setQueueCapacity(AsyncExecutor.queueCapacity); + executor.setThreadNamePrefix("task-async-"); + executor.setKeepAliveSeconds(AsyncExecutor.keepAliveSeconds); + // DiscardOldestPolicy,抛弃最早的任务,将新任务加入队列。 + // AbortPolicy,拒绝执行新任务,并抛出异常。 + // CallerRunsPolicy,交由调用者线程执行新任务,如果调用者线程已关闭,则抛弃任务。 + // DiscardPolicy,直接抛弃新任务。 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy()); + // 设置包装器 + executor.setTaskDecorator(TtlRunnable::get); + executor.initialize(); return executor; } } diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/AnonTagUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/AnonTagUtil.java index fd426b61..4fd9cafa 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/AnonTagUtil.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/AnonTagUtil.java @@ -1,6 +1,6 @@ package cn.odboy.util; -import cn.odboy.annotation.rest.AnonymousAccess; +import cn.odboy.annotation.AnonymousAccess; import cn.odboy.constant.RequestMethodEnum; import org.springframework.context.ApplicationContext; import org.springframework.web.bind.annotation.RequestMethod; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/Base64SecretUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/Base64SecretUtil.java new file mode 100644 index 00000000..0b1abcc4 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/Base64SecretUtil.java @@ -0,0 +1,49 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.util; + +import cn.hutool.core.codec.Base64Encoder; +import cn.hutool.core.util.IdUtil; + +import java.nio.charset.StandardCharsets; + +/** + * 加密令牌生成工具 + * + * @author odboy + * @date 2022-11-16 + */ +public class Base64SecretUtil { + private Base64SecretUtil() { + } + + public static String build() { + // 128位uuid + return Base64Encoder.encode(getLongUuid(4).getBytes(StandardCharsets.UTF_8)); + } + + public static String getLongUuid(int bit) { + StringBuilder result = new StringBuilder(); + for (int i = 0; i < bit; i++) { + result.append(IdUtil.simpleUUID()); + } + return result.toString(); + } + + public static void main(String[] args) { + System.out.println(build()); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/CollUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/CollUtil.java new file mode 100644 index 00000000..eb3948da --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/CollUtil.java @@ -0,0 +1,279 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.util; + +import cn.odboy.base.MyMetaOption; +import com.alibaba.fastjson2.JSON; +import com.google.common.base.Joiner; +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * 集合工具 + * + * @author odboy + * @date 2022-11-09 + */ +public class CollUtil extends cn.hutool.core.collection.CollUtil { + /** + * 连接器 + */ + private static final Joiner JOINER = Joiner.on(",").skipNulls(); + /** + * 分割器 + */ + private static final Splitter SPLITTER = Splitter.on(",").trimResults().omitEmptyStrings(); + + public static String join(Object[] parts) { + return JOINER.join(parts); + } + + public static String join(Iterable parts) { + return JOINER.join(parts); + } + + public static String join(Iterator parts) { + return JOINER.join(parts); + } + + public static List splitToList(String parts) { + return SPLITTER.splitToList(parts); + } + + /** + * 分几份 + * + * @param parts / + * @param size / + * @param / + * @return / + */ + public static List> splitToSize(List parts, int size) { + return Lists.partition(parts, size); + } + + /** + * 一份几个 + * + * @param parts / + * @param groupNum / + * @param / + * @return / + */ + public static List> splitToSegment(List parts, int groupNum) { + List> result = new ArrayList<>(1); + int i = 0; + for (; i < parts.size() / groupNum; i++) { + result.add(parts.subList(i * groupNum, (i + 1) * groupNum)); + } + if (parts.size() % groupNum != 0) { + result.add(parts.subList(i * groupNum, i * groupNum + parts.size() % groupNum)); + } + return result; + } + + private static Predicate distinctPredicate(Function keyMapper) { + Map map = new HashMap<>(); + return (t) -> null == map.putIfAbsent(keyMapper.apply(t), true); + } + + /** + * 流根据对象属性去重 + *

+ * 使用方式: list = CollUtil.streamDistinct(list, Object::getXXX) + */ + public static List streamDistinct(List data, Function keyMapper) { + return data.stream().filter(distinctPredicate(keyMapper)).collect(Collectors.toList()); + } + + /** + * 流根据对象属性自然排序 + *

+ * 使用方式: list = CollUtil.streamAscSort(list, Object::getXXX) + * + * @param data / + * @param keyExtractor / + * @param / + * @param / + * @return / + */ + public static > List streamAscSort(List data, Function keyExtractor) { + return data.stream().sorted(Comparator.comparing(keyExtractor)).collect(Collectors.toList()); + } + + /** + * 流根据对象属性倒转排序 + *

+ * 使用方式: list = CollUtil.streamDescSort(list, Object::getXXX) + * + * @param data / + * @param keyExtractor / + * @param / + * @param / + * @return / + */ + public static > List streamDescSort(List data, Function keyExtractor) { + return data.stream().sorted(Comparator.comparing(keyExtractor).reversed()).collect(Collectors.toList()); + } + + /** + * 流拆分对象为键值对 + *

+ * 使用方式: map = CollUtil.streamToMap(list, Object::getXXKey, Object::getXXValue) + * + * @param data / + * @param keyMapper / + * @param valueMapper / + * @param / + * @param / + * @param / + * @return / + */ + public static Map streamToMap(List data, Function keyMapper, Function valueMapper) { + // 根据key去重再并流 + return streamDistinct(data, keyMapper).stream().collect(Collectors.toMap(keyMapper, valueMapper)); + } + + /** + * 流对List求和 + *

+ * 使用方式: total = CollUtil.streamDoubleAdd(doubleList) + * + * @param data / + * @return / + */ + public static Double streamDoubleAdd(List data) { + if (CollUtil.isNotEmpty(data)) { + return data.stream().filter(Objects::nonNull).reduce(Double::sum).orElse(0.0); + } + return 0.0; + } + + /** + * 流对List求和 + *

+ * 使用方式: total = CollUtil.streamBigDecimalAdd(doubleList) + * + * @param data / + * @return / + */ + public static BigDecimal streamBigDecimalAdd(List data) { + if (CollUtil.isNotEmpty(data)) { + return data.stream().filter(Objects::nonNull).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + } + return BigDecimal.ZERO; + } + + /** + * 流对List中的某一BigDecimal属性求和 + *

+ * 使用方式: total = CollUtil.streamBigDecimalAdd(list, XXX) + * + * @param data / + * @return / + */ + public static BigDecimal streamBigDecimalAdd(List data, String elementName) { + return data.stream().filter(Objects::nonNull).map(m -> { + // 反射, 取集合中各元素的某属性 + BigDecimal that; + try { + Field field = m.getClass().getDeclaredField(elementName); + field.setAccessible(true); + that = (BigDecimal) field.get(m); + } catch (Exception e) { + // 忽略异常 + that = BigDecimal.ZERO; + } + return that; + }).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + } + + /** + * 流对List取最大值 + *

+ * 使用方式: max = CollUtil.streamBigDecimalMax(list) + * + * @param data / + * @return / + */ + public static BigDecimal streamBigDecimalMax(List data) { + return data.stream() + .filter(Objects::nonNull) + .reduce(BigDecimal::max) + .orElse(null); + } + + /** + * 流对List取最小值 + *

+ * 使用方式: max = CollUtil.streamBigDecimalMin(list) + * + * @param data / + * @return / + */ + public static BigDecimal streamBigDecimalMin(List data) { + return data.stream() + .filter(Objects::nonNull) + .reduce(BigDecimal::min) + .orElse(null); + } + + /** + * 流对List取平均值 + *

+ * 使用方式: avg = CollUtil.streamBigDecimalAvg(list) + * + * @param data / + * @return / + */ + public static BigDecimal streamBigDecimalAvg(List data) { + return data.stream() + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(BigDecimal.valueOf(data.size()), 6, RoundingMode.FLOOR); + } + + public static void main(String[] args) { + List testData = new ArrayList<>(); + MyMetaOption selectOption1 = MyMetaOption.builder().label("苹果").value("apple").build(); + MyMetaOption selectOption2 = MyMetaOption.builder().label("苹果").value("apple").build(); + MyMetaOption selectOption3 = MyMetaOption.builder().label("香蕉").value("banana").build(); + MyMetaOption selectOption4 = MyMetaOption.builder().label("猫").value("cat").build(); + testData.add(selectOption1); + testData.add(selectOption2); + testData.add(selectOption3); + testData.add(selectOption4); + List selectOptions1 = CollUtil.streamAscSort(testData, MyMetaOption::getValue); + System.out.println(JSON.toJSONString(selectOptions1)); + List selectOptions2 = CollUtil.streamDescSort(testData, MyMetaOption::getValue); + System.out.println(JSON.toJSONString(selectOptions2)); + List selectOptions3 = CollUtil.streamDistinct(testData, MyMetaOption::getValue); + System.out.println(JSON.toJSONString(selectOptions3)); + Map selectMap1 = CollUtil.streamToMap(testData, MyMetaOption::getValue, MyMetaOption::getLabel); + System.out.println(JSON.toJSONString(selectMap1)); + // 这只是一个示范 + BigDecimal total1 = CollUtil.streamBigDecimalAdd(testData, "value"); + System.out.println(total1); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/JsonUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/JsonUtil.java new file mode 100644 index 00000000..8c5d40ec --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/JsonUtil.java @@ -0,0 +1,47 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.util; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.TypeReference; + +import java.util.List; +import java.util.Map; + +/** + * Json工具 + * + * @author odboy + * @date 2024-10-01 + */ +public class JsonUtil { + public static Map toMap(String jsonStr, Class kClass, Class vClass) { + return JSON.parseObject(jsonStr, new TypeReference>() { + }); + } + + public static List toList(String jsonStr, Class vClass) { + return JSON.parseObject(jsonStr, new TypeReference>() { + }); + } + + public static void main(String[] args) { + String mapStr = "{\"key1\":\"value1\", \"key2\":\"value2\"}"; + System.err.println(JsonUtil.toMap(mapStr, String.class, String.class)); + String listStr = "[\"value1\", \"value2\"]"; + System.err.println(JsonUtil.toList(listStr, String.class)); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/ListUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/ListUtil.java new file mode 100644 index 00000000..29afa2af --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/ListUtil.java @@ -0,0 +1,68 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.util; + +import cn.hutool.core.date.DateTime; +import cn.odboy.base.MyEntity; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * List 工具 + * + * @author odboy + * @date 2024-10-01 + */ +public class ListUtil { + /** + * 根据对象T的属性去重 + * + * @param items 对象T集合 + * @param classifier 对象T属性表达式, 比如: User::getName + */ + public static List distinctByArgs(List items, Function classifier) { + return items.stream() + .collect(Collectors.groupingBy(classifier)) + .values().stream() + .map(monitorItem -> monitorItem.iterator().next()) + .collect(Collectors.toList()); + } + + /** + * list转map,保留新值 -> Map userMap = items.stream().collect(Collectors.toMap(User::getName, user -> user))
+ * list转map,保留旧值 -> Map userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing)); + */ + public static void main(String[] args) { + List entities = new ArrayList<>(); + for (int i = 0; i < 50; i++) { + MyEntity entity = new MyEntity(); + if (i % 2 == 0) { + entity.setCreateBy("odboy"); + } else { + entity.setCreateBy("admin"); + } + entity.setUpdateBy("admin"); + entity.setCreateTime(DateTime.now().toTimestamp()); + entity.setUpdateTime(DateTime.now().toTimestamp()); + entities.add(entity); + } + List entities1 = ListUtil.distinctByArgs(entities, MyEntity::getCreateBy); + System.err.println(entities1); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/PageUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/PageUtil.java index 3630533f..4e10501a 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/PageUtil.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/PageUtil.java @@ -1,5 +1,6 @@ package cn.odboy.util; +import cn.odboy.base.PageResult; import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.Collections; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/ScriptUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/ScriptUtil.java new file mode 100644 index 00000000..5352fe0a --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/ScriptUtil.java @@ -0,0 +1,105 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.util; + +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.script.ScriptRuntimeException; +import org.springframework.stereotype.Component; + +import javax.script.*; +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * 脚本工具 + * + * @author odboy + * @date 2023-12-05 + */ +@Component +public class ScriptUtil { + private static final String FUNCTION_TAG = "function"; + private final ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); + + /** + * @param script 函数表达式 + * @return 返回值 + */ + public Object evalObj(String script, Object compareObj) { + try { + if (script.contains(FUNCTION_TAG)) { + throw new RuntimeException("script格式异常"); + } + // 构建一个不同的脚本上下文 + ScriptContext newContext = new SimpleScriptContext(); + if (compareObj != null) { + Field[] fields = ReflectUtil.getFields(compareObj.getClass()); + Map filedNameValueMap = new HashMap<>(); + Arrays.stream(fields).parallel().forEach(f -> filedNameValueMap.put(f.getName(), ReflectUtil.getFieldValue(compareObj, f))); + Set> entries = filedNameValueMap.entrySet(); + long count = entries.stream().filter(f -> f.getValue() != null).count(); + if (count == 0) { + throw new RuntimeException("比较对象中没有有效值"); + } + Bindings engineScope = engine.createBindings(); + entries.forEach(f -> { + // 在新的执行引擎作用域中添加与上面相同名称的变量 + engineScope.put(f.getKey(), f.getValue()); + }); + newContext.setBindings(engineScope, ScriptContext.ENGINE_SCOPE); + } + if (script.contains(FUNCTION_TAG)) { + // 由ScriptEngines实现的接口, 其方法允许调用以前已执行的脚本中的过程 + Invocable inv = (Invocable) engine; + // 调用全局函数, 并传入参数 + inv.invokeFunction("hello", "测试"); + } + // 执行脚本, 注意这里指定新的执行作用域上下文 + return engine.eval(script, newContext); + } catch (ScriptException e) { + throw new ScriptRuntimeException(e); + } catch (NoSuchMethodException e) { + throw new ScriptRuntimeException(e); + } + } + + /** + * @param script 函数表达式, 例如: function hello(name) { print('Hello, ' + name); } + * @param functionName 函数名称, 例如: "hello" + * @param args 函数参数, 例如: "小明" + * @return 返回值 + */ + public Object evalFunction(String script, String functionName, Object... args) { + if (!script.contains(FUNCTION_TAG)) { + throw new RuntimeException("script格式异常"); + } + try { + // 执行脚本 + engine.eval(script); + // 由ScriptEngines实现的接口,其方法允许调用以前已执行的脚本中的过程。 + Invocable inv = (Invocable) engine; + // 调用全局函数,并传入参数 + return inv.invokeFunction(functionName, args); + } catch (ScriptException e) { + throw new ScriptRuntimeException(e); + } catch (NoSuchMethodException e) { + throw new ScriptRuntimeException(e); + } + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/SecurityUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/SecurityUtil.java index ab08791c..85f66113 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/SecurityUtil.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/SecurityUtil.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.jwt.JWT; import cn.hutool.jwt.JWTUtil; import cn.odboy.constant.DataScopeEnum; +import cn.odboy.context.SpringBeanHolder; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/SqlUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/SqlUtil.java new file mode 100644 index 00000000..0157adda --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/SqlUtil.java @@ -0,0 +1,187 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.util; + +import cn.odboy.mybatis.constant.DataTypeEnum; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.google.common.collect.Lists; +import com.zaxxer.hikari.HikariDataSource; +import lombok.extern.slf4j.Slf4j; + +import javax.sql.DataSource; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; + +/** + * @author / + */ +@Slf4j +public class SqlUtil { + /** + * 获取数据源 + * + * @param jdbcUrl / + * @param userName / + * @param password / + * @return DataSource + */ + private static DataSource getDataSource(String jdbcUrl, String userName, String password) { + HikariDataSource druidDataSource = new HikariDataSource(); + String className; + try { + className = DriverManager.getDriver(jdbcUrl.trim()).getClass().getName(); + } catch (SQLException e) { + throw new RuntimeException("Get class name error: =" + jdbcUrl); + } + if (StringUtils.isEmpty(className)) { + DataTypeEnum dataTypeEnum = DataTypeEnum.urlOf(jdbcUrl); + if (null == dataTypeEnum) { + throw new RuntimeException("Not supported data type: jdbcUrl=" + jdbcUrl); + } + druidDataSource.setDriverClassName(dataTypeEnum.getDriver()); + } else { + druidDataSource.setDriverClassName(className); + } + druidDataSource.setJdbcUrl(jdbcUrl); + druidDataSource.setUsername(userName); + druidDataSource.setPassword(password); + druidDataSource.setConnectionTimeout(3000); + return druidDataSource; + } + + private static Connection getConnection(String jdbcUrl, String userName, String password) { + DataSource dataSource = getDataSource(jdbcUrl, userName, password); + Connection connection = null; + try { + connection = dataSource.getConnection(); + } catch (Exception ignored) { + } + try { + int timeOut = 5; + if (null == connection || connection.isClosed() || !connection.isValid(timeOut)) { + log.info("connection is closed or invalid, retry get connection!"); + connection = dataSource.getConnection(); + } + } catch (Exception e) { + log.error("create connection error, jdbcUrl: {}", jdbcUrl); + throw new RuntimeException("create connection error, jdbcUrl: " + jdbcUrl); + } finally { + CloseUtil.close(connection); + } + return connection; + } + + private static void releaseConnection(Connection connection) { + if (null != connection) { + try { + connection.close(); + } catch (Exception e) { + log.error(e.getMessage(), e); + log.error("connection close error:" + e.getMessage()); + } + } + } + + public static boolean testConnection(String jdbcUrl, String userName, String password) { + Connection connection = null; + try { + connection = getConnection(jdbcUrl, userName, password); + if (null != connection) { + return true; + } + } catch (Exception e) { + log.info("Get connection failed:" + e.getMessage()); + } finally { + releaseConnection(connection); + } + return false; + } + + public static String executeFile(String jdbcUrl, String userName, String password, File sqlFile) { + Connection connection = getConnection(jdbcUrl, userName, password); + try { + batchExecute(connection, readSqlList(sqlFile)); + } catch (Exception e) { + log.error("sql脚本执行发生异常:{}", e.getMessage()); + return e.getMessage(); + } finally { + releaseConnection(connection); + } + return "success"; + } + + /** + * 批量执行sql + * + * @param connection / + * @param sqlList / + */ + public static void batchExecute(Connection connection, List sqlList) { + Statement st = null; + try { + st = connection.createStatement(); + for (String sql : sqlList) { + if (sql.endsWith(";")) { + sql = sql.substring(0, sql.length() - 1); + } + st.addBatch(sql); + } + st.executeBatch(); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } finally { + CloseUtil.close(st); + } + } + + /** + * 将文件中的sql语句以;为单位读取到列表中 + * + * @param sqlFile / + * @return / + * @throws Exception e + */ + private static List readSqlList(File sqlFile) throws Exception { + List sqlList = Lists.newArrayList(); + StringBuilder sb = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader( + Files.newInputStream(sqlFile.toPath()), StandardCharsets.UTF_8))) { + String tmp; + while ((tmp = reader.readLine()) != null) { + log.info("line:{}", tmp); + if (tmp.endsWith(";")) { + sb.append(tmp); + sqlList.add(sb.toString()); + sb.delete(0, sb.length()); + } else { + sb.append(tmp); + } + } + if (!"".endsWith(sb.toString().trim())) { + sqlList.add(sb.toString()); + } + } + return sqlList; + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/StringUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/StringUtil.java index cbaa23fe..273017cc 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/util/StringUtil.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/StringUtil.java @@ -2,6 +2,7 @@ package cn.odboy.util; import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgentUtil; +import cn.odboy.context.SpringBeanHolder; import lombok.extern.slf4j.Slf4j; import net.dreamlu.mica.ip2region.core.Ip2regionSearcher; import net.dreamlu.mica.ip2region.core.IpInfo; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/util/ValidationUtil.java b/cutejava/cutejava-common/src/main/java/cn/odboy/util/ValidationUtil.java new file mode 100644 index 00000000..d1d9a6f7 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/util/ValidationUtil.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021-2025 Tian Jun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.util; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.groups.Default; +import java.util.Set; + +/** + * Bean验证工具 + * + * @author odboy + * @date 2025-01-15 + */ +public class ValidationUtil { + private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator(); + + public static void validate(T object) { + Set> violations = VALIDATOR.validate(object, Default.class); + if (!violations.isEmpty()) { + StringBuilder sb = new StringBuilder(); + for (ConstraintViolation violation : violations) { + sb.append(violation.getMessage()).append(", "); + } + throw new IllegalArgumentException(sb.toString()); + } + } +} \ No newline at end of file diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/WebSocketConfig.java b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketConfig.java similarity index 91% rename from cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/WebSocketConfig.java rename to cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketConfig.java index 59725e49..d4e7d273 100644 --- a/cutejava/cutejava-common/src/main/java/cn/odboy/config/webConfig/WebSocketConfig.java +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketConfig.java @@ -1,4 +1,4 @@ -package cn.odboy.config.webConfig; +package cn.odboy.websocket; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketMsg.java b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketMsg.java new file mode 100644 index 00000000..fc640ed5 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketMsg.java @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.websocket; + +import lombok.Data; + +/** + * @author ZhangHouYing + * @date 2019-08-10 9:55 + */ +@Data +public class WebSocketMsg { + private String msg; + private WebSocketMsgTypeEnum msgType; + + public WebSocketMsg(String msg, WebSocketMsgTypeEnum msgType) { + this.msg = msg; + this.msgType = msgType; + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketMsgTypeEnum.java b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketMsgTypeEnum.java new file mode 100644 index 00000000..6dd91c1f --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketMsgTypeEnum.java @@ -0,0 +1,39 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.websocket; + +/** + * @author ZhangHouYing + * @date 2019-08-10 9:56 + */ +public enum WebSocketMsgTypeEnum { + /** + * 连接 + */ + CONNECT, + /** + * 关闭 + */ + CLOSE, + /** + * 信息 + */ + INFO, + /** + * 错误 + */ + ERROR +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketServer.java b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketServer.java new file mode 100644 index 00000000..5732e619 --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketServer.java @@ -0,0 +1,144 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.websocket; + +import com.alibaba.fastjson2.JSON; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author ZhangHouYing + * @date 2019-08-10 15:46 + */ +@ServerEndpoint("/webSocket/{sid}") +@Slf4j +@Component +public class WebSocketServer { + /** + * concurrent包的线程安全Map,用来存放每个客户端对应的MyWebSocket对象。(分布式必出问题) + */ + private static final Map CLIENT = new ConcurrentHashMap<>(); + /** + * 与某个客户端的连接会话,需要通过它来给客户端发送数据 + */ + private Session session; + /** + * 接收sid + */ + private String sid = ""; + + /** + * 连接建立成功调用的方法 + */ + @OnOpen + public void onOpen(Session session, @PathParam("sid") String sid) { + this.session = session; + // 如果存在就先删除一个,防止重复推送消息 + CLIENT.remove(sid); + CLIENT.put(sid, this); + this.sid = sid; + } + + /** + * 连接关闭调用的方法 + */ + @OnClose + public void onClose() { + CLIENT.remove(this.sid); + } + + /** + * 收到客户端消息后调用的方法 + * + * @param message 客户端发送过来的消息 + */ + @OnMessage + public void onMessage(String message, Session session) { + log.info("收到来{}的信息:{}", sid, message); + sendToAll(message); + } + + /** + * 群发消息 + * + * @param message / + */ + private static void sendToAll(String message) { + // + for (WebSocketServer item : CLIENT.values()) { + try { + item.sendMessage(message); + } catch (IOException e) { + log.error("发送消息给{}失败", item.sid, e); + } + } + } + + @OnError + public void onError(Session session, Throwable error) { + log.error("发生错误"); + error.printStackTrace(); + } + + /** + * 实现服务器主动推送 + */ + private void sendMessage(String message) throws IOException { + this.session.getBasicRemote().sendText(message); + } + + /** + * 群发自定义消息 + */ + public static void sendInfo(WebSocketMsg webSocketMsg, @PathParam("sid") String sid) throws IOException { + String message = JSON.toJSONString(webSocketMsg); + log.info("推送消息到{},推送内容:{}", sid, message); + try { + if (sid == null) { + sendToAll(message); + } else { + CLIENT.get(sid).sendMessage(message); + } + } catch (IOException ignored) { + } + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + WebSocketServer that = (WebSocketServer) o; + return Objects.equals(session, that.session) && + Objects.equals(sid, that.sid); + } + + @Override + public int hashCode() { + return Objects.hash(session, sid); + } +} diff --git a/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketServerFactory.java b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketServerFactory.java new file mode 100644 index 00000000..c93f882b --- /dev/null +++ b/cutejava/cutejava-common/src/main/java/cn/odboy/websocket/WebSocketServerFactory.java @@ -0,0 +1,29 @@ +package cn.odboy.websocket; + +import io.undertow.server.DefaultByteBufferPool; +import io.undertow.websockets.jsr.WebSocketDeploymentInfo; +import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.stereotype.Component; + +/** + * 解决启动io.undertow.websockets.jsr UT026010: Buffer pool was not + * set on WebSocketDeploymentInfo, the default pool will be used的警告 + * + * @date 2024-06-07 + */ +@Component +public class WebSocketServerFactory implements WebServerFactoryCustomizer { + + @Override + public void customize(UndertowServletWebServerFactory factory) { + factory.addDeploymentInfoCustomizers(deploymentInfo -> { + WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo(); + webSocketDeploymentInfo.setBuffers( + new DefaultByteBufferPool(false, 1024) +// new DefaultByteBufferPool(false, 1024,20,4) + ); + deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo); + }); + } +} diff --git a/cutejava/cutejava-domain/pom.xml b/cutejava/cutejava-domain/pom.xml new file mode 100644 index 00000000..2790b210 --- /dev/null +++ b/cutejava/cutejava-domain/pom.xml @@ -0,0 +1,24 @@ + + + + cutejava + cn.odboy + 1.3.0 + + 4.0.0 + + 5.8.36 + + + cutejava-domain + 模型模块 + + + + cn.odboy + cutejava-common + 1.3.0 + + + \ No newline at end of file diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/domain/QuartzJob.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/domain/QuartzJob.java similarity index 91% rename from cutejava/cutejava-job/src/main/java/cn/odboy/domain/QuartzJob.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/domain/QuartzJob.java index e36f334a..53b8c838 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/domain/QuartzJob.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/domain/QuartzJob.java @@ -1,6 +1,6 @@ -package cn.odboy.domain; +package cn.odboy.model.job.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -16,11 +16,11 @@ import javax.validation.constraints.NotNull; @Getter @Setter @TableName("sys_quartz_job") -public class QuartzJob extends BaseEntity { +public class QuartzJob extends MyEntity { public static final String JOB_KEY = "JOB_KEY"; - @TableId(value = "job_id", type = IdType.AUTO) + @TableId(value = "id", type = IdType.AUTO) @NotNull(groups = {Update.class}) private Long id; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/domain/QuartzLog.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/domain/QuartzLog.java similarity index 95% rename from cutejava/cutejava-job/src/main/java/cn/odboy/domain/QuartzLog.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/domain/QuartzLog.java index 9c03e8d8..b70d09fe 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/domain/QuartzLog.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/domain/QuartzLog.java @@ -1,4 +1,4 @@ -package cn.odboy.domain; +package cn.odboy.model.job.domain; import cn.odboy.base.MyObject; import com.baomidou.mybatisplus.annotation.*; @@ -15,7 +15,7 @@ public class QuartzLog extends MyObject { @TableId(value = "log_id", type = IdType.AUTO) @ApiModelProperty(value = "ID", hidden = true) - private Long id; + private Long logId; @ApiModelProperty(value = "任务名称", hidden = true) private String jobName; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/domain/dto/QuartzJobQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/dto/QuartzJobQueryCriteria.java similarity index 94% rename from cutejava/cutejava-job/src/main/java/cn/odboy/domain/dto/QuartzJobQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/dto/QuartzJobQueryCriteria.java index 5c2f03db..61197890 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/domain/dto/QuartzJobQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/job/dto/QuartzJobQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.domain.dto; +package cn.odboy.model.job.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Dept.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Dept.java similarity index 95% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Dept.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Dept.java index 302adf8f..15d2aca6 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Dept.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Dept.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.system.domain; +package cn.odboy.model.system.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.alibaba.fastjson2.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; @@ -19,7 +19,7 @@ import java.util.Set; @Getter @Setter @TableName("sys_dept") -public class Dept extends BaseEntity { +public class Dept extends MyEntity { @NotNull(groups = Update.class) @TableId(value = "dept_id", type = IdType.AUTO) diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Dict.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Dict.java similarity index 86% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Dict.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Dict.java index 3dd8bb8d..92cc107c 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Dict.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Dict.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.system.domain; +package cn.odboy.model.system.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -15,7 +15,7 @@ import javax.validation.constraints.NotNull; @Getter @Setter @TableName("sys_dict") -public class Dict extends BaseEntity { +public class Dict extends MyEntity { @NotNull(groups = Update.class) @ApiModelProperty(value = "ID", hidden = true) diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/DictDetail.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/DictDetail.java similarity index 89% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/DictDetail.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/DictDetail.java index 1d3d783f..1369ed71 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/DictDetail.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/DictDetail.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.system.domain; +package cn.odboy.model.system.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull; @Getter @Setter @TableName("sys_dict_detail") -public class DictDetail extends BaseEntity { +public class DictDetail extends MyEntity { @NotNull(groups = Update.class) @ApiModelProperty(value = "ID", hidden = true) diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Job.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Job.java similarity index 87% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Job.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Job.java index be53b622..60f83146 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Job.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Job.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.system.domain; +package cn.odboy.model.system.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -16,10 +16,10 @@ import java.util.Objects; @Getter @Setter @TableName("sys_job") -public class Job extends BaseEntity { +public class Job extends MyEntity { @NotNull(groups = Update.class) - @TableId(value = "job_id", type = IdType.AUTO) + @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty(value = "ID", hidden = true) private Long id; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Menu.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Menu.java similarity index 95% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Menu.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Menu.java index 749278b3..e2d3cdf2 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Menu.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Menu.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.system.domain; +package cn.odboy.model.system.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.alibaba.fastjson2.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; @@ -18,7 +18,7 @@ import java.util.Set; @Getter @Setter @TableName("sys_menu") -public class Menu extends BaseEntity { +public class Menu extends MyEntity { @NotNull(groups = {Update.class}) @TableId(value = "menu_id", type = IdType.AUTO) diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Role.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Role.java similarity index 94% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Role.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Role.java index 944a9cc9..f188e9c7 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/Role.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/Role.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.system.domain; +package cn.odboy.model.system.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import cn.odboy.constant.DataScopeEnum; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; @@ -21,7 +21,7 @@ import java.util.Set; @Getter @Setter @TableName("sys_role") -public class Role extends BaseEntity { +public class Role extends MyEntity { @NotNull(groups = {Update.class}) @TableId(value = "role_id", type = IdType.AUTO) diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/User.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/User.java similarity index 95% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/User.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/User.java index cbe34576..1488dbd2 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/User.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/domain/User.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.system.domain; +package cn.odboy.model.system.domain; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -19,7 +19,7 @@ import java.util.Set; @Getter @Setter @TableName("sys_user") -public class User extends BaseEntity { +public class User extends MyEntity { @NotNull(groups = Update.class) @TableId(value = "user_id", type = IdType.AUTO) diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/AuthUserDto.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/AuthUserDto.java similarity index 91% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/AuthUserDto.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/AuthUserDto.java index 831a9fcc..8d5ea2d4 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/AuthUserDto.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/AuthUserDto.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.security.service.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/AuthorityDto.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/AuthorityDto.java similarity index 89% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/AuthorityDto.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/AuthorityDto.java index 9f00b994..cef1d448 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/AuthorityDto.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/AuthorityDto.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.security.service.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DeptQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DeptQueryCriteria.java similarity index 93% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DeptQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DeptQueryCriteria.java index 0844a187..18f0717c 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DeptQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DeptQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DictDetailQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DictDetailQueryCriteria.java similarity index 90% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DictDetailQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DictDetailQueryCriteria.java index 199a8d4b..0c8b6eaa 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DictDetailQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DictDetailQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DictQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DictQueryCriteria.java similarity index 89% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DictQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DictQueryCriteria.java index cb0904c8..e9270f73 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/DictQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/DictQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/JobQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/JobQueryCriteria.java similarity index 93% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/JobQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/JobQueryCriteria.java index 37698a53..8c5bc48f 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/JobQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/JobQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/JwtUserDto.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/JwtUserDto.java similarity index 94% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/JwtUserDto.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/JwtUserDto.java index e5fb46df..21e94d82 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/JwtUserDto.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/JwtUserDto.java @@ -1,6 +1,6 @@ -package cn.odboy.modules.security.service.dto; +package cn.odboy.model.system.dto; -import cn.odboy.modules.system.domain.User; +import cn.odboy.model.system.domain.User; import com.alibaba.fastjson2.annotation.JSONField; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuMetaVo.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuMetaVo.java similarity index 91% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuMetaVo.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuMetaVo.java index 784a1227..6f2b2316 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuMetaVo.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuMetaVo.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import cn.odboy.base.MyObject; import io.swagger.annotations.ApiModelProperty; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuQueryCriteria.java similarity index 91% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuQueryCriteria.java index dd0ea7f8..27e7001a 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuVo.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuVo.java similarity index 95% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuVo.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuVo.java index aa13c99d..c2d61b87 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/MenuVo.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/MenuVo.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import cn.odboy.base.MyObject; import io.swagger.annotations.ApiModelProperty; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/OnlineUserDto.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/OnlineUserDto.java similarity index 94% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/OnlineUserDto.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/OnlineUserDto.java index 2f5ef722..c0f46c66 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/dto/OnlineUserDto.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/OnlineUserDto.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.security.service.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/RoleQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/RoleQueryCriteria.java similarity index 93% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/RoleQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/RoleQueryCriteria.java index 8ac85a83..c6b50627 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/RoleQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/RoleQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/UserPassVo.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/UserPassVo.java similarity index 86% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/UserPassVo.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/UserPassVo.java index 60b845f9..418bc14a 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/UserPassVo.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/UserPassVo.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/UserQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/UserQueryCriteria.java similarity index 95% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/UserQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/UserQueryCriteria.java index 2b6ac6f3..f747284c 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/domain/dto/UserQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/system/dto/UserQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.system.domain.dto; +package cn.odboy.model.system.dto; import cn.odboy.base.MyObject; import io.swagger.annotations.ApiModelProperty; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/EmailConfig.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/EmailConfig.java similarity index 96% rename from cutejava/cutejava-tools/src/main/java/cn/odboy/domain/EmailConfig.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/EmailConfig.java index 256466a8..2cfd23ff 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/EmailConfig.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/EmailConfig.java @@ -1,4 +1,4 @@ -package cn.odboy.domain; +package cn.odboy.model.tools.domain; import cn.odboy.base.MyObject; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/LocalStorage.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/LocalStorage.java similarity index 92% rename from cutejava/cutejava-tools/src/main/java/cn/odboy/domain/LocalStorage.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/LocalStorage.java index 84bb28ea..51808c54 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/LocalStorage.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/LocalStorage.java @@ -1,8 +1,8 @@ -package cn.odboy.domain; +package cn.odboy.model.tools.domain; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; -import cn.odboy.base.BaseEntity; +import cn.odboy.base.MyEntity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -15,7 +15,7 @@ import lombok.Setter; @Setter @NoArgsConstructor @TableName("tool_local_storage") -public class LocalStorage extends BaseEntity { +public class LocalStorage extends MyEntity { @TableId(value = "storage_id", type = IdType.AUTO) @ApiModelProperty(value = "ID", hidden = true) diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/QiniuConfig.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/QiniuConfig.java similarity index 97% rename from cutejava/cutejava-tools/src/main/java/cn/odboy/domain/QiniuConfig.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/QiniuConfig.java index 20b5bfbd..787fd09f 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/QiniuConfig.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/QiniuConfig.java @@ -1,4 +1,4 @@ -package cn.odboy.domain; +package cn.odboy.model.tools.domain; import cn.odboy.base.MyObject; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/QiniuContent.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/QiniuContent.java similarity index 96% rename from cutejava/cutejava-tools/src/main/java/cn/odboy/domain/QiniuContent.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/QiniuContent.java index 7dc80a5b..bbe378ee 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/QiniuContent.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/domain/QiniuContent.java @@ -1,4 +1,4 @@ -package cn.odboy.domain; +package cn.odboy.model.tools.domain; import cn.odboy.base.MyObject; import com.baomidou.mybatisplus.annotation.*; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/EmailDto.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/EmailDto.java similarity index 94% rename from cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/EmailDto.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/EmailDto.java index d72c8b8d..d579c060 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/EmailDto.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/EmailDto.java @@ -1,4 +1,4 @@ -package cn.odboy.domain.dto; +package cn.odboy.model.tools.dto; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/LocalStorageQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/LocalStorageQueryCriteria.java similarity index 93% rename from cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/LocalStorageQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/LocalStorageQueryCriteria.java index 9ab71a56..5002987e 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/LocalStorageQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/LocalStorageQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.domain.dto; +package cn.odboy.model.tools.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/QiniuQueryCriteria.java b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/QiniuQueryCriteria.java similarity index 93% rename from cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/QiniuQueryCriteria.java rename to cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/QiniuQueryCriteria.java index e848e549..7c67674d 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/domain/dto/QiniuQueryCriteria.java +++ b/cutejava/cutejava-domain/src/main/java/cn/odboy/model/tools/dto/QiniuQueryCriteria.java @@ -1,4 +1,4 @@ -package cn.odboy.domain.dto; +package cn.odboy.model.tools.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/config/JobRunner.java b/cutejava/cutejava-job/src/main/java/cn/odboy/config/JobRunner.java index 3017a2a8..e4ef7545 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/config/JobRunner.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/config/JobRunner.java @@ -1,7 +1,7 @@ package cn.odboy.config; import cn.odboy.mapper.QuartzJobMapper; -import cn.odboy.domain.QuartzJob; +import cn.odboy.model.job.domain.QuartzJob; import cn.odboy.util.QuartzManage; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzJobMapper.java b/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzJobMapper.java index 0e4a7a2c..d6e8140c 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzJobMapper.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzJobMapper.java @@ -1,7 +1,7 @@ package cn.odboy.mapper; -import cn.odboy.domain.dto.QuartzJobQueryCriteria; -import cn.odboy.domain.QuartzJob; +import cn.odboy.model.job.domain.QuartzJob; +import cn.odboy.model.job.dto.QuartzJobQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzLogMapper.java b/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzLogMapper.java index 57cfc0e5..f01f8513 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzLogMapper.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/mapper/QuartzLogMapper.java @@ -1,7 +1,7 @@ package cn.odboy.mapper; -import cn.odboy.domain.dto.QuartzJobQueryCriteria; -import cn.odboy.domain.QuartzLog; +import cn.odboy.model.job.domain.QuartzLog; +import cn.odboy.model.job.dto.QuartzJobQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/rest/QuartzJobController.java b/cutejava/cutejava-job/src/main/java/cn/odboy/rest/QuartzJobController.java index 386dc7ed..5d1d316c 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/rest/QuartzJobController.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/rest/QuartzJobController.java @@ -1,12 +1,12 @@ package cn.odboy.rest; -import cn.odboy.domain.QuartzJob; -import cn.odboy.domain.QuartzLog; -import cn.odboy.domain.dto.QuartzJobQueryCriteria; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; +import cn.odboy.model.job.domain.QuartzJob; +import cn.odboy.model.job.domain.QuartzLog; +import cn.odboy.model.job.dto.QuartzJobQueryCriteria; import cn.odboy.service.QuartzJobService; -import cn.odboy.util.PageResult; -import cn.odboy.util.SpringBeanHolder; +import cn.odboy.context.SpringBeanHolder; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/service/QuartzJobService.java b/cutejava/cutejava-job/src/main/java/cn/odboy/service/QuartzJobService.java index 6051749b..1165b298 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/service/QuartzJobService.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/service/QuartzJobService.java @@ -1,9 +1,9 @@ package cn.odboy.service; -import cn.odboy.domain.dto.QuartzJobQueryCriteria; -import cn.odboy.domain.QuartzJob; -import cn.odboy.domain.QuartzLog; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.job.domain.QuartzJob; +import cn.odboy.model.job.domain.QuartzLog; +import cn.odboy.model.job.dto.QuartzJobQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/service/impl/QuartzJobServiceImpl.java b/cutejava/cutejava-job/src/main/java/cn/odboy/service/impl/QuartzJobServiceImpl.java index bf644d7d..ea6014d8 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/service/impl/QuartzJobServiceImpl.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/service/impl/QuartzJobServiceImpl.java @@ -2,12 +2,13 @@ package cn.odboy.service.impl; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import cn.odboy.domain.dto.QuartzJobQueryCriteria; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; import cn.odboy.mapper.QuartzJobMapper; import cn.odboy.mapper.QuartzLogMapper; -import cn.odboy.domain.QuartzJob; -import cn.odboy.domain.QuartzLog; +import cn.odboy.model.job.domain.QuartzJob; +import cn.odboy.model.job.domain.QuartzLog; +import cn.odboy.model.job.dto.QuartzJobQueryCriteria; import cn.odboy.service.QuartzJobService; import cn.odboy.util.*; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/util/ExecutionJob.java b/cutejava/cutejava-job/src/main/java/cn/odboy/util/ExecutionJob.java index 9f583421..ea31dc8b 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/util/ExecutionJob.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/util/ExecutionJob.java @@ -4,16 +4,14 @@ import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateUtil; -import cn.odboy.domain.dto.EmailDto; +import cn.odboy.context.SpringBeanHolder; +import cn.odboy.exception.util.ThrowableUtil; import cn.odboy.mapper.QuartzLogMapper; -import cn.odboy.domain.QuartzJob; -import cn.odboy.domain.QuartzLog; -import cn.odboy.service.QuartzJobService; +import cn.odboy.model.job.domain.QuartzJob; +import cn.odboy.model.job.domain.QuartzLog; +import cn.odboy.model.tools.dto.EmailDto; import cn.odboy.service.EmailService; -import cn.odboy.util.RedisUtil; -import cn.odboy.util.SpringBeanHolder; -import cn.odboy.util.StringUtil; -import cn.odboy.util.ThrowableUtil; +import cn.odboy.service.QuartzJobService; import org.quartz.JobExecutionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,9 +25,7 @@ import java.util.Map; import java.util.concurrent.Future; public class ExecutionJob extends QuartzJobBean { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - // 此处仅供参考,可根据任务执行情况自定义线程池参数 private final ThreadPoolTaskExecutor executor = SpringBeanHolder.getBean("taskAsync"); diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzManage.java b/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzManage.java index 5791e977..067aa135 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzManage.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzManage.java @@ -1,7 +1,7 @@ package cn.odboy.util; import cn.odboy.exception.BadRequestException; -import cn.odboy.domain.QuartzJob; +import cn.odboy.model.job.domain.QuartzJob; import lombok.extern.slf4j.Slf4j; import org.quartz.*; import org.quartz.impl.triggers.CronTriggerImpl; @@ -10,8 +10,6 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; -import static org.quartz.TriggerBuilder.newTrigger; - @Slf4j @Component public class QuartzManage { diff --git a/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzRunnable.java b/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzRunnable.java index 0b022229..4aaa2b55 100644 --- a/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzRunnable.java +++ b/cutejava/cutejava-job/src/main/java/cn/odboy/util/QuartzRunnable.java @@ -1,6 +1,6 @@ package cn.odboy.util; -import cn.odboy.util.SpringBeanHolder; +import cn.odboy.context.SpringBeanHolder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.util.ReflectionUtils; diff --git a/cutejava/cutejava-job/src/main/resources/mapper/QuartzJobMapper.xml b/cutejava/cutejava-job/src/main/resources/mapper/QuartzJobMapper.xml index f0d2da64..356df18d 100644 --- a/cutejava/cutejava-job/src/main/resources/mapper/QuartzJobMapper.xml +++ b/cutejava/cutejava-job/src/main/resources/mapper/QuartzJobMapper.xml @@ -1,35 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - - job_id - , job_name, bean_name, method_name, params, cron_expression, is_pause, person_in_charge, email, sub_task, - pause_after_failure, description, create_time, update_time, create_by, update_by - - - SELECT - + * FROM sys_quartz_job @@ -39,12 +13,11 @@ AND update_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]} - ORDER BY job_id DESC + ORDER BY id DESC - + SELECT * FROM sys_quartz_job WHERE is_pause = 0 diff --git a/cutejava/cutejava-job/src/main/resources/mapper/QuartzLogMapper.xml b/cutejava/cutejava-job/src/main/resources/mapper/QuartzLogMapper.xml index aceb4a57..86b512ee 100644 --- a/cutejava/cutejava-job/src/main/resources/mapper/QuartzLogMapper.xml +++ b/cutejava/cutejava-job/src/main/resources/mapper/QuartzLogMapper.xml @@ -1,29 +1,9 @@ - - - - - - - - - - - - - - - - log_id - , job_name, bean_name, method_name, params, cron_expression, is_success, exception_detail, time, - create_time - - - SELECT - + * FROM sys_quartz_log diff --git a/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java b/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java index 74faf878..238d0dbd 100644 --- a/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java +++ b/cutejava/cutejava-starter/src/main/java/cn/odboy/AppRun.java @@ -1,33 +1,26 @@ package cn.odboy; -import cn.odboy.annotation.rest.AnonymousGetMapping; -import cn.odboy.util.SpringBeanHolder; +import cn.odboy.annotation.AnonymousGetMapping; +import cn.odboy.context.BootApplication; +import cn.odboy.context.SpringBeanHolder; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; -import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.bind.annotation.RestController; +import java.net.UnknownHostException; + @Slf4j @RestController @Api(hidden = true) @SpringBootApplication -public class AppRun { +public class AppRun extends BootApplication { - public static void main(String[] args) { + public static void main(String[] args) throws UnknownHostException { SpringApplication springApplication = new SpringApplication(AppRun.class); - springApplication.run(args); - log.info("---------------------------------------------"); - log.info("Local: {}", "http://localhost:8000"); - log.info("Swagger: {}", "http://localhost:8000/doc.html"); - log.info("---------------------------------------------"); - } - - @Bean - public SpringBeanHolder springContextHolder() { - return new SpringBeanHolder(); + inited(springApplication.run(args)); } /** diff --git a/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java b/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java new file mode 100644 index 00000000..2648477b --- /dev/null +++ b/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java @@ -0,0 +1,27 @@ +package cn.odboy; + + +import cn.odboy.mybatis.util.CmdGenHelper; + +import java.util.List; + +/** + * 代码生成入口 + * + * @date 2024-04-27 + */ +public class GenCode { + public static void main(String[] args) { + CmdGenHelper generator = new CmdGenHelper(); + generator.setDatabaseUrl(String.format("jdbc:mysql://%s:%s/%s", "localhost", 3306, "cutejava20250321")); + generator.setDatabaseUsername("root"); + generator.setDatabasePassword("123456"); + genCareer(generator); + } + + private static void genCareer(CmdGenHelper generator) { + generator.gen("tool_", List.of( +// "tool_qiniu_content", + )); + } +} diff --git a/cutejava/cutejava-starter/src/main/resources/application-dev.yml b/cutejava/cutejava-starter/src/main/resources/application-dev.yml index 5eaa3c0b..c3647ea5 100644 --- a/cutejava/cutejava-starter/src/main/resources/application-dev.yml +++ b/cutejava/cutejava-starter/src/main/resources/application-dev.yml @@ -3,6 +3,21 @@ server: http2: # 启用 HTTP/2 支持,提升传输效率 enabled: true + undertow: + threads: + # 工作线程数,默认设置为io-threads * 8。如果你的应用程序有很多同步阻塞操作,可以适当增加这个值 + worker: 4 + # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程 + # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载 + io: 2 + # 设置为true以使用直接内存(堆外内存)来存储缓冲区。这可以减少垃圾回收的开销。 + direct-buffers: true + # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理 + # 每块buffer的空间大小,越小的空间被利用越充分 + buffer-size: 1024 + accesslog: + # 关闭日志 + enabled: false compression: # 启用 GZIP 压缩,减少传输数据量 enabled: true diff --git a/cutejava/cutejava-starter/src/main/resources/application-prod.yml b/cutejava/cutejava-starter/src/main/resources/application-prod.yml index 318a096b..0d9b2b00 100644 --- a/cutejava/cutejava-starter/src/main/resources/application-prod.yml +++ b/cutejava/cutejava-starter/src/main/resources/application-prod.yml @@ -38,8 +38,8 @@ spring: datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource - driverClassName: com.p6spy.engine.spy.P6SpyDriver - url: jdbc:p6spy:mysql://127.0.0.1:3306/cutejava20250321?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/cutejava20250321?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: root password: 123456 # 初始连接数,建议设置为与最小空闲连接数相同 diff --git a/cutejava/cutejava-starter/src/main/resources/banner.txt b/cutejava/cutejava-starter/src/main/resources/banner.txt index 94b6daab..2e6525ba 100644 --- a/cutejava/cutejava-starter/src/main/resources/banner.txt +++ b/cutejava/cutejava-starter/src/main/resources/banner.txt @@ -5,4 +5,4 @@ | |___ | |_| | | | | |___ | |_| | / / | | | |/ / / / | | \_____| \_____/ |_| |_____| \_____/ /_/ |_| |___/ /_/ |_| -Spring Boot Version: (${spring-boot.version}),CuteJava Version: (1.6) \ No newline at end of file +Spring Boot Version: (${spring-boot.version}),CuteJava Version: (1.3.0) \ No newline at end of file diff --git a/cutejava/cutejava-starter/src/main/resources/logback.xml b/cutejava/cutejava-starter/src/main/resources/logback.xml index 413a6335..a5f16027 100644 --- a/cutejava/cutejava-starter/src/main/resources/logback.xml +++ b/cutejava/cutejava-starter/src/main/resources/logback.xml @@ -1,9 +1,9 @@ - elAdmin + CuteJava + value="%red(%contextName) - %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n"/> diff --git a/cutejava/cutejava-starter/src/main/resources/spy.properties b/cutejava/cutejava-starter/src/main/resources/spy.properties index ecd35934..bd8caa18 100644 --- a/cutejava/cutejava-starter/src/main/resources/spy.properties +++ b/cutejava/cutejava-starter/src/main/resources/spy.properties @@ -1,7 +1,7 @@ # 应用的拦截模块 modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory # 自定义日志打印 -logMessageFormat=cn.odboy.config.mybatis.CustomP6SpyLogger +logMessageFormat=cn.odboy.mybatis.context.CustomP6SpyLogger # 日志输出到控制台 appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger # 日期格式 diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/CaptchaConfig.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/CaptchaConfig.java index fd85d575..3c6ece9d 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/CaptchaConfig.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/CaptchaConfig.java @@ -1,7 +1,7 @@ package cn.odboy.modules.security.config; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.security.config.enums.LoginCodeEnum; +import cn.odboy.modules.security.constant.LoginCodeEnum; import cn.odboy.util.StringUtil; import com.wf.captcha.*; import com.wf.captcha.base.Captcha; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/SpringSecurityConfig.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/SpringSecurityConfig.java index 09b53350..15ccd3ba 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/SpringSecurityConfig.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/SpringSecurityConfig.java @@ -1,11 +1,11 @@ package cn.odboy.modules.security.config; import cn.odboy.constant.RequestMethodEnum; -import cn.odboy.modules.security.security.JwtAccessDeniedHandler; -import cn.odboy.modules.security.security.JwtAuthenticationEntryPoint; -import cn.odboy.modules.security.security.TokenConfigurer; -import cn.odboy.modules.security.security.TokenProvider; -import cn.odboy.modules.security.service.OnlineUserService; +import cn.odboy.modules.security.context.JwtAccessDeniedHandler; +import cn.odboy.modules.security.context.JwtAuthenticationEntryPoint; +import cn.odboy.modules.security.context.TokenConfigurer; +import cn.odboy.modules.security.context.TokenProvider; +import cn.odboy.modules.security.service.impl.OnlineUserServiceImpl; import cn.odboy.util.AnonTagUtil; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationContext; @@ -36,7 +36,7 @@ public class SpringSecurityConfig { private final JwtAccessDeniedHandler jwtAccessDeniedHandler; private final ApplicationContext applicationContext; private final SecurityProperties securityProperties; - private final OnlineUserService onlineUserService; + private final OnlineUserServiceImpl onlineUserService; @Bean GrantedAuthorityDefaults grantedAuthorityDefaults() { diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/enums/LoginCodeEnum.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/constant/LoginCodeEnum.java similarity index 85% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/enums/LoginCodeEnum.java rename to cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/constant/LoginCodeEnum.java index 9fd1603b..f16ff871 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/config/enums/LoginCodeEnum.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/constant/LoginCodeEnum.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.security.config.enums; +package cn.odboy.modules.security.constant; /** * 验证码配置枚举 diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/JwtAccessDeniedHandler.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/JwtAccessDeniedHandler.java similarity index 96% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/JwtAccessDeniedHandler.java rename to cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/JwtAccessDeniedHandler.java index ad79ec45..2c829ccd 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/JwtAccessDeniedHandler.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/JwtAccessDeniedHandler.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.security.security; +package cn.odboy.modules.security.context; import cn.odboy.exception.handler.ApiError; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/JwtAuthenticationEntryPoint.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/JwtAuthenticationEntryPoint.java similarity index 96% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/JwtAuthenticationEntryPoint.java rename to cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/JwtAuthenticationEntryPoint.java index 58cc9d9b..899db072 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/JwtAuthenticationEntryPoint.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/JwtAuthenticationEntryPoint.java @@ -1,4 +1,4 @@ -package cn.odboy.modules.security.security; +package cn.odboy.modules.security.context; import cn.odboy.exception.handler.ApiError; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/TokenConfigurer.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/TokenConfigurer.java similarity index 84% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/TokenConfigurer.java rename to cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/TokenConfigurer.java index 8e6d279a..06c26d6a 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/security/TokenConfigurer.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/context/TokenConfigurer.java @@ -1,7 +1,7 @@ -package cn.odboy.modules.security.security; +package cn.odboy.modules.security.context; import cn.odboy.modules.security.config.SecurityProperties; -import cn.odboy.modules.security.service.OnlineUserService; +import cn.odboy.modules.security.service.impl.OnlineUserServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.security.config.annotation.SecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -13,7 +13,7 @@ public class TokenConfigurer extends SecurityConfigurerAdapter getAll(String username, Pageable pageable) { - List onlineUserDtos = getAll(username); - return PageUtil.toPage( - PageUtil.paging(pageable.getPageNumber(), pageable.getPageSize(), onlineUserDtos), - onlineUserDtos.size() - ); - } + PageResult getAll(String username, Pageable pageable); /** * 查询全部数据,不分页 @@ -70,28 +35,14 @@ public class OnlineUserService { * @param username / * @return / */ - public List getAll(String username) { - String loginKey = properties.getOnlineKey() + - (StringUtil.isBlank(username) ? "" : "*" + username); - List keys = redisUtil.scan(loginKey + "*"); - Collections.reverse(keys); - List onlineUserDtos = new ArrayList<>(); - for (String key : keys) { - onlineUserDtos.add(redisUtil.get(key, OnlineUserDto.class)); - } - onlineUserDtos.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime())); - return onlineUserDtos; - } + List getAll(String username); /** * 退出登录 * * @param token / */ - public void logout(String token) { - String loginKey = tokenProvider.loginKey(token); - redisUtil.del(loginKey); - } + void logout(String token); /** * 导出 @@ -100,20 +51,7 @@ public class OnlineUserService { * @param response / * @throws IOException / */ - public void download(List all, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (OnlineUserDto user : all) { - Map map = new LinkedHashMap<>(); - map.put("用户名", user.getUserName()); - map.put("部门", user.getDept()); - map.put("登录IP", user.getIp()); - map.put("登录地点", user.getAddress()); - map.put("浏览器", user.getBrowser()); - map.put("登录日期", user.getLoginTime()); - list.add(map); - } - FileUtil.downloadExcel(list, response); - } + void download(List all, HttpServletResponse response) throws IOException; /** * 查询用户 @@ -121,17 +59,12 @@ public class OnlineUserService { * @param key / * @return / */ - public OnlineUserDto getOne(String key) { - return redisUtil.get(key, OnlineUserDto.class); - } + OnlineUserDto getOne(String key); /** * 根据用户名强退用户 * * @param username / */ - public void kickOutForUsername(String username) { - String loginKey = properties.getOnlineKey() + username + "*"; - redisUtil.scanDel(loginKey); - } + void kickOutForUsername(String username); } diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/UserCacheService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/UserCacheService.java new file mode 100644 index 00000000..bc498a67 --- /dev/null +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/UserCacheService.java @@ -0,0 +1,30 @@ +package cn.odboy.modules.security.service; + +import cn.odboy.model.system.dto.JwtUserDto; +import org.springframework.scheduling.annotation.Async; + +public interface UserCacheService { + /** + * 返回用户缓存 + * + * @param userName 用户名 + * @return JwtUserDto + */ + JwtUserDto getUserCache(String userName); + + /** + * 添加缓存到Redis + * + * @param userName 用户名 + */ + @Async + void addUserCache(String userName, JwtUserDto user); + /** + * 清理用户缓存信息 + * 用户信息变更时 + * + * @param userName 用户名 + */ + @Async + void cleanUserCache(String userName); +} diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/impl/OnlineUserServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/impl/OnlineUserServiceImpl.java new file mode 100644 index 00000000..21f7f0ea --- /dev/null +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/impl/OnlineUserServiceImpl.java @@ -0,0 +1,103 @@ +package cn.odboy.modules.security.service.impl; + +import cn.odboy.base.PageResult; +import cn.odboy.model.system.dto.JwtUserDto; +import cn.odboy.model.system.dto.OnlineUserDto; +import cn.odboy.modules.security.config.SecurityProperties; +import cn.odboy.modules.security.context.TokenProvider; +import cn.odboy.modules.security.service.OnlineUserService; +import cn.odboy.util.*; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.TimeUnit; + + +@Service +@Slf4j +@AllArgsConstructor +public class OnlineUserServiceImpl implements OnlineUserService { + + private final SecurityProperties properties; + private final TokenProvider tokenProvider; + private final RedisUtil redisUtil; + + @Override + public void save(JwtUserDto jwtUserDto, String token, HttpServletRequest request) { + String dept = jwtUserDto.getUser().getDept().getName(); + String ip = StringUtil.getIp(request); + String id = tokenProvider.getId(token); + String browser = StringUtil.getBrowser(request); + String address = StringUtil.getCityInfo(ip); + OnlineUserDto onlineUserDto = null; + try { + onlineUserDto = new OnlineUserDto(id, jwtUserDto.getUsername(), jwtUserDto.getUser().getNickName(), dept, browser, ip, address, EncryptUtil.desEncrypt(token), new Date()); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + String loginKey = tokenProvider.loginKey(token); + redisUtil.set(loginKey, onlineUserDto, properties.getTokenValidityInSeconds(), TimeUnit.MILLISECONDS); + } + + @Override + public PageResult getAll(String username, Pageable pageable) { + List onlineUserDtos = getAll(username); + return PageUtil.toPage( + PageUtil.paging(pageable.getPageNumber(), pageable.getPageSize(), onlineUserDtos), + onlineUserDtos.size() + ); + } + + @Override + public List getAll(String username) { + String loginKey = properties.getOnlineKey() + + (StringUtil.isBlank(username) ? "" : "*" + username); + List keys = redisUtil.scan(loginKey + "*"); + Collections.reverse(keys); + List onlineUserDtos = new ArrayList<>(); + for (String key : keys) { + onlineUserDtos.add(redisUtil.get(key, OnlineUserDto.class)); + } + onlineUserDtos.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime())); + return onlineUserDtos; + } + + @Override + public void logout(String token) { + String loginKey = tokenProvider.loginKey(token); + redisUtil.del(loginKey); + } + + @Override + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (OnlineUserDto user : all) { + Map map = new LinkedHashMap<>(); + map.put("用户名", user.getUserName()); + map.put("部门", user.getDept()); + map.put("登录IP", user.getIp()); + map.put("登录地点", user.getAddress()); + map.put("浏览器", user.getBrowser()); + map.put("登录日期", user.getLoginTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public OnlineUserDto getOne(String key) { + return redisUtil.get(key, OnlineUserDto.class); + } + + @Override + public void kickOutForUsername(String username) { + String loginKey = properties.getOnlineKey() + username + "*"; + redisUtil.scanDel(loginKey); + } +} diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/UserCacheManager.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/impl/UserCacheServiceImpl.java similarity index 70% rename from cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/UserCacheManager.java rename to cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/impl/UserCacheServiceImpl.java index dd8ba8ff..076c0931 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/UserCacheManager.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/security/service/impl/UserCacheServiceImpl.java @@ -1,33 +1,27 @@ -package cn.odboy.modules.security.service; +package cn.odboy.modules.security.service.impl; import cn.hutool.core.util.RandomUtil; +import cn.odboy.model.system.dto.JwtUserDto; import cn.odboy.modules.security.config.LoginProperties; -import cn.odboy.modules.security.service.dto.JwtUserDto; +import cn.odboy.modules.security.service.UserCacheService; import cn.odboy.util.RedisUtil; import cn.odboy.util.StringUtil; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * 用户缓存管理 */ -@Component -public class UserCacheManager { - +@Service +public class UserCacheServiceImpl implements UserCacheService { @Resource private RedisUtil redisUtil; @Value("${login.user-cache.idle-time}") private long idleTime; - /** - * 返回用户缓存 - * - * @param userName 用户名 - * @return JwtUserDto - */ + @Override public JwtUserDto getUserCache(String userName) { // 转小写 userName = StringUtil.lowerCase(userName); @@ -38,12 +32,8 @@ public class UserCacheManager { return null; } - /** - * 添加缓存到Redis - * - * @param userName 用户名 - */ - @Async + + @Override public void addUserCache(String userName, JwtUserDto user) { // 转小写 userName = StringUtil.lowerCase(userName); @@ -54,13 +44,8 @@ public class UserCacheManager { } } - /** - * 清理用户缓存信息 - * 用户信息变更时 - * - * @param userName 用户名 - */ - @Async + + @Override public void cleanUserCache(String userName) { // 转小写 userName = StringUtil.lowerCase(userName); diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DeptMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DeptMapper.java index 466baad0..9d2db580 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DeptMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DeptMapper.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Dept; -import cn.odboy.modules.system.domain.dto.DeptQueryCriteria; +import cn.odboy.model.system.domain.Dept; +import cn.odboy.model.system.dto.DeptQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictDetailMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictDetailMapper.java index 231e5097..868b0a91 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictDetailMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictDetailMapper.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.DictDetail; -import cn.odboy.modules.system.domain.dto.DictDetailQueryCriteria; +import cn.odboy.model.system.domain.DictDetail; +import cn.odboy.model.system.dto.DictDetailQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictMapper.java index a4f11737..6567930c 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/DictMapper.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Dict; -import cn.odboy.modules.system.domain.dto.DictQueryCriteria; +import cn.odboy.model.system.domain.Dict; +import cn.odboy.model.system.dto.DictQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/JobMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/JobMapper.java index cfed1158..1c59ba85 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/JobMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/JobMapper.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Job; -import cn.odboy.modules.system.domain.dto.JobQueryCriteria; +import cn.odboy.model.system.domain.Job; +import cn.odboy.model.system.dto.JobQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -14,7 +14,7 @@ import java.util.List; @Mapper public interface JobMapper extends BaseMapper { - @Select("select job_id as id from sys_job where name = #{name}") + @Select("select id from sys_job where name = #{name}") Job findByName(@Param("name") String name); List findAll(@Param("criteria") JobQueryCriteria criteria); diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/MenuMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/MenuMapper.java index e873b3e9..692c8d05 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/MenuMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/MenuMapper.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Menu; -import cn.odboy.modules.system.domain.dto.MenuQueryCriteria; +import cn.odboy.model.system.domain.Menu; +import cn.odboy.model.system.dto.MenuQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleDeptMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleDeptMapper.java index f5025097..c5af396b 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleDeptMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleDeptMapper.java @@ -1,6 +1,6 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Dept; +import cn.odboy.model.system.domain.Dept; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMapper.java index 0ca12bbc..41a9d8e7 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMapper.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.dto.RoleQueryCriteria; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.dto.RoleQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMenuMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMenuMapper.java index 5bd2dabb..070ce49d 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMenuMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/RoleMenuMapper.java @@ -1,6 +1,6 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Menu; +import cn.odboy.model.system.domain.Menu; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserJobMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserJobMapper.java index 12494bf1..4a922368 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserJobMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserJobMapper.java @@ -1,6 +1,6 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Job; +import cn.odboy.model.system.domain.Job; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserMapper.java index ceb2b9d5..ccf1c43b 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserMapper.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.UserQueryCriteria; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.UserQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserRoleMapper.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserRoleMapper.java index 26b9c224..2315bbdb 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserRoleMapper.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/mapper/UserRoleMapper.java @@ -1,6 +1,6 @@ package cn.odboy.modules.system.mapper; -import cn.odboy.modules.system.domain.Role; +import cn.odboy.model.system.domain.Role; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DeptController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DeptController.java index 772d67e3..217a8cd0 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DeptController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DeptController.java @@ -1,11 +1,11 @@ package cn.odboy.modules.system.rest; import cn.hutool.core.collection.CollectionUtil; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.Dept; -import cn.odboy.modules.system.domain.dto.DeptQueryCriteria; +import cn.odboy.model.system.domain.Dept; +import cn.odboy.model.system.dto.DeptQueryCriteria; import cn.odboy.modules.system.service.DeptService; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictController.java index b6135ec6..ca4e0db6 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictController.java @@ -1,10 +1,10 @@ package cn.odboy.modules.system.rest; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.Dict; -import cn.odboy.modules.system.domain.dto.DictQueryCriteria; +import cn.odboy.model.system.domain.Dict; +import cn.odboy.model.system.dto.DictQueryCriteria; import cn.odboy.modules.system.service.DictService; -import cn.odboy.util.PageResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictDetailController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictDetailController.java index 3dc042e1..3996d6ab 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictDetailController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/DictDetailController.java @@ -1,10 +1,10 @@ package cn.odboy.modules.system.rest; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.DictDetail; -import cn.odboy.modules.system.domain.dto.DictDetailQueryCriteria; +import cn.odboy.model.system.domain.DictDetail; +import cn.odboy.model.system.dto.DictDetailQueryCriteria; import cn.odboy.modules.system.service.DictDetailService; -import cn.odboy.util.PageResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/JobController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/JobController.java index 2fcd3e27..bc5b1555 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/JobController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/JobController.java @@ -1,10 +1,10 @@ package cn.odboy.modules.system.rest; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.Job; -import cn.odboy.modules.system.domain.dto.JobQueryCriteria; +import cn.odboy.model.system.domain.Job; +import cn.odboy.model.system.dto.JobQueryCriteria; import cn.odboy.modules.system.service.JobService; -import cn.odboy.util.PageResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/MenuController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/MenuController.java index e297f707..7b88ed5c 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/MenuController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/MenuController.java @@ -1,12 +1,12 @@ package cn.odboy.modules.system.rest; import cn.hutool.core.collection.CollectionUtil; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.Menu; -import cn.odboy.modules.system.domain.dto.MenuQueryCriteria; -import cn.odboy.modules.system.domain.dto.MenuVo; +import cn.odboy.model.system.domain.Menu; +import cn.odboy.model.system.dto.MenuQueryCriteria; +import cn.odboy.model.system.dto.MenuVo; import cn.odboy.modules.system.service.MenuService; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import cn.odboy.util.SecurityUtil; import io.swagger.annotations.Api; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/RoleController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/RoleController.java index 83db6f29..85e26044 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/RoleController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/RoleController.java @@ -1,11 +1,11 @@ package cn.odboy.modules.system.rest; import cn.hutool.core.lang.Dict; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.dto.RoleQueryCriteria; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.dto.RoleQueryCriteria; import cn.odboy.modules.system.service.RoleService; -import cn.odboy.util.PageResult; import cn.odboy.util.SecurityUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/UserController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/UserController.java index 9664b995..c0043a8d 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/UserController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/UserController.java @@ -1,16 +1,16 @@ package cn.odboy.modules.system.rest; import cn.hutool.core.collection.CollectionUtil; -import cn.odboy.config.properties.RsaProperties; +import cn.odboy.base.PageResult; +import cn.odboy.properties.RsaProperties; import cn.odboy.constant.CodeEnum; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.Dept; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.UserPassVo; -import cn.odboy.modules.system.domain.dto.UserQueryCriteria; +import cn.odboy.model.system.domain.Dept; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.UserPassVo; +import cn.odboy.model.system.dto.UserQueryCriteria; import cn.odboy.modules.system.service.*; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import cn.odboy.util.RsaUtil; import cn.odboy.util.SecurityUtil; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/VerifyController.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/VerifyController.java index f8c8a40a..b05b5e87 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/VerifyController.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/rest/VerifyController.java @@ -2,7 +2,7 @@ package cn.odboy.modules.system.rest; import cn.odboy.constant.CodeBiEnum; import cn.odboy.constant.CodeEnum; -import cn.odboy.domain.dto.EmailDto; +import cn.odboy.model.tools.dto.EmailDto; import cn.odboy.modules.system.service.VerifyService; import cn.odboy.service.EmailService; import io.swagger.annotations.Api; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DataService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DataService.java index 3ef1cf21..d35f3449 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DataService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DataService.java @@ -1,6 +1,7 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.system.domain.User; + +import cn.odboy.model.system.domain.User; import java.util.List; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DeptService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DeptService.java index a1511426..e1f806ac 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DeptService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DeptService.java @@ -1,7 +1,7 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.system.domain.Dept; -import cn.odboy.modules.system.domain.dto.DeptQueryCriteria; +import cn.odboy.model.system.domain.Dept; +import cn.odboy.model.system.dto.DeptQueryCriteria; import com.baomidou.mybatisplus.extension.service.IService; import javax.servlet.http.HttpServletResponse; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictDetailService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictDetailService.java index e1fff1cf..feb4d660 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictDetailService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictDetailService.java @@ -1,8 +1,8 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.system.domain.DictDetail; -import cn.odboy.modules.system.domain.dto.DictDetailQueryCriteria; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.system.domain.DictDetail; +import cn.odboy.model.system.dto.DictDetailQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictService.java index 10556967..db295ac4 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/DictService.java @@ -1,8 +1,8 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.system.domain.Dict; -import cn.odboy.modules.system.domain.dto.DictQueryCriteria; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.system.domain.Dict; +import cn.odboy.model.system.dto.DictQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/JobService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/JobService.java index 7fd039c3..0c7d8a1b 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/JobService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/JobService.java @@ -1,8 +1,8 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.system.domain.Job; -import cn.odboy.modules.system.domain.dto.JobQueryCriteria; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.system.domain.Job; +import cn.odboy.model.system.dto.JobQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/MenuService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/MenuService.java index 32fd5e9a..9878da6c 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/MenuService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/MenuService.java @@ -1,8 +1,8 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.system.domain.Menu; -import cn.odboy.modules.system.domain.dto.MenuQueryCriteria; -import cn.odboy.modules.system.domain.dto.MenuVo; +import cn.odboy.model.system.domain.Menu; +import cn.odboy.model.system.dto.MenuQueryCriteria; +import cn.odboy.model.system.dto.MenuVo; import com.baomidou.mybatisplus.extension.service.IService; import javax.servlet.http.HttpServletResponse; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/RoleService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/RoleService.java index e00ab7e6..46aa97ef 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/RoleService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/RoleService.java @@ -1,10 +1,10 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.security.service.dto.AuthorityDto; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.RoleQueryCriteria; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.AuthorityDto; +import cn.odboy.model.system.dto.RoleQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/UserService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/UserService.java index d3d827f5..d9e5a2e5 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/UserService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/UserService.java @@ -1,8 +1,8 @@ package cn.odboy.modules.system.service; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.UserQueryCriteria; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.UserQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.multipart.MultipartFile; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/VerifyService.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/VerifyService.java index 6b32d05c..f3b8f3c6 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/VerifyService.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/VerifyService.java @@ -1,6 +1,7 @@ package cn.odboy.modules.system.service; -import cn.odboy.domain.dto.EmailDto; + +import cn.odboy.model.tools.dto.EmailDto; public interface VerifyService { /** diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DataServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DataServiceImpl.java index 975203d3..7edcbe81 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DataServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DataServiceImpl.java @@ -3,9 +3,9 @@ package cn.odboy.modules.system.service.impl; import cn.hutool.core.collection.CollUtil; import cn.odboy.constant.CacheKey; import cn.odboy.constant.DataScopeEnum; -import cn.odboy.modules.system.domain.Dept; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.User; +import cn.odboy.model.system.domain.Dept; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.domain.User; import cn.odboy.modules.system.service.DataService; import cn.odboy.modules.system.service.DeptService; import cn.odboy.modules.system.service.RoleService; @@ -22,7 +22,6 @@ import java.util.concurrent.TimeUnit; @Service @RequiredArgsConstructor public class DataServiceImpl implements DataService { - private final RedisUtil redisUtil; private final RoleService roleService; private final DeptService deptService; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DeptServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DeptServiceImpl.java index db291dfa..6df85f26 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DeptServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DeptServiceImpl.java @@ -6,9 +6,9 @@ import cn.hutool.core.util.ObjectUtil; import cn.odboy.constant.CacheKey; import cn.odboy.constant.DataScopeEnum; import cn.odboy.exception.BadRequestException; -import cn.odboy.modules.system.domain.Dept; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.DeptQueryCriteria; +import cn.odboy.model.system.domain.Dept; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.DeptQueryCriteria; import cn.odboy.modules.system.mapper.DeptMapper; import cn.odboy.modules.system.mapper.RoleMapper; import cn.odboy.modules.system.mapper.UserMapper; @@ -32,7 +32,6 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class DeptServiceImpl extends ServiceImpl implements DeptService { - private final DeptMapper deptMapper; private final UserMapper userMapper; private final RedisUtil redisUtil; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictDetailServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictDetailServiceImpl.java index 8a67c263..d4f7afd7 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictDetailServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictDetailServiceImpl.java @@ -1,14 +1,14 @@ package cn.odboy.modules.system.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.odboy.base.PageResult; import cn.odboy.constant.CacheKey; -import cn.odboy.modules.system.domain.Dict; -import cn.odboy.modules.system.domain.DictDetail; -import cn.odboy.modules.system.domain.dto.DictDetailQueryCriteria; +import cn.odboy.model.system.domain.Dict; +import cn.odboy.model.system.domain.DictDetail; +import cn.odboy.model.system.dto.DictDetailQueryCriteria; import cn.odboy.modules.system.mapper.DictDetailMapper; import cn.odboy.modules.system.mapper.DictMapper; import cn.odboy.modules.system.service.DictDetailService; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import cn.odboy.util.RedisUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictServiceImpl.java index ad87be85..18151863 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/DictServiceImpl.java @@ -1,15 +1,15 @@ package cn.odboy.modules.system.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.odboy.base.PageResult; import cn.odboy.constant.CacheKey; -import cn.odboy.modules.system.domain.Dict; -import cn.odboy.modules.system.domain.DictDetail; -import cn.odboy.modules.system.domain.dto.DictQueryCriteria; +import cn.odboy.model.system.domain.Dict; +import cn.odboy.model.system.domain.DictDetail; +import cn.odboy.model.system.dto.DictQueryCriteria; import cn.odboy.modules.system.mapper.DictDetailMapper; import cn.odboy.modules.system.mapper.DictMapper; import cn.odboy.modules.system.service.DictService; import cn.odboy.util.FileUtil; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import cn.odboy.util.RedisUtil; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/JobServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/JobServiceImpl.java index 970b9528..8b4b92b3 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/JobServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/JobServiceImpl.java @@ -1,15 +1,15 @@ package cn.odboy.modules.system.service.impl; +import cn.odboy.base.PageResult; import cn.odboy.constant.CacheKey; import cn.odboy.exception.BadRequestException; import cn.odboy.exception.EntityExistException; -import cn.odboy.modules.system.domain.Job; -import cn.odboy.modules.system.domain.dto.JobQueryCriteria; +import cn.odboy.model.system.domain.Job; +import cn.odboy.model.system.dto.JobQueryCriteria; import cn.odboy.modules.system.mapper.JobMapper; import cn.odboy.modules.system.mapper.UserMapper; import cn.odboy.modules.system.service.JobService; import cn.odboy.util.FileUtil; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import cn.odboy.util.RedisUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/MenuServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/MenuServiceImpl.java index 8cfb9484..d6707258 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/MenuServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/MenuServiceImpl.java @@ -6,12 +6,12 @@ import cn.hutool.core.util.ObjectUtil; import cn.odboy.constant.CacheKey; import cn.odboy.exception.BadRequestException; import cn.odboy.exception.EntityExistException; -import cn.odboy.modules.system.domain.Menu; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.MenuMetaVo; -import cn.odboy.modules.system.domain.dto.MenuQueryCriteria; -import cn.odboy.modules.system.domain.dto.MenuVo; +import cn.odboy.model.system.domain.Menu; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.MenuMetaVo; +import cn.odboy.model.system.dto.MenuQueryCriteria; +import cn.odboy.model.system.dto.MenuVo; import cn.odboy.modules.system.mapper.MenuMapper; import cn.odboy.modules.system.mapper.RoleMenuMapper; import cn.odboy.modules.system.mapper.UserMapper; diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/RoleServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/RoleServiceImpl.java index 289e38ca..fba3a994 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/RoleServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/RoleServiceImpl.java @@ -2,21 +2,25 @@ package cn.odboy.modules.system.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.odboy.base.PageResult; import cn.odboy.constant.CacheKey; import cn.odboy.exception.BadRequestException; import cn.odboy.exception.EntityExistException; -import cn.odboy.modules.security.service.UserCacheManager; -import cn.odboy.modules.security.service.dto.AuthorityDto; -import cn.odboy.modules.system.domain.Menu; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.RoleQueryCriteria; +import cn.odboy.model.system.domain.Menu; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.AuthorityDto; +import cn.odboy.model.system.dto.RoleQueryCriteria; +import cn.odboy.modules.security.service.UserCacheService; import cn.odboy.modules.system.mapper.RoleDeptMapper; import cn.odboy.modules.system.mapper.RoleMapper; import cn.odboy.modules.system.mapper.RoleMenuMapper; import cn.odboy.modules.system.mapper.UserMapper; import cn.odboy.modules.system.service.RoleService; -import cn.odboy.util.*; +import cn.odboy.util.FileUtil; +import cn.odboy.util.PageUtil; +import cn.odboy.util.RedisUtil; +import cn.odboy.util.StringUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; @@ -32,13 +36,12 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class RoleServiceImpl extends ServiceImpl implements RoleService { - private final RoleMapper roleMapper; private final RoleDeptMapper roleDeptMapper; private final RoleMenuMapper roleMenuMapper; private final RedisUtil redisUtil; private final UserMapper userMapper; - private final UserCacheManager userCacheManager; + private final UserCacheService userCacheService; @Override public List queryAll() { @@ -213,7 +216,7 @@ public class RoleServiceImpl extends ServiceImpl implements Ro public void delCaches(Long id, List users) { users = CollectionUtil.isEmpty(users) ? userMapper.findByRoleId(id) : users; if (CollectionUtil.isNotEmpty(users)) { - users.forEach(item -> userCacheManager.cleanUserCache(item.getUsername())); + users.forEach(item -> userCacheService.cleanUserCache(item.getUsername())); Set userIds = users.stream().map(User::getId).collect(Collectors.toSet()); redisUtil.delByKeys(CacheKey.DATA_USER, userIds); redisUtil.delByKeys(CacheKey.MENU_USER, userIds); diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/UserServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/UserServiceImpl.java index c3a422b1..567aebb2 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/UserServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/UserServiceImpl.java @@ -1,15 +1,16 @@ package cn.odboy.modules.system.service.impl; -import cn.odboy.config.properties.FileProperties; +import cn.odboy.base.PageResult; +import cn.odboy.modules.security.service.OnlineUserService; +import cn.odboy.modules.security.service.UserCacheService; +import cn.odboy.properties.FileProperties; import cn.odboy.constant.CacheKey; import cn.odboy.exception.BadRequestException; import cn.odboy.exception.EntityExistException; -import cn.odboy.modules.security.service.OnlineUserService; -import cn.odboy.modules.security.service.UserCacheManager; -import cn.odboy.modules.system.domain.Job; -import cn.odboy.modules.system.domain.Role; -import cn.odboy.modules.system.domain.User; -import cn.odboy.modules.system.domain.dto.UserQueryCriteria; +import cn.odboy.model.system.domain.Job; +import cn.odboy.model.system.domain.Role; +import cn.odboy.model.system.domain.User; +import cn.odboy.model.system.dto.UserQueryCriteria; import cn.odboy.modules.system.mapper.UserJobMapper; import cn.odboy.modules.system.mapper.UserMapper; import cn.odboy.modules.system.mapper.UserRoleMapper; @@ -39,7 +40,7 @@ public class UserServiceImpl extends ServiceImpl implements Us private final UserRoleMapper userRoleMapper; private final FileProperties properties; private final RedisUtil redisUtil; - private final UserCacheManager userCacheManager; + private final UserCacheService userCacheService; private final OnlineUserService onlineUserService; @Override @@ -272,6 +273,6 @@ public class UserServiceImpl extends ServiceImpl implements Us * @param username / */ private void flushCache(String username) { - userCacheManager.cleanUserCache(username); + userCacheService.cleanUserCache(username); } } diff --git a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/VerifyServiceImpl.java b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/VerifyServiceImpl.java index 22c0d4b0..e599d626 100644 --- a/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/VerifyServiceImpl.java +++ b/cutejava/cutejava-system/src/main/java/cn/odboy/modules/system/service/impl/VerifyServiceImpl.java @@ -6,8 +6,8 @@ import cn.hutool.extra.template.Template; import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateUtil; -import cn.odboy.domain.dto.EmailDto; import cn.odboy.exception.BadRequestException; +import cn.odboy.model.tools.dto.EmailDto; import cn.odboy.modules.system.service.VerifyService; import cn.odboy.util.RedisUtil; import lombok.RequiredArgsConstructor; @@ -46,7 +46,7 @@ public class VerifyServiceImpl implements VerifyService { } else { content = template.render(Dict.create().set("code", oldCode)); } - emailDto = new EmailDto(Collections.singletonList(email), "ELADMIN后台管理系统", content); + emailDto = new EmailDto(Collections.singletonList(email), "CuteJava后台管理系统", content); return emailDto; } diff --git a/cutejava/cutejava-system/src/main/resources/mapper/DeptMapper.xml b/cutejava/cutejava-system/src/main/resources/mapper/DeptMapper.xml index 4160d77b..286c20d8 100644 --- a/cutejava/cutejava-system/src/main/resources/mapper/DeptMapper.xml +++ b/cutejava/cutejava-system/src/main/resources/mapper/DeptMapper.xml @@ -1,27 +1,9 @@ - - - - - - - - - - - - - - - dept_id - , name, pid, sub_count, create_time, update_time, create_by, update_by, enabled, dept_sort - - - select - + * from sys_dept @@ -49,21 +31,21 @@ order by dept_sort - select - + * from sys_dept where pid = #{pid} - select - + * from sys_dept where pid is null - select d.dept_id as id, d.name, d.pid, diff --git a/cutejava/cutejava-system/src/main/resources/mapper/DictDetailMapper.xml b/cutejava/cutejava-system/src/main/resources/mapper/DictDetailMapper.xml index 2f50535c..e38753cf 100644 --- a/cutejava/cutejava-system/src/main/resources/mapper/DictDetailMapper.xml +++ b/cutejava/cutejava-system/src/main/resources/mapper/DictDetailMapper.xml @@ -1,7 +1,7 @@ - + @@ -10,7 +10,8 @@ - + + diff --git a/cutejava/cutejava-system/src/main/resources/mapper/DictMapper.xml b/cutejava/cutejava-system/src/main/resources/mapper/DictMapper.xml index 90763201..9c9888ac 100644 --- a/cutejava/cutejava-system/src/main/resources/mapper/DictMapper.xml +++ b/cutejava/cutejava-system/src/main/resources/mapper/DictMapper.xml @@ -1,26 +1,9 @@ - - - - - - - - - - - - d - . - dict_id - , d.name, d.description, d.create_by, d.update_by, d.create_time, d.update_time - - - SELECT - + * from sys_dict d diff --git a/cutejava/cutejava-system/src/main/resources/mapper/JobMapper.xml b/cutejava/cutejava-system/src/main/resources/mapper/JobMapper.xml index 5395847d..22a86ff0 100644 --- a/cutejava/cutejava-system/src/main/resources/mapper/JobMapper.xml +++ b/cutejava/cutejava-system/src/main/resources/mapper/JobMapper.xml @@ -1,25 +1,9 @@ - - - - - - - - - - - - - job_id - , name, job_sort, enabled, create_by, update_by, create_time, update_time - - - select - + * from sys_job @@ -32,6 +16,6 @@ and create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} - order by job_sort, job_id desc + order by job_sort, id desc \ No newline at end of file diff --git a/cutejava/cutejava-system/src/main/resources/mapper/MenuMapper.xml b/cutejava/cutejava-system/src/main/resources/mapper/MenuMapper.xml index 6e00c336..460efc9d 100644 --- a/cutejava/cutejava-system/src/main/resources/mapper/MenuMapper.xml +++ b/cutejava/cutejava-system/src/main/resources/mapper/MenuMapper.xml @@ -1,36 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - - - menu_id - , title, name, menu_sort, component, path, type, permission, icon, cache, hidden, pid, sub_count, - i_frame, create_by, update_by, create_time, update_time - - - select - + * from sys_menu @@ -53,7 +26,7 @@ order by menu_sort - SELECT m.* FROM sys_menu m, sys_roles_menus r WHERE m.menu_id = r.menu_id AND r.role_id IN @@ -63,17 +36,16 @@ order by m.menu_sort - SELECT - + * from sys_menu WHERE pid = #{pid} ORDER BY menu_sort - + SELECT * from sys_menu where pid is null order by menu_sort diff --git a/cutejava/cutejava-system/src/main/resources/mapper/RoleMapper.xml b/cutejava/cutejava-system/src/main/resources/mapper/RoleMapper.xml index 891a9703..ba7f4c63 100644 --- a/cutejava/cutejava-system/src/main/resources/mapper/RoleMapper.xml +++ b/cutejava/cutejava-system/src/main/resources/mapper/RoleMapper.xml @@ -1,7 +1,7 @@ - + @@ -11,12 +11,12 @@ - + - + @@ -59,7 +59,7 @@ - select role_id as id, name, level from sys_role order by level @@ -92,7 +92,7 @@ - select role_id as id from sys_role where name = #{name} diff --git a/cutejava/cutejava-system/src/main/resources/mapper/UserMapper.xml b/cutejava/cutejava-system/src/main/resources/mapper/UserMapper.xml index b6fc9fe2..24d60335 100644 --- a/cutejava/cutejava-system/src/main/resources/mapper/UserMapper.xml +++ b/cutejava/cutejava-system/src/main/resources/mapper/UserMapper.xml @@ -1,7 +1,7 @@ - + @@ -19,15 +19,15 @@ - + - - + + - + @@ -50,8 +50,7 @@ j . - job_id - as job_id, j.name as job_name + id, j.name as job_name @@ -61,7 +60,7 @@ as role_id, r.name as role_name, r.level as role_level, r.data_scope as role_data_scope - + and u.user_id = #{criteria.id} @@ -97,14 +96,14 @@ from sys_user u left join sys_dept d on u.dept_id = d.dept_id - + order by u.user_id desc limit #{criteria.offset}, #{criteria.size} ) u left join sys_users_jobs suj on u.user_user_id = suj.user_id - left join sys_job j on suj.job_id = j.job_id + left join sys_job j on suj.job_id = j.id left join sys_users_roles sur on u.user_user_id = sur.user_id left join sys_role r on sur.role_id = r.role_id order by u.user_user_id desc @@ -113,7 +112,7 @@ - select user_id as id, username from sys_user where email = #{email} - select user_id as id, username from sys_user where phone = #{phone} - SELECT u.user_id as id, u.username FROM sys_user u, sys_users_roles r @@ -146,7 +145,7 @@ group by u.user_id - SELECT u.* FROM sys_user u, sys_users_roles r, @@ -157,7 +156,7 @@ group by u.user_id - SELECT u.user_id as id, u.username FROM sys_user u, sys_users_roles ur, diff --git a/cutejava/cutejava-tools/pom.xml b/cutejava/cutejava-tools/pom.xml index 3d8175da..f988611e 100644 --- a/cutejava/cutejava-tools/pom.xml +++ b/cutejava/cutejava-tools/pom.xml @@ -19,7 +19,7 @@ cn.odboy - cutejava-common + cutejava-domain 1.3.0 diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/EmailConfigMapper.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/EmailConfigMapper.java index b4d82d66..0ae383f9 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/EmailConfigMapper.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/EmailConfigMapper.java @@ -1,6 +1,6 @@ package cn.odboy.mapper; -import cn.odboy.domain.EmailConfig; +import cn.odboy.model.tools.domain.EmailConfig; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/LocalStorageMapper.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/LocalStorageMapper.java index f1bd8125..3db6ea8e 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/LocalStorageMapper.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/LocalStorageMapper.java @@ -1,7 +1,7 @@ package cn.odboy.mapper; -import cn.odboy.domain.LocalStorage; -import cn.odboy.domain.dto.LocalStorageQueryCriteria; +import cn.odboy.model.tools.domain.LocalStorage; +import cn.odboy.model.tools.dto.LocalStorageQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuConfigMapper.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuConfigMapper.java index 40accaf5..997b22ff 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuConfigMapper.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuConfigMapper.java @@ -1,6 +1,6 @@ package cn.odboy.mapper; -import cn.odboy.domain.QiniuConfig; +import cn.odboy.model.tools.domain.QiniuConfig; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuContentMapper.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuContentMapper.java index 7e003186..63555344 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuContentMapper.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/mapper/QiniuContentMapper.java @@ -1,7 +1,7 @@ package cn.odboy.mapper; -import cn.odboy.domain.QiniuContent; -import cn.odboy.domain.dto.QiniuQueryCriteria; +import cn.odboy.model.tools.domain.QiniuContent; +import cn.odboy.model.tools.dto.QiniuQueryCriteria; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/EmailController.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/EmailController.java index 65c54642..f40b4882 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/EmailController.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/EmailController.java @@ -1,7 +1,7 @@ package cn.odboy.rest; -import cn.odboy.domain.EmailConfig; -import cn.odboy.domain.dto.EmailDto; +import cn.odboy.model.tools.domain.EmailConfig; +import cn.odboy.model.tools.dto.EmailDto; import cn.odboy.service.EmailService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/LocalStorageController.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/LocalStorageController.java index a0628d32..2518a702 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/LocalStorageController.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/LocalStorageController.java @@ -1,11 +1,11 @@ package cn.odboy.rest; -import cn.odboy.domain.LocalStorage; -import cn.odboy.domain.dto.LocalStorageQueryCriteria; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; +import cn.odboy.model.tools.domain.LocalStorage; +import cn.odboy.model.tools.dto.LocalStorageQueryCriteria; import cn.odboy.service.LocalStorageService; import cn.odboy.util.FileUtil; -import cn.odboy.util.PageResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/QiniuController.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/QiniuController.java index 3b485124..2423661d 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/QiniuController.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/rest/QiniuController.java @@ -1,11 +1,11 @@ package cn.odboy.rest; -import cn.odboy.domain.QiniuConfig; -import cn.odboy.domain.QiniuContent; -import cn.odboy.domain.dto.QiniuQueryCriteria; +import cn.odboy.base.PageResult; +import cn.odboy.model.tools.domain.QiniuConfig; +import cn.odboy.model.tools.domain.QiniuContent; +import cn.odboy.model.tools.dto.QiniuQueryCriteria; import cn.odboy.service.QiNiuConfigService; import cn.odboy.service.QiniuContentService; -import cn.odboy.util.PageResult; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/EmailService.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/EmailService.java index d64ddaa0..adbd111b 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/EmailService.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/EmailService.java @@ -1,7 +1,7 @@ package cn.odboy.service; -import cn.odboy.domain.EmailConfig; -import cn.odboy.domain.dto.EmailDto; +import cn.odboy.model.tools.domain.EmailConfig; +import cn.odboy.model.tools.dto.EmailDto; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/LocalStorageService.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/LocalStorageService.java index 82c1690f..6f7efb1c 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/LocalStorageService.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/LocalStorageService.java @@ -1,8 +1,8 @@ package cn.odboy.service; -import cn.odboy.domain.LocalStorage; -import cn.odboy.domain.dto.LocalStorageQueryCriteria; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.tools.domain.LocalStorage; +import cn.odboy.model.tools.dto.LocalStorageQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.multipart.MultipartFile; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiNiuConfigService.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiNiuConfigService.java index 3aa6da8c..4ac9c4ce 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiNiuConfigService.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiNiuConfigService.java @@ -1,6 +1,6 @@ package cn.odboy.service; -import cn.odboy.domain.QiniuConfig; +import cn.odboy.model.tools.domain.QiniuConfig; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiniuContentService.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiniuContentService.java index d35c1ae7..46ba066e 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiniuContentService.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/QiniuContentService.java @@ -1,9 +1,9 @@ package cn.odboy.service; -import cn.odboy.domain.QiniuConfig; -import cn.odboy.domain.QiniuContent; -import cn.odboy.domain.dto.QiniuQueryCriteria; -import cn.odboy.util.PageResult; +import cn.odboy.base.PageResult; +import cn.odboy.model.tools.domain.QiniuConfig; +import cn.odboy.model.tools.domain.QiniuContent; +import cn.odboy.model.tools.dto.QiniuQueryCriteria; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.multipart.MultipartFile; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/EmailServiceImpl.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/EmailServiceImpl.java index 3a2ac437..6af89e07 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/EmailServiceImpl.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/EmailServiceImpl.java @@ -2,10 +2,10 @@ package cn.odboy.service.impl; import cn.hutool.extra.mail.Mail; import cn.hutool.extra.mail.MailAccount; -import cn.odboy.domain.EmailConfig; -import cn.odboy.domain.dto.EmailDto; import cn.odboy.exception.BadRequestException; import cn.odboy.mapper.EmailConfigMapper; +import cn.odboy.model.tools.domain.EmailConfig; +import cn.odboy.model.tools.dto.EmailDto; import cn.odboy.service.EmailService; import cn.odboy.util.EncryptUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/LocalStorageServiceImpl.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/LocalStorageServiceImpl.java index 406fa85f..53aa2f23 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/LocalStorageServiceImpl.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/LocalStorageServiceImpl.java @@ -1,14 +1,14 @@ package cn.odboy.service.impl; import cn.hutool.core.util.ObjectUtil; -import cn.odboy.config.properties.FileProperties; -import cn.odboy.domain.LocalStorage; -import cn.odboy.domain.dto.LocalStorageQueryCriteria; +import cn.odboy.base.PageResult; +import cn.odboy.properties.FileProperties; import cn.odboy.exception.BadRequestException; import cn.odboy.mapper.LocalStorageMapper; +import cn.odboy.model.tools.domain.LocalStorage; +import cn.odboy.model.tools.dto.LocalStorageQueryCriteria; import cn.odboy.service.LocalStorageService; import cn.odboy.util.FileUtil; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import cn.odboy.util.StringUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiNiuConfigServiceImpl.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiNiuConfigServiceImpl.java index 21759723..7aa131fe 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiNiuConfigServiceImpl.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiNiuConfigServiceImpl.java @@ -1,8 +1,8 @@ package cn.odboy.service.impl; -import cn.odboy.domain.QiniuConfig; import cn.odboy.exception.BadRequestException; import cn.odboy.mapper.QiniuConfigMapper; +import cn.odboy.model.tools.domain.QiniuConfig; import cn.odboy.service.QiNiuConfigService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; diff --git a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiniuContentServiceImpl.java b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiniuContentServiceImpl.java index 092e4556..b6e21577 100644 --- a/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiniuContentServiceImpl.java +++ b/cutejava/cutejava-tools/src/main/java/cn/odboy/service/impl/QiniuContentServiceImpl.java @@ -1,13 +1,13 @@ package cn.odboy.service.impl; -import cn.odboy.domain.QiniuConfig; -import cn.odboy.domain.QiniuContent; -import cn.odboy.domain.dto.QiniuQueryCriteria; +import cn.odboy.base.PageResult; import cn.odboy.exception.BadRequestException; import cn.odboy.mapper.QiniuContentMapper; +import cn.odboy.model.tools.domain.QiniuConfig; +import cn.odboy.model.tools.domain.QiniuContent; +import cn.odboy.model.tools.dto.QiniuQueryCriteria; import cn.odboy.service.QiniuContentService; import cn.odboy.util.FileUtil; -import cn.odboy.util.PageResult; import cn.odboy.util.PageUtil; import cn.odboy.util.QiNiuUtil; import com.alibaba.fastjson2.JSON; @@ -73,11 +73,11 @@ public class QiniuContentServiceImpl extends ServiceImpl - - - - - - - - - - - - - - - - storage_id - , real_name, name, suffix, size, type, create_time, update_time, create_by, update_by - - - select - + * from tool_local_storage diff --git a/cutejava/cutejava-tools/src/main/resources/mapper/QiniuContentMapper.xml b/cutejava/cutejava-tools/src/main/resources/mapper/QiniuContentMapper.xml index fb4b77b2..73229b0c 100644 --- a/cutejava/cutejava-tools/src/main/resources/mapper/QiniuContentMapper.xml +++ b/cutejava/cutejava-tools/src/main/resources/mapper/QiniuContentMapper.xml @@ -1,33 +1,15 @@ - - - - - - - - - - - - - - content_id - , name, size, type, suffix, bucket, url, update_time - - - + SELECT * FROM tool_qiniu_content WHERE name = #{name} - SELECT - + * FROM tool_qiniu_content diff --git a/cutejava/cutejava-tools/src/main/resources/template/taskAlarm.ftl b/cutejava/cutejava-tools/src/main/resources/template/taskAlarm.ftl index 08ae117a..2a83165c 100644 --- a/cutejava/cutejava-tools/src/main/resources/template/taskAlarm.ftl +++ b/cutejava/cutejava-tools/src/main/resources/template/taskAlarm.ftl @@ -61,7 +61,7 @@ padding: 20px 0px; font-family: Microsoft YaHei;"> Copyright ©${.now?string("yyyy")} ELADMIN + href="https://github.com/odboy-tianjun/cutejava" target="_blank">CuteJava 后台管理系统 All Rights Reserved. diff --git a/cutejava/pom.xml b/cutejava/pom.xml index 049cd8a5..1cdd9b95 100644 --- a/cutejava/pom.xml +++ b/cutejava/pom.xml @@ -9,13 +9,14 @@ cutejava-common + cutejava-domain cutejava-tools cutejava-job cutejava-system cutejava-starter - CuteJava 后台管理 + 后台管理 org.springframework.boot @@ -36,24 +37,104 @@ - + + + + + + org.springframework.boot spring-boot-starter-web - + + ch.qos.logback + logback-classic + + + ch.qos.logback + logback-core + org.springframework.boot - spring-boot-starter-json + spring-boot-starter-tomcat + + + org.springframework + spring-core + + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + + ch.qos.logback + logback-classic + 1.2.13 + + + ch.qos.logback + logback-core + 1.2.13 + + + org.springframework + spring-core + 5.3.36 + + + org.springframework + spring-web + 5.3.36 + + + org.springframework + spring-webmvc + 5.3.36 + - + + + org.springframework.boot + spring-boot-starter-undertow + + + io.undertow + undertow-core + + + + + io.undertow + undertow-core + 2.3.17.Final + + + + org.springframework.boot spring-boot-starter-test test + + + com.jayway.jsonpath + json-path + + + + + com.jayway.jsonpath + json-path + 2.9.0 @@ -248,6 +329,13 @@ commons-text 1.13.0 + + + + com.alibaba + transmittable-thread-local + 2.14.5 + diff --git a/sql/cutejava20250321.sql b/sql/cutejava20250321.sql index d3c5e3a4..dbf2679d 100644 --- a/sql/cutejava20250321.sql +++ b/sql/cutejava20250321.sql @@ -11,7 +11,7 @@ Target Server Version : 80025 File Encoding : 65001 - Date: 21/03/2025 18:16:51 + Date: 24/03/2025 18:18:08 */ SET NAMES utf8mb4; @@ -136,6 +136,8 @@ CREATE TABLE `qrtz_locks` ( -- ---------------------------- -- Records of qrtz_locks -- ---------------------------- +INSERT INTO `qrtz_locks` VALUES ('ClusteredScheduler', 'STATE_ACCESS'); +INSERT INTO `qrtz_locks` VALUES ('ClusteredScheduler', 'TRIGGER_ACCESS'); -- ---------------------------- -- Table structure for qrtz_paused_trigger_grps @@ -166,6 +168,7 @@ CREATE TABLE `qrtz_scheduler_state` ( -- ---------------------------- -- Records of qrtz_scheduler_state -- ---------------------------- +INSERT INTO `qrtz_scheduler_state` VALUES ('ClusteredScheduler', 'DESKTOP-FM44BLS1742558233429', 1742558255052, 20000); -- ---------------------------- -- Table structure for qrtz_simple_triggers @@ -397,27 +400,23 @@ INSERT INTO `sys_menu` VALUES (1, NULL, 7, 0, '系统管理', NULL, NULL, 1, 'sy INSERT INTO `sys_menu` VALUES (2, 1, 3, 1, '用户管理', 'User', 'system/user/index', 2, 'peoples', 'user', b'0', b'0', b'0', 'user:list', NULL, NULL, '2018-12-18 15:14:44', NULL); INSERT INTO `sys_menu` VALUES (3, 1, 3, 1, '角色管理', 'Role', 'system/role/index', 3, 'role', 'role', b'0', b'0', b'0', 'roles:list', NULL, NULL, '2018-12-18 15:16:07', NULL); INSERT INTO `sys_menu` VALUES (5, 1, 3, 1, '菜单管理', 'Menu', 'system/menu/index', 5, 'menu', 'menu', b'0', b'0', b'0', 'menu:list', NULL, NULL, '2018-12-18 15:17:28', NULL); -INSERT INTO `sys_menu` VALUES (6, NULL, 5, 0, '系统监控', NULL, NULL, 10, 'monitor', 'monitor', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-18 15:17:48', NULL); -INSERT INTO `sys_menu` VALUES (7, 6, 0, 1, '操作日志', 'Log', 'monitor/log/index', 11, 'log', 'logs', b'0', b'1', b'0', NULL, NULL, 'admin', '2018-12-18 15:18:26', '2020-06-06 13:11:57'); +INSERT INTO `sys_menu` VALUES (6, NULL, 3, 0, '系统监控', NULL, NULL, 10, 'monitor', 'monitor', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-18 15:17:48', NULL); INSERT INTO `sys_menu` VALUES (9, 6, 0, 1, 'SQL监控', 'Sql', 'monitor/sql/index', 18, 'sqlMonitor', 'druid', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-18 15:19:34', NULL); INSERT INTO `sys_menu` VALUES (10, NULL, 5, 0, '组件管理', NULL, NULL, 50, 'zujian', 'components', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-19 13:38:16', NULL); INSERT INTO `sys_menu` VALUES (11, 10, 0, 1, '图标库', 'Icons', 'components/icons/index', 51, 'icon', 'icon', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-19 13:38:49', NULL); INSERT INTO `sys_menu` VALUES (14, 36, 0, 1, '邮件工具', 'Email', 'tools/email/index', 35, 'email', 'email', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-27 10:13:09', NULL); INSERT INTO `sys_menu` VALUES (15, 10, 0, 1, '富文本', 'Editor', 'components/Editor', 52, 'fwb', 'tinymce', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-27 11:58:25', NULL); INSERT INTO `sys_menu` VALUES (18, 36, 3, 1, '存储管理', 'Storage', 'tools/storage/index', 34, 'qiniu', 'storage', b'0', b'0', b'0', 'storage:list', NULL, NULL, '2018-12-31 11:12:15', NULL); -INSERT INTO `sys_menu` VALUES (19, 36, 0, 1, '支付宝工具', 'AliPay', 'tools/aliPay/index', 37, 'alipay', 'aliPay', b'0', b'0', b'0', NULL, NULL, NULL, '2018-12-31 14:52:38', NULL); INSERT INTO `sys_menu` VALUES (21, NULL, 2, 0, '多级菜单', NULL, '', 900, 'menu', 'nested', b'0', b'0', b'0', NULL, NULL, 'admin', '2019-01-04 16:22:03', '2020-06-21 17:27:35'); INSERT INTO `sys_menu` VALUES (22, 21, 2, 0, '二级菜单1', NULL, '', 999, 'menu', 'menu1', b'0', b'0', b'0', NULL, NULL, 'admin', '2019-01-04 16:23:29', '2020-06-21 17:27:20'); INSERT INTO `sys_menu` VALUES (23, 21, 0, 1, '二级菜单2', NULL, 'nested/menu2/index', 999, 'menu', 'menu2', b'0', b'0', b'0', NULL, NULL, NULL, '2019-01-04 16:23:57', NULL); INSERT INTO `sys_menu` VALUES (24, 22, 0, 1, '三级菜单1', 'Test', 'nested/menu1/menu1-1', 999, 'menu', 'menu1-1', b'0', b'0', b'0', NULL, NULL, NULL, '2019-01-04 16:24:48', NULL); INSERT INTO `sys_menu` VALUES (27, 22, 0, 1, '三级菜单2', NULL, 'nested/menu1/menu1-2', 999, 'menu', 'menu1-2', b'0', b'0', b'0', NULL, NULL, NULL, '2019-01-07 17:27:32', NULL); INSERT INTO `sys_menu` VALUES (28, 1, 3, 1, '任务调度', 'Timing', 'system/timing/index', 999, 'timing', 'timing', b'0', b'0', b'0', 'timing:list', NULL, NULL, '2019-01-07 20:34:40', NULL); -INSERT INTO `sys_menu` VALUES (30, 36, 0, 1, '代码生成', 'GeneratorIndex', 'generator/index', 32, 'dev', 'generator', b'0', b'1', b'0', NULL, NULL, NULL, '2019-01-11 15:45:55', NULL); -INSERT INTO `sys_menu` VALUES (32, 6, 0, 1, '异常日志', 'ErrorLog', 'monitor/log/errorLog', 12, 'error', 'errorLog', b'0', b'0', b'0', NULL, NULL, NULL, '2019-01-13 13:49:03', NULL); INSERT INTO `sys_menu` VALUES (33, 10, 0, 1, 'Markdown', 'Markdown', 'components/MarkDown', 53, 'markdown', 'markdown', b'0', b'0', b'0', NULL, NULL, NULL, '2019-03-08 13:46:44', NULL); INSERT INTO `sys_menu` VALUES (34, 10, 0, 1, 'Yaml编辑器', 'YamlEdit', 'components/YamlEdit', 54, 'dev', 'yaml', b'0', b'0', b'0', NULL, NULL, NULL, '2019-03-08 15:49:40', NULL); INSERT INTO `sys_menu` VALUES (35, 1, 3, 1, '部门管理', 'Dept', 'system/dept/index', 6, 'dept', 'dept', b'0', b'0', b'0', 'dept:list', NULL, NULL, '2019-03-25 09:46:00', NULL); -INSERT INTO `sys_menu` VALUES (36, NULL, 6, 0, '系统工具', NULL, '', 30, 'sys-tools', 'sys-tools', b'0', b'0', b'0', NULL, NULL, NULL, '2019-03-29 10:57:35', NULL); +INSERT INTO `sys_menu` VALUES (36, NULL, 2, 0, '系统工具', NULL, '', 30, 'sys-tools', 'sys-tools', b'0', b'0', b'0', NULL, NULL, NULL, '2019-03-29 10:57:35', NULL); INSERT INTO `sys_menu` VALUES (37, 1, 3, 1, '岗位管理', 'Job', 'system/job/index', 7, 'Steve-Jobs', 'job', b'0', b'0', b'0', 'job:list', NULL, NULL, '2019-03-29 13:51:18', NULL); INSERT INTO `sys_menu` VALUES (39, 1, 3, 1, '字典管理', 'Dict', 'system/dict/index', 8, 'dictionary', 'dict', b'0', b'0', b'0', 'dict:list', NULL, NULL, '2019-04-10 11:49:04', NULL); INSERT INTO `sys_menu` VALUES (41, 6, 0, 1, '在线用户', 'OnlineUser', 'monitor/online/index', 10, 'Steve-Jobs', 'online', b'0', b'0', b'0', NULL, NULL, NULL, '2019-10-26 22:08:43', NULL); @@ -446,25 +445,7 @@ INSERT INTO `sys_menu` VALUES (77, 18, 0, 2, '上传文件', NULL, '', 2, '', '' INSERT INTO `sys_menu` VALUES (78, 18, 0, 2, '文件编辑', NULL, '', 3, '', '', b'0', b'0', b'0', 'storage:edit', NULL, NULL, '2019-10-29 13:09:22', NULL); INSERT INTO `sys_menu` VALUES (79, 18, 0, 2, '文件删除', NULL, '', 4, '', '', b'0', b'0', b'0', 'storage:del', NULL, NULL, '2019-10-29 13:09:34', NULL); INSERT INTO `sys_menu` VALUES (80, 6, 0, 1, '服务监控', 'ServerMonitor', 'monitor/server/index', 14, 'codeConsole', 'server', b'0', b'0', b'0', 'monitor:list', NULL, 'admin', '2019-11-07 13:06:39', '2020-05-04 18:20:50'); -INSERT INTO `sys_menu` VALUES (82, 36, 0, 1, '生成配置', 'GeneratorConfig', 'generator/config', 33, 'dev', 'generator/config/:tableName', b'0', b'1', b'1', '', NULL, NULL, '2019-11-17 20:08:56', NULL); INSERT INTO `sys_menu` VALUES (83, 10, 0, 1, '图表库', 'Echarts', 'components/Echarts', 50, 'chart', 'echarts', b'0', b'1', b'0', '', NULL, NULL, '2019-11-21 09:04:32', NULL); -INSERT INTO `sys_menu` VALUES (90, NULL, 5, 1, '运维管理', 'Mnt', '', 20, 'mnt', 'mnt', b'0', b'0', b'0', NULL, NULL, NULL, '2019-11-09 10:31:08', NULL); -INSERT INTO `sys_menu` VALUES (92, 90, 3, 1, '服务器', 'ServerDeploy', 'maint/server/index', 22, 'server', 'maint/serverDeploy', b'0', b'0', b'0', 'serverDeploy:list', NULL, NULL, '2019-11-10 10:29:25', NULL); -INSERT INTO `sys_menu` VALUES (93, 90, 3, 1, '应用管理', 'App', 'maint/app/index', 23, 'app', 'maint/app', b'0', b'0', b'0', 'app:list', NULL, NULL, '2019-11-10 11:05:16', NULL); -INSERT INTO `sys_menu` VALUES (94, 90, 3, 1, '部署管理', 'Deploy', 'maint/deploy/index', 24, 'deploy', 'maint/deploy', b'0', b'0', b'0', 'deploy:list', NULL, NULL, '2019-11-10 15:56:55', NULL); -INSERT INTO `sys_menu` VALUES (97, 90, 1, 1, '部署备份', 'DeployHistory', 'maint/deployHistory/index', 25, 'backup', 'maint/deployHistory', b'0', b'0', b'0', 'deployHistory:list', NULL, NULL, '2019-11-10 16:49:44', NULL); -INSERT INTO `sys_menu` VALUES (98, 90, 3, 1, '数据库管理', 'Database', 'maint/database/index', 26, 'database', 'maint/database', b'0', b'0', b'0', 'database:list', NULL, NULL, '2019-11-10 20:40:04', NULL); -INSERT INTO `sys_menu` VALUES (102, 97, 0, 2, '删除', NULL, '', 999, '', '', b'0', b'0', b'0', 'deployHistory:del', NULL, NULL, '2019-11-17 09:32:48', NULL); -INSERT INTO `sys_menu` VALUES (103, 92, 0, 2, '服务器新增', NULL, '', 999, '', '', b'0', b'0', b'0', 'serverDeploy:add', NULL, NULL, '2019-11-17 11:08:33', NULL); -INSERT INTO `sys_menu` VALUES (104, 92, 0, 2, '服务器编辑', NULL, '', 999, '', '', b'0', b'0', b'0', 'serverDeploy:edit', NULL, NULL, '2019-11-17 11:08:57', NULL); -INSERT INTO `sys_menu` VALUES (105, 92, 0, 2, '服务器删除', NULL, '', 999, '', '', b'0', b'0', b'0', 'serverDeploy:del', NULL, NULL, '2019-11-17 11:09:15', NULL); -INSERT INTO `sys_menu` VALUES (106, 93, 0, 2, '应用新增', NULL, '', 999, '', '', b'0', b'0', b'0', 'app:add', NULL, NULL, '2019-11-17 11:10:03', NULL); -INSERT INTO `sys_menu` VALUES (107, 93, 0, 2, '应用编辑', NULL, '', 999, '', '', b'0', b'0', b'0', 'app:edit', NULL, NULL, '2019-11-17 11:10:28', NULL); -INSERT INTO `sys_menu` VALUES (108, 93, 0, 2, '应用删除', NULL, '', 999, '', '', b'0', b'0', b'0', 'app:del', NULL, NULL, '2019-11-17 11:10:55', NULL); -INSERT INTO `sys_menu` VALUES (109, 94, 0, 2, '部署新增', NULL, '', 999, '', '', b'0', b'0', b'0', 'deploy:add', NULL, NULL, '2019-11-17 11:11:22', NULL); -INSERT INTO `sys_menu` VALUES (110, 94, 0, 2, '部署编辑', NULL, '', 999, '', '', b'0', b'0', b'0', 'deploy:edit', NULL, NULL, '2019-11-17 11:11:41', NULL); -INSERT INTO `sys_menu` VALUES (111, 94, 0, 2, '部署删除', NULL, '', 999, '', '', b'0', b'0', b'0', 'deploy:del', NULL, NULL, '2019-11-17 11:12:01', NULL); -INSERT INTO `sys_menu` VALUES (116, 36, 0, 1, '生成预览', 'Preview', 'generator/preview', 999, 'java', 'generator/preview/:tableName', b'0', b'1', b'1', NULL, NULL, NULL, '2019-11-26 14:54:36', NULL); -- ---------------------------- -- Table structure for sys_quartz_job @@ -538,13 +519,15 @@ CREATE TABLE `sys_role` ( PRIMARY KEY (`role_id`) USING BTREE, UNIQUE INDEX `uniq_name`(`name`) USING BTREE, INDEX `idx_level`(`level`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_role -- ---------------------------- -INSERT INTO `sys_role` VALUES (1, '超级管理员', 1, '-', '全部', NULL, 'admin', '2018-11-23 11:04:37', '2020-08-06 16:10:24'); +INSERT INTO `sys_role` VALUES (1, '超级管理员', 1, '666', '全部', NULL, 'admin', '2018-11-23 11:04:37', '2020-08-06 16:10:24'); INSERT INTO `sys_role` VALUES (2, '普通用户', 2, '-', '本级', NULL, 'admin', '2018-11-23 13:09:06', '2020-09-05 10:45:12'); +INSERT INTO `sys_role` VALUES (3, 'd666', 3, NULL, '全部', 'admin', 'admin', NULL, NULL); +INSERT INTO `sys_role` VALUES (4, '666', 3, NULL, '全部', 'admin', 'admin', NULL, NULL); -- ---------------------------- -- Table structure for sys_roles_depts @@ -585,8 +568,6 @@ INSERT INTO `sys_roles_menus` VALUES (3, 1); INSERT INTO `sys_roles_menus` VALUES (5, 1); INSERT INTO `sys_roles_menus` VALUES (6, 1); INSERT INTO `sys_roles_menus` VALUES (6, 2); -INSERT INTO `sys_roles_menus` VALUES (7, 1); -INSERT INTO `sys_roles_menus` VALUES (7, 2); INSERT INTO `sys_roles_menus` VALUES (9, 1); INSERT INTO `sys_roles_menus` VALUES (9, 2); INSERT INTO `sys_roles_menus` VALUES (10, 1); @@ -598,8 +579,6 @@ INSERT INTO `sys_roles_menus` VALUES (14, 2); INSERT INTO `sys_roles_menus` VALUES (15, 1); INSERT INTO `sys_roles_menus` VALUES (15, 2); INSERT INTO `sys_roles_menus` VALUES (18, 1); -INSERT INTO `sys_roles_menus` VALUES (19, 1); -INSERT INTO `sys_roles_menus` VALUES (19, 2); INSERT INTO `sys_roles_menus` VALUES (21, 1); INSERT INTO `sys_roles_menus` VALUES (21, 2); INSERT INTO `sys_roles_menus` VALUES (22, 1); @@ -611,10 +590,6 @@ INSERT INTO `sys_roles_menus` VALUES (24, 2); INSERT INTO `sys_roles_menus` VALUES (27, 1); INSERT INTO `sys_roles_menus` VALUES (27, 2); INSERT INTO `sys_roles_menus` VALUES (28, 1); -INSERT INTO `sys_roles_menus` VALUES (30, 1); -INSERT INTO `sys_roles_menus` VALUES (30, 2); -INSERT INTO `sys_roles_menus` VALUES (32, 1); -INSERT INTO `sys_roles_menus` VALUES (32, 2); INSERT INTO `sys_roles_menus` VALUES (33, 1); INSERT INTO `sys_roles_menus` VALUES (33, 2); INSERT INTO `sys_roles_menus` VALUES (34, 1); @@ -651,28 +626,8 @@ INSERT INTO `sys_roles_menus` VALUES (78, 1); INSERT INTO `sys_roles_menus` VALUES (79, 1); INSERT INTO `sys_roles_menus` VALUES (80, 1); INSERT INTO `sys_roles_menus` VALUES (80, 2); -INSERT INTO `sys_roles_menus` VALUES (82, 1); -INSERT INTO `sys_roles_menus` VALUES (82, 2); INSERT INTO `sys_roles_menus` VALUES (83, 1); INSERT INTO `sys_roles_menus` VALUES (83, 2); -INSERT INTO `sys_roles_menus` VALUES (90, 1); -INSERT INTO `sys_roles_menus` VALUES (92, 1); -INSERT INTO `sys_roles_menus` VALUES (93, 1); -INSERT INTO `sys_roles_menus` VALUES (94, 1); -INSERT INTO `sys_roles_menus` VALUES (97, 1); -INSERT INTO `sys_roles_menus` VALUES (98, 1); -INSERT INTO `sys_roles_menus` VALUES (102, 1); -INSERT INTO `sys_roles_menus` VALUES (103, 1); -INSERT INTO `sys_roles_menus` VALUES (104, 1); -INSERT INTO `sys_roles_menus` VALUES (105, 1); -INSERT INTO `sys_roles_menus` VALUES (106, 1); -INSERT INTO `sys_roles_menus` VALUES (107, 1); -INSERT INTO `sys_roles_menus` VALUES (108, 1); -INSERT INTO `sys_roles_menus` VALUES (109, 1); -INSERT INTO `sys_roles_menus` VALUES (110, 1); -INSERT INTO `sys_roles_menus` VALUES (111, 1); -INSERT INTO `sys_roles_menus` VALUES (116, 1); -INSERT INTO `sys_roles_menus` VALUES (116, 2); -- ---------------------------- -- Table structure for sys_user @@ -706,8 +661,7 @@ CREATE TABLE `sys_user` ( -- ---------------------------- -- Records of sys_user -- ---------------------------- -INSERT INTO `sys_user` VALUES (1, 2, 'admin', '管理员', '男', '18888888888', '201507802@qq.com', 'avatar-20250114101539224.png', '/Users/jie/Documents/work/me/admin/eladmin-mp/eladmin/~/avatar/avatar-20250114101539224.png', '$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa', b'1', b'1', NULL, 'admin', '2020-05-03 16:38:31', '2018-08-23 09:11:56', '2020-09-05 10:43:31'); -INSERT INTO `sys_user` VALUES (2, 2, 'test', '测试', '男', '19999999999', '231@qq.com', NULL, NULL, '$2a$10$4XcyudOYTSz6fue6KFNMHeUQnCX5jbBQypLEnGk1PmekXt5c95JcK', b'0', b'1', 'admin', 'admin', NULL, '2020-05-05 11:15:49', '2020-09-05 10:43:38'); +INSERT INTO `sys_user` VALUES (1, 2, 'admin', '管理员', '男', '18888888888', '201507802@qq.com', 'avatar-20250322121058526.png', 'C:\\cutejava\\avatar\\avatar-20250322121058526.png', '$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa', b'1', b'1', NULL, 'admin', '2020-05-03 16:38:31', '2018-08-23 09:11:56', '2020-09-05 10:43:31'); -- ---------------------------- -- Table structure for sys_users_jobs @@ -725,7 +679,6 @@ CREATE TABLE `sys_users_jobs` ( -- Records of sys_users_jobs -- ---------------------------- INSERT INTO `sys_users_jobs` VALUES (1, 11); -INSERT INTO `sys_users_jobs` VALUES (2, 12); -- ---------------------------- -- Table structure for sys_users_roles @@ -743,7 +696,6 @@ CREATE TABLE `sys_users_roles` ( -- Records of sys_users_roles -- ---------------------------- INSERT INTO `sys_users_roles` VALUES (1, 1); -INSERT INTO `sys_users_roles` VALUES (2, 2); -- ---------------------------- -- Table structure for tool_email_config @@ -820,7 +772,7 @@ CREATE TABLE `tool_qiniu_content` ( `update_time` datetime(0) NULL DEFAULT NULL COMMENT '上传或同步的时间', PRIMARY KEY (`content_id`) USING BTREE, UNIQUE INDEX `uniq_name`(`name`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '七牛云文件存储' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '七牛云文件存储' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tool_qiniu_content