From 4287429779dc96df03ff3d329522cb744ff263e0 Mon Sep 17 00:00:00 2001
From: xjs <1294405880@qq.com>
Date: Tue, 10 May 2022 10:39:24 +0800
Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=AD=A3=E5=88=99=E7=94=9F?=
=?UTF-8?q?=E6=88=90=E5=8A=9F=E8=83=BD=20md5=E5=8A=A0=E8=A7=A3=E5=AF=86?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 3 +-
ruoyi-ui/src/api/business/tools/md5.js | 19 ++
.../src/views/business/tools/md5/index.vue | 101 +++++++
.../src/views/business/tools/regex/index.vue | 286 ++++++++++++++++++
.../main/java/com/xjs/consts/RegexConst.java | 10 +
.../apilog/controller/ApiLogController.java | 1 +
.../java/com/xjs/tools/ToolMd5Controller.java | 73 +++++
.../java/com/xjs/tools/domain/ToolMd5.java | 50 +++
.../com/xjs/tools/mapper/ToolMd5Mapper.java | 14 +
.../com/xjs/tools/service/ToolMd5Service.java | 26 ++
.../service/impl/ToolMd5ServiceImpl.java | 64 ++++
.../java/com/xjs/domain/todo/TodoList.java | 75 +++++
12 files changed, 721 insertions(+), 1 deletion(-)
create mode 100644 ruoyi-ui/src/api/business/tools/md5.js
create mode 100644 ruoyi-ui/src/views/business/tools/md5/index.vue
create mode 100644 ruoyi-ui/src/views/business/tools/regex/index.vue
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/ToolMd5Controller.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/domain/ToolMd5.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/mapper/ToolMd5Mapper.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/ToolMd5Service.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/impl/ToolMd5ServiceImpl.java
create mode 100644 xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/todo/TodoList.java
diff --git a/README.md b/README.md
index 90a2725f..3215e982 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
(xjs专用版) 若依28900行代码
+数据库文件在本机电脑上
* 采用前后端分离的模式,微服务版本前端(基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue))。
* 后端采用Spring Boot、Spring Cloud & Alibaba。
@@ -128,4 +129,4 @@ com.ruoyi
## 若依微服务交流群
-QQ群: [](https://jq.qq.com/?_wv=1027&k=yqInfq0S) [](https://jq.qq.com/?_wv=1027&k=Oy1mb3p8) [](https://jq.qq.com/?_wv=1027&k=rvxkJtXK) [](https://jq.qq.com/?_wv=1027&k=0Ck3PvTe) [](https://jq.qq.com/?_wv=1027&k=FnHHP4TT) [](https://jq.qq.com/?_wv=1027&k=qdT1Ojpz) 点击按钮入群。
\ No newline at end of file
+QQ群: [](https://jq.qq.com/?_wv=1027&k=yqInfq0S) [](https://jq.qq.com/?_wv=1027&k=Oy1mb3p8) [](https://jq.qq.com/?_wv=1027&k=rvxkJtXK) [](https://jq.qq.com/?_wv=1027&k=0Ck3PvTe) [](https://jq.qq.com/?_wv=1027&k=FnHHP4TT) [](https://jq.qq.com/?_wv=1027&k=qdT1Ojpz) 点击按钮入群。
diff --git a/ruoyi-ui/src/api/business/tools/md5.js b/ruoyi-ui/src/api/business/tools/md5.js
new file mode 100644
index 00000000..9b44bf78
--- /dev/null
+++ b/ruoyi-ui/src/api/business/tools/md5.js
@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+//加密
+export function encryption(data) {
+ return request({
+ url: '/openapi/md5/encryption',
+ method: 'get',
+ params: data
+ })
+}
+
+//解密
+export function decrypt(data) {
+ return request({
+ url: '/openapi/md5/decrypt',
+ method: 'get',
+ params: data
+ })
+}
diff --git a/ruoyi-ui/src/views/business/tools/md5/index.vue b/ruoyi-ui/src/views/business/tools/md5/index.vue
new file mode 100644
index 00000000..4132ff66
--- /dev/null
+++ b/ruoyi-ui/src/views/business/tools/md5/index.vue
@@ -0,0 +1,101 @@
+
+
+
+
+ MD5解密说明
+
+
+ - MD5再次申明没有解密的方法,最好的反驳就是:数据源是无穷尽的,而 MD5密文是有限的。
+ - 本工具是采用先加密存储,然后再反查询,上千 PB 级别毫秒级响应。
+ - 16位 MD5和32位 MD5区别是取的是8~24位。
+ - 目前 MD5 数据正在拓展,拓展一个量级会同步到工具中来。
+
+
+
+
+
+
+
+ 加密
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 解密
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/views/business/tools/regex/index.vue b/ruoyi-ui/src/views/business/tools/regex/index.vue
new file mode 100644
index 00000000..2d4474e0
--- /dev/null
+++ b/ruoyi-ui/src/views/business/tools/regex/index.vue
@@ -0,0 +1,286 @@
+
+
+
+
+ 在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
+
+
+
+
+
+ 常用的正则表达式
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(.*)<\\/\\1>|\\s+\\/>)$')">HTML标签
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java
index a68ff204..18a4d962 100644
--- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java
+++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java
@@ -42,4 +42,14 @@ public class RegexConst {
* url正则
*/
public static final String URL_REGEX= "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
+
+ /**
+ * 16位md5正则
+ */
+ public static final String MD5_16_REGEX= "([a-f\\d]{32}|[A-F\\d]{32})";
+
+ /**
+ * 32位md5正则
+ */
+ public static final String MD5_32_REGEX= "([a-f\\d]{16}|[A-F\\d]{16})";
}
diff --git a/xjs-business/xjs-business-log/src/main/java/com/xjs/apilog/controller/ApiLogController.java b/xjs-business/xjs-business-log/src/main/java/com/xjs/apilog/controller/ApiLogController.java
index 572e5c85..c6d4245d 100644
--- a/xjs-business/xjs-business-log/src/main/java/com/xjs/apilog/controller/ApiLogController.java
+++ b/xjs-business/xjs-business-log/src/main/java/com/xjs/apilog/controller/ApiLogController.java
@@ -84,6 +84,7 @@ public class ApiLogController extends BaseController {
@PostMapping("/export")
@ApiOperation("导出日志列表")
public void export(HttpServletResponse response, ApiLog apiLog) {
+ startPage();
List list = apiLogService.selectApiLogList(apiLog);
ExcelUtil util = new ExcelUtil(ApiLog.class);
util.exportExcel(response, list, "日志数据");
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/ToolMd5Controller.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/ToolMd5Controller.java
new file mode 100644
index 00000000..2d6584b8
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/ToolMd5Controller.java
@@ -0,0 +1,73 @@
+package com.xjs.tools;
+
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.security.annotation.RequiresLogin;
+import com.xjs.exception.BusinessException;
+import com.xjs.tools.domain.ToolMd5;
+import com.xjs.tools.service.ToolMd5Service;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.regex.Pattern;
+
+import static com.xjs.consts.RegexConst.*;
+
+/**
+ * md5工具Controller
+ *
+ * @author xiejs
+ * @since 2022-05-10
+ */
+@RestController
+@RequestMapping("md5")
+@Api(tags = "业务模块-md5加解密")
+@Log4j2
+@Validated
+public class ToolMd5Controller {
+
+ @Autowired
+ private ToolMd5Service toolMd5Service;
+
+
+ @GetMapping("encryption")
+ @ApiOperation("加密md5")
+ @Log(title = "加密md5")
+ @RequiresLogin
+ public AjaxResult encryption(@NotBlank(message = "参数不能为空") @Size(max = 20, message = "长度不能大于 20 字符") String str) {
+ ToolMd5 md5 = toolMd5Service.encryption(str);
+ return AjaxResult.success(md5);
+ }
+
+
+ @GetMapping("decrypt")
+ @ApiOperation("解密md5")
+ @Log(title = "解密md5")
+ @RequiresLogin
+ public AjaxResult decrypt(@NotBlank(message = "参数不能为空") @Size(max = 32, message = "长度不能大于 32 字符") String str) {
+ boolean md516Regex = Pattern.matches(MD5_16_REGEX, str);
+ boolean md532Regex = Pattern.matches(MD5_32_REGEX, str);
+
+ if (!md516Regex && !md532Regex) {
+ throw new BusinessException("请输入正确的md5");
+ }
+
+ String value = toolMd5Service.decrypt(str);
+ if (StringUtils.isEmpty(value)) {
+ throw new BusinessException("解密未成功");
+ }
+
+ return AjaxResult.success(value);
+ }
+
+
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/domain/ToolMd5.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/domain/ToolMd5.java
new file mode 100644
index 00000000..cc7562f2
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/domain/ToolMd5.java
@@ -0,0 +1,50 @@
+package com.xjs.tools.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.common.core.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * md5工具实体类
+ *
+ * @author xiejs
+ * @since 2022-05-10
+ */
+@Data
+public class ToolMd5 implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ private Long id;
+
+ /**
+ * 来源字符
+ */
+ @Excel(name = "来源字符")
+ private String source;
+
+ /**
+ * 目标字符16位
+ */
+ @Excel(name = "目标字符16位")
+ private String target16;
+
+ /**
+ * 目标字符32位
+ */
+ @Excel(name = "目标字符32位")
+ private String target32;
+
+ @Excel(name = "创建时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private Date createTime;
+
+
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/mapper/ToolMd5Mapper.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/mapper/ToolMd5Mapper.java
new file mode 100644
index 00000000..e4832c47
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/mapper/ToolMd5Mapper.java
@@ -0,0 +1,14 @@
+package com.xjs.tools.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xjs.tools.domain.ToolMd5;
+
+/**
+ * md5工具mapper
+ *
+ * @author xiejs
+ * @since 2022-05-10
+ */
+public interface ToolMd5Mapper extends BaseMapper {
+
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/ToolMd5Service.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/ToolMd5Service.java
new file mode 100644
index 00000000..316043d3
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/ToolMd5Service.java
@@ -0,0 +1,26 @@
+package com.xjs.tools.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xjs.tools.domain.ToolMd5;
+
+/**
+ * md5工具service接口
+ * @author xiejs
+ * @since 2022-05-10
+ */
+public interface ToolMd5Service extends IService {
+
+ /**
+ * 加密md5
+ * @param str 来源字符串
+ * @return 16位和32位md5
+ */
+ ToolMd5 encryption(String str);
+
+ /**
+ * 解密md5
+ * @param str md5
+ * @return 解密的字符串
+ */
+ String decrypt(String str);
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/impl/ToolMd5ServiceImpl.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/impl/ToolMd5ServiceImpl.java
new file mode 100644
index 00000000..6260be3d
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/tools/service/impl/ToolMd5ServiceImpl.java
@@ -0,0 +1,64 @@
+package com.xjs.tools.service.impl;
+
+import cn.hutool.crypto.digest.DigestUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xjs.tools.domain.ToolMd5;
+import com.xjs.tools.mapper.ToolMd5Mapper;
+import com.xjs.tools.service.ToolMd5Service;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ * md5工具service实现
+ * @author xiejs
+ * @since 2022-05-10
+ */
+@Service
+public class ToolMd5ServiceImpl extends ServiceImpl implements ToolMd5Service {
+
+ @Override
+ public ToolMd5 encryption(String str) {
+ String md5Hex32 = DigestUtil.md5Hex(str);
+ String md5Hex16 = DigestUtil.md5Hex16(str);
+
+ ToolMd5 toolMd5 = new ToolMd5();
+ toolMd5.setSource(str);
+ toolMd5.setTarget16(md5Hex16);
+ toolMd5.setTarget32(md5Hex32);
+
+ try {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(ToolMd5::getTarget16, toolMd5.getTarget16())
+ .eq(ToolMd5::getTarget32, toolMd5.getTarget32());
+
+ ToolMd5 one = super.getOne(wrapper, false);
+ if (Objects.isNull(one)) {
+ super.save(toolMd5);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return toolMd5;
+ }
+
+ @Override
+ public String decrypt(String str) {
+ str = str.toLowerCase();
+
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(ToolMd5::getTarget32, str)
+ .or()
+ .eq(ToolMd5::getTarget16, str);
+
+ ToolMd5 one = super.getOne(wrapper, false);
+
+ if (one != null) {
+ return one.getSource();
+ }
+
+ return "";
+ }
+}
diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/todo/TodoList.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/todo/TodoList.java
new file mode 100644
index 00000000..7e03a33e
--- /dev/null
+++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/todo/TodoList.java
@@ -0,0 +1,75 @@
+package com.xjs.domain.todo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.common.core.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 待办对象 todo_list
+ *
+ * @author xiejs
+ * @since 2022-05-07
+ */
+@Data
+public class TodoList implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ private Long id;
+
+ /**
+ * 待办内容
+ */
+ @Excel(name = "待办内容")
+ private String content;
+
+ /**
+ * 颜色 #999999
+ */
+ @Excel(name = "颜色 #999999")
+ private String color;
+
+ /**
+ * 排序
+ */
+ @Excel(name = "排序")
+ private Long sort;
+
+ /**
+ * 截止时间
+ */
+ @Excel(name = "截止时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime;
+
+ /**
+ * 是否完成 1:完成 2:未完成
+ */
+ @Excel(name = "是否完成", readConverterExp = " 1=完成,2=未完成")
+ private Integer success;
+
+ /**
+ * 待办类别id
+ */
+ @Excel(name = "待办类别id")
+ private Long categoryId;
+
+ /**
+ * 创建者
+ */
+ @Excel(name = "创建者")
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private Date createTime;
+
+}