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群: [![加入QQ群](https://img.shields.io/badge/已满-42799195-blue.svg)](https://jq.qq.com/?_wv=1027&k=yqInfq0S) [![加入QQ群](https://img.shields.io/badge/已满-170157040-blue.svg)](https://jq.qq.com/?_wv=1027&k=Oy1mb3p8) [![加入QQ群](https://img.shields.io/badge/已满-130643120-blue.svg)](https://jq.qq.com/?_wv=1027&k=rvxkJtXK) [![加入QQ群](https://img.shields.io/badge/已满-225920371-blue.svg)](https://jq.qq.com/?_wv=1027&k=0Ck3PvTe) [![加入QQ群](https://img.shields.io/badge/已满-201705537-blue.svg)](https://jq.qq.com/?_wv=1027&k=FnHHP4TT) [![加入QQ群](https://img.shields.io/badge/236543183-blue.svg)](https://jq.qq.com/?_wv=1027&k=qdT1Ojpz) 点击按钮入群。 \ No newline at end of file +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-42799195-blue.svg)](https://jq.qq.com/?_wv=1027&k=yqInfq0S) [![加入QQ群](https://img.shields.io/badge/已满-170157040-blue.svg)](https://jq.qq.com/?_wv=1027&k=Oy1mb3p8) [![加入QQ群](https://img.shields.io/badge/已满-130643120-blue.svg)](https://jq.qq.com/?_wv=1027&k=rvxkJtXK) [![加入QQ群](https://img.shields.io/badge/已满-225920371-blue.svg)](https://jq.qq.com/?_wv=1027&k=0Ck3PvTe) [![加入QQ群](https://img.shields.io/badge/已满-201705537-blue.svg)](https://jq.qq.com/?_wv=1027&k=FnHHP4TT) [![加入QQ群](https://img.shields.io/badge/236543183-blue.svg)](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 @@ + + + + + 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 @@ + + + + + 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; + +}