From 1c5e7f5c83fabcd1427a64091e5b66cfdf277d3e Mon Sep 17 00:00:00 2001 From: thinkgem Date: Tue, 16 Jan 2018 22:59:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=85=8D=E7=BD=AE=E7=B1=BB?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=AE=8C=E5=96=84=EF=BC=9B=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=BB=86=E5=8C=96=E6=93=8D=E4=BD=9C=EF=BC=9B=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=A2=84=E7=95=99=E5=AD=97=E6=AE=B5=E6=AF=94=E8=BE=83=E6=96=B0?= =?UTF-8?q?=E6=97=A7=E5=80=BC=E6=95=B0=E6=8D=AE=E5=AD=98=E5=82=A8=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeesite/common/text/DiffMatchPatch.java | 10 +- .../jeesite/test/diff/DiffMatchPatchTest.java | 932 ------------------ modules/core/db/core.erm | 859 ++++++++++------ modules/core/db/oracle/core.sql | 20 +- .../common/shiro/filter/LogoutFilter.java | 3 +- .../common/shiro/realm/AuthorizingRealm.java | 9 +- .../modules/config/web/DruidStatConfig.java | 2 + .../web/interceptor/LogInterceptorConfig.java | 26 +- .../MobileViewInterceptorConfig.java | 22 +- .../com/jeesite/modules/db/InitCoreData.xlsx | Bin 174793 -> 175666 bytes .../com/jeesite/modules/sys/entity/Log.java | 496 +++++----- .../sys/interceptor/LogInterceptor.java | 141 +-- .../jeesite/modules/sys/utils/LogUtils.java | 407 ++++---- .../core/src/main/resources/jeesite-core.yml | 33 +- .../core/src/main/resources/logger-core.xml | 1 + web/.settings/org.eclipse.jdt.core.prefs | 6 +- ....eclipse.wst.common.project.facet.core.xml | 2 +- web/pom.xml | 3 + .../java/com/jeesite/test/InitCoreData.java | 14 +- 19 files changed, 1164 insertions(+), 1822 deletions(-) delete mode 100644 common/src/test/java/com/jeesite/test/diff/DiffMatchPatchTest.java rename {web => modules/core}/src/main/java/com/jeesite/modules/config/web/DruidStatConfig.java (85%) rename {web => modules/core}/src/main/java/com/jeesite/modules/config/web/interceptor/LogInterceptorConfig.java (57%) rename {web => modules/core}/src/main/java/com/jeesite/modules/config/web/interceptor/MobileViewInterceptorConfig.java (51%) diff --git a/common/src/main/java/com/jeesite/common/text/DiffMatchPatch.java b/common/src/main/java/com/jeesite/common/text/DiffMatchPatch.java index 1f987b7f..f0f70a53 100644 --- a/common/src/main/java/com/jeesite/common/text/DiffMatchPatch.java +++ b/common/src/main/java/com/jeesite/common/text/DiffMatchPatch.java @@ -16,8 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package com.jeesite.test.diff; +package com.jeesite.common.text; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -45,7 +44,7 @@ import java.util.regex.Pattern; * Class containing the diff, match and patch methods. * Also contains the behaviour settings. */ -public class diff_match_patch { +public class DiffMatchPatch { // Defaults. // Set these on your diff_match_patch instance to override the defaults. @@ -1340,8 +1339,9 @@ public class diff_match_patch { public String diff_prettyHtml(LinkedList diffs) { StringBuilder html = new StringBuilder(); for (Diff aDiff : diffs) { - String text = aDiff.text.replace("&", "&").replace("<", "<") - .replace(">", ">").replace("\n", "¶
"); + String text = aDiff.text; +// text = text.replace("&", "&").replace("<", "<") +// .replace(">", ">").replace("\n", "
"); switch (aDiff.operation) { case INSERT: html.append("").append(text) diff --git a/common/src/test/java/com/jeesite/test/diff/DiffMatchPatchTest.java b/common/src/test/java/com/jeesite/test/diff/DiffMatchPatchTest.java deleted file mode 100644 index 03ca99ce..00000000 --- a/common/src/test/java/com/jeesite/test/diff/DiffMatchPatchTest.java +++ /dev/null @@ -1,932 +0,0 @@ -/* - * Test harness for diff_match_patch.java - * - * Copyright 2006 Google Inc. - * http://code.google.com/p/google-diff-match-patch/ - * - * 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 com.jeesite.test.diff; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import com.jeesite.test.diff.diff_match_patch.Diff; -import com.jeesite.test.diff.diff_match_patch.LinesToCharsResult; -import com.jeesite.test.diff.diff_match_patch.Patch; - -@SuppressWarnings("deprecation") -public class diff_match_patch_test extends TestCase { - - private diff_match_patch dmp; - private diff_match_patch.Operation DELETE = diff_match_patch.Operation.DELETE; - private diff_match_patch.Operation EQUAL = diff_match_patch.Operation.EQUAL; - private diff_match_patch.Operation INSERT = diff_match_patch.Operation.INSERT; - - @Override -protected void setUp() { - // Create an instance of the diff_match_patch object. - dmp = new diff_match_patch(); - } - - - // DIFF TEST FUNCTIONS - - - public void testDiffCommonPrefix() { - // Detect any common prefix. - assertEquals("diff_commonPrefix: Null case.", 0, dmp.diff_commonPrefix("abc", "xyz")); - - assertEquals("diff_commonPrefix: Non-null case.", 4, dmp.diff_commonPrefix("1234abcdef", "1234xyz")); - - assertEquals("diff_commonPrefix: Whole case.", 4, dmp.diff_commonPrefix("1234", "1234xyz")); - } - - public void testDiffCommonSuffix() { - // Detect any common suffix. - assertEquals("diff_commonSuffix: Null case.", 0, dmp.diff_commonSuffix("abc", "xyz")); - - assertEquals("diff_commonSuffix: Non-null case.", 4, dmp.diff_commonSuffix("abcdef1234", "xyz1234")); - - assertEquals("diff_commonSuffix: Whole case.", 4, dmp.diff_commonSuffix("1234", "xyz1234")); - } - - public void testDiffCommonOverlap() { - // Detect any suffix/prefix overlap. - assertEquals("diff_commonOverlap: Null case.", 0, dmp.diff_commonOverlap("", "abcd")); - - assertEquals("diff_commonOverlap: Whole case.", 3, dmp.diff_commonOverlap("abc", "abcd")); - - assertEquals("diff_commonOverlap: No overlap.", 0, dmp.diff_commonOverlap("123456", "abcd")); - - assertEquals("diff_commonOverlap: Overlap.", 3, dmp.diff_commonOverlap("123456xxx", "xxxabcd")); - - // Some overly clever languages (C#) may treat ligatures as equal to their - // component letters. E.g. U+FB01 == 'fi' - assertEquals("diff_commonOverlap: Unicode.", 0, dmp.diff_commonOverlap("fi", "\ufb01i")); - } - - public void testDiffHalfmatch() { - // Detect a halfmatch. - dmp.Diff_Timeout = 1; - assertNull("diff_halfMatch: No match #1.", dmp.diff_halfMatch("1234567890", "abcdef")); - - assertNull("diff_halfMatch: No match #2.", dmp.diff_halfMatch("12345", "23")); - - assertArrayEquals("diff_halfMatch: Single Match #1.", new String[]{"12", "90", "a", "z", "345678"}, dmp.diff_halfMatch("1234567890", "a345678z")); - - assertArrayEquals("diff_halfMatch: Single Match #2.", new String[]{"a", "z", "12", "90", "345678"}, dmp.diff_halfMatch("a345678z", "1234567890")); - - assertArrayEquals("diff_halfMatch: Single Match #3.", new String[]{"abc", "z", "1234", "0", "56789"}, dmp.diff_halfMatch("abc56789z", "1234567890")); - - assertArrayEquals("diff_halfMatch: Single Match #4.", new String[]{"a", "xyz", "1", "7890", "23456"}, dmp.diff_halfMatch("a23456xyz", "1234567890")); - - assertArrayEquals("diff_halfMatch: Multiple Matches #1.", new String[]{"12123", "123121", "a", "z", "1234123451234"}, dmp.diff_halfMatch("121231234123451234123121", "a1234123451234z")); - - assertArrayEquals("diff_halfMatch: Multiple Matches #2.", new String[]{"", "-=-=-=-=-=", "x", "", "x-=-=-=-=-=-=-="}, dmp.diff_halfMatch("x-=-=-=-=-=-=-=-=-=-=-=-=", "xx-=-=-=-=-=-=-=")); - - assertArrayEquals("diff_halfMatch: Multiple Matches #3.", new String[]{"-=-=-=-=-=", "", "", "y", "-=-=-=-=-=-=-=y"}, dmp.diff_halfMatch("-=-=-=-=-=-=-=-=-=-=-=-=y", "-=-=-=-=-=-=-=yy")); - - // Optimal diff would be -q+x=H-i+e=lloHe+Hu=llo-Hew+y not -qHillo+x=HelloHe-w+Hulloy - assertArrayEquals("diff_halfMatch: Non-optimal halfmatch.", new String[]{"qHillo", "w", "x", "Hulloy", "HelloHe"}, dmp.diff_halfMatch("qHilloHelloHew", "xHelloHeHulloy")); - - dmp.Diff_Timeout = 0; - assertNull("diff_halfMatch: Optimal no halfmatch.", dmp.diff_halfMatch("qHilloHelloHew", "xHelloHeHulloy")); - } - - public void testDiffLinesToChars() { - // Convert lines down to characters. - ArrayList tmpVector = new ArrayList(); - tmpVector.add(""); - tmpVector.add("alpha\n"); - tmpVector.add("beta\n"); - assertLinesToCharsResultEquals("diff_linesToChars: Shared lines.", new LinesToCharsResult("\u0001\u0002\u0001", "\u0002\u0001\u0002", tmpVector), dmp.diff_linesToChars("alpha\nbeta\nalpha\n", "beta\nalpha\nbeta\n")); - - tmpVector.clear(); - tmpVector.add(""); - tmpVector.add("alpha\r\n"); - tmpVector.add("beta\r\n"); - tmpVector.add("\r\n"); - assertLinesToCharsResultEquals("diff_linesToChars: Empty string and blank lines.", new LinesToCharsResult("", "\u0001\u0002\u0003\u0003", tmpVector), dmp.diff_linesToChars("", "alpha\r\nbeta\r\n\r\n\r\n")); - - tmpVector.clear(); - tmpVector.add(""); - tmpVector.add("a"); - tmpVector.add("b"); - assertLinesToCharsResultEquals("diff_linesToChars: No linebreaks.", new LinesToCharsResult("\u0001", "\u0002", tmpVector), dmp.diff_linesToChars("a", "b")); - - // More than 256 to reveal any 8-bit limitations. - int n = 300; - tmpVector.clear(); - StringBuilder lineList = new StringBuilder(); - StringBuilder charList = new StringBuilder(); - for (int x = 1; x < n + 1; x++) { - tmpVector.add(x + "\n"); - lineList.append(x + "\n"); - charList.append(String.valueOf((char) x)); - } - assertEquals(n, tmpVector.size()); - String lines = lineList.toString(); - String chars = charList.toString(); - assertEquals(n, chars.length()); - tmpVector.add(0, ""); - assertLinesToCharsResultEquals("diff_linesToChars: More than 256.", new LinesToCharsResult(chars, "", tmpVector), dmp.diff_linesToChars(lines, "")); - } - - public void testDiffCharsToLines() { - // First check that Diff equality works. - assertTrue("diff_charsToLines: Equality #1.", new Diff(EQUAL, "a").equals(new Diff(EQUAL, "a"))); - - assertEquals("diff_charsToLines: Equality #2.", new Diff(EQUAL, "a"), new Diff(EQUAL, "a")); - - // Convert chars up to lines. - LinkedList diffs = diffList(new Diff(EQUAL, "\u0001\u0002\u0001"), new Diff(INSERT, "\u0002\u0001\u0002")); - ArrayList tmpVector = new ArrayList(); - tmpVector.add(""); - tmpVector.add("alpha\n"); - tmpVector.add("beta\n"); - dmp.diff_charsToLines(diffs, tmpVector); - assertEquals("diff_charsToLines: Shared lines.", diffList(new Diff(EQUAL, "alpha\nbeta\nalpha\n"), new Diff(INSERT, "beta\nalpha\nbeta\n")), diffs); - - // More than 256 to reveal any 8-bit limitations. - int n = 300; - tmpVector.clear(); - StringBuilder lineList = new StringBuilder(); - StringBuilder charList = new StringBuilder(); - for (int x = 1; x < n + 1; x++) { - tmpVector.add(x + "\n"); - lineList.append(x + "\n"); - charList.append(String.valueOf((char) x)); - } - assertEquals(n, tmpVector.size()); - String lines = lineList.toString(); - String chars = charList.toString(); - assertEquals(n, chars.length()); - tmpVector.add(0, ""); - diffs = diffList(new Diff(DELETE, chars)); - dmp.diff_charsToLines(diffs, tmpVector); - assertEquals("diff_charsToLines: More than 256.", diffList(new Diff(DELETE, lines)), diffs); - } - - public void testDiffCleanupMerge() { - // Cleanup a messy diff. - LinkedList diffs = diffList(); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Null case.", diffList(), diffs); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "b"), new Diff(INSERT, "c")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: No change case.", diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "b"), new Diff(INSERT, "c")), diffs); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(EQUAL, "b"), new Diff(EQUAL, "c")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Merge equalities.", diffList(new Diff(EQUAL, "abc")), diffs); - - diffs = diffList(new Diff(DELETE, "a"), new Diff(DELETE, "b"), new Diff(DELETE, "c")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Merge deletions.", diffList(new Diff(DELETE, "abc")), diffs); - - diffs = diffList(new Diff(INSERT, "a"), new Diff(INSERT, "b"), new Diff(INSERT, "c")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Merge insertions.", diffList(new Diff(INSERT, "abc")), diffs); - - diffs = diffList(new Diff(DELETE, "a"), new Diff(INSERT, "b"), new Diff(DELETE, "c"), new Diff(INSERT, "d"), new Diff(EQUAL, "e"), new Diff(EQUAL, "f")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Merge interweave.", diffList(new Diff(DELETE, "ac"), new Diff(INSERT, "bd"), new Diff(EQUAL, "ef")), diffs); - - diffs = diffList(new Diff(DELETE, "a"), new Diff(INSERT, "abc"), new Diff(DELETE, "dc")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Prefix and suffix detection.", diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "d"), new Diff(INSERT, "b"), new Diff(EQUAL, "c")), diffs); - - diffs = diffList(new Diff(EQUAL, "x"), new Diff(DELETE, "a"), new Diff(INSERT, "abc"), new Diff(DELETE, "dc"), new Diff(EQUAL, "y")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Prefix and suffix detection with equalities.", diffList(new Diff(EQUAL, "xa"), new Diff(DELETE, "d"), new Diff(INSERT, "b"), new Diff(EQUAL, "cy")), diffs); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(INSERT, "ba"), new Diff(EQUAL, "c")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Slide edit left.", diffList(new Diff(INSERT, "ab"), new Diff(EQUAL, "ac")), diffs); - - diffs = diffList(new Diff(EQUAL, "c"), new Diff(INSERT, "ab"), new Diff(EQUAL, "a")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Slide edit right.", diffList(new Diff(EQUAL, "ca"), new Diff(INSERT, "ba")), diffs); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "b"), new Diff(EQUAL, "c"), new Diff(DELETE, "ac"), new Diff(EQUAL, "x")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Slide edit left recursive.", diffList(new Diff(DELETE, "abc"), new Diff(EQUAL, "acx")), diffs); - - diffs = diffList(new Diff(EQUAL, "x"), new Diff(DELETE, "ca"), new Diff(EQUAL, "c"), new Diff(DELETE, "b"), new Diff(EQUAL, "a")); - dmp.diff_cleanupMerge(diffs); - assertEquals("diff_cleanupMerge: Slide edit right recursive.", diffList(new Diff(EQUAL, "xca"), new Diff(DELETE, "cba")), diffs); - } - - public void testDiffCleanupSemanticLossless() { - // Slide diffs to match logical boundaries. - LinkedList diffs = diffList(); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Null case.", diffList(), diffs); - - diffs = diffList(new Diff(EQUAL, "AAA\r\n\r\nBBB"), new Diff(INSERT, "\r\nDDD\r\n\r\nBBB"), new Diff(EQUAL, "\r\nEEE")); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Blank lines.", diffList(new Diff(EQUAL, "AAA\r\n\r\n"), new Diff(INSERT, "BBB\r\nDDD\r\n\r\n"), new Diff(EQUAL, "BBB\r\nEEE")), diffs); - - diffs = diffList(new Diff(EQUAL, "AAA\r\nBBB"), new Diff(INSERT, " DDD\r\nBBB"), new Diff(EQUAL, " EEE")); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Line boundaries.", diffList(new Diff(EQUAL, "AAA\r\n"), new Diff(INSERT, "BBB DDD\r\n"), new Diff(EQUAL, "BBB EEE")), diffs); - - diffs = diffList(new Diff(EQUAL, "The c"), new Diff(INSERT, "ow and the c"), new Diff(EQUAL, "at.")); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Word boundaries.", diffList(new Diff(EQUAL, "The "), new Diff(INSERT, "cow and the "), new Diff(EQUAL, "cat.")), diffs); - - diffs = diffList(new Diff(EQUAL, "The-c"), new Diff(INSERT, "ow-and-the-c"), new Diff(EQUAL, "at.")); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Alphanumeric boundaries.", diffList(new Diff(EQUAL, "The-"), new Diff(INSERT, "cow-and-the-"), new Diff(EQUAL, "cat.")), diffs); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "a"), new Diff(EQUAL, "ax")); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Hitting the start.", diffList(new Diff(DELETE, "a"), new Diff(EQUAL, "aax")), diffs); - - diffs = diffList(new Diff(EQUAL, "xa"), new Diff(DELETE, "a"), new Diff(EQUAL, "a")); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Hitting the end.", diffList(new Diff(EQUAL, "xaa"), new Diff(DELETE, "a")), diffs); - - diffs = diffList(new Diff(EQUAL, "The xxx. The "), new Diff(INSERT, "zzz. The "), new Diff(EQUAL, "yyy.")); - dmp.diff_cleanupSemanticLossless(diffs); - assertEquals("diff_cleanupSemanticLossless: Sentence boundaries.", diffList(new Diff(EQUAL, "The xxx."), new Diff(INSERT, " The zzz."), new Diff(EQUAL, " The yyy.")), diffs); - } - - public void testDiffCleanupSemantic() { - // Cleanup semantically trivial equalities. - LinkedList diffs = diffList(); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Null case.", diffList(), diffs); - - diffs = diffList(new Diff(DELETE, "ab"), new Diff(INSERT, "cd"), new Diff(EQUAL, "12"), new Diff(DELETE, "e")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: No elimination #1.", diffList(new Diff(DELETE, "ab"), new Diff(INSERT, "cd"), new Diff(EQUAL, "12"), new Diff(DELETE, "e")), diffs); - - diffs = diffList(new Diff(DELETE, "abc"), new Diff(INSERT, "ABC"), new Diff(EQUAL, "1234"), new Diff(DELETE, "wxyz")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: No elimination #2.", diffList(new Diff(DELETE, "abc"), new Diff(INSERT, "ABC"), new Diff(EQUAL, "1234"), new Diff(DELETE, "wxyz")), diffs); - - diffs = diffList(new Diff(DELETE, "a"), new Diff(EQUAL, "b"), new Diff(DELETE, "c")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Simple elimination.", diffList(new Diff(DELETE, "abc"), new Diff(INSERT, "b")), diffs); - - diffs = diffList(new Diff(DELETE, "ab"), new Diff(EQUAL, "cd"), new Diff(DELETE, "e"), new Diff(EQUAL, "f"), new Diff(INSERT, "g")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Backpass elimination.", diffList(new Diff(DELETE, "abcdef"), new Diff(INSERT, "cdfg")), diffs); - - diffs = diffList(new Diff(INSERT, "1"), new Diff(EQUAL, "A"), new Diff(DELETE, "B"), new Diff(INSERT, "2"), new Diff(EQUAL, "_"), new Diff(INSERT, "1"), new Diff(EQUAL, "A"), new Diff(DELETE, "B"), new Diff(INSERT, "2")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Multiple elimination.", diffList(new Diff(DELETE, "AB_AB"), new Diff(INSERT, "1A2_1A2")), diffs); - - diffs = diffList(new Diff(EQUAL, "The c"), new Diff(DELETE, "ow and the c"), new Diff(EQUAL, "at.")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Word boundaries.", diffList(new Diff(EQUAL, "The "), new Diff(DELETE, "cow and the "), new Diff(EQUAL, "cat.")), diffs); - - diffs = diffList(new Diff(DELETE, "abcxx"), new Diff(INSERT, "xxdef")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: No overlap elimination.", diffList(new Diff(DELETE, "abcxx"), new Diff(INSERT, "xxdef")), diffs); - - diffs = diffList(new Diff(DELETE, "abcxxx"), new Diff(INSERT, "xxxdef")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Overlap elimination.", diffList(new Diff(DELETE, "abc"), new Diff(EQUAL, "xxx"), new Diff(INSERT, "def")), diffs); - - diffs = diffList(new Diff(DELETE, "xxxabc"), new Diff(INSERT, "defxxx")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Reverse overlap elimination.", diffList(new Diff(INSERT, "def"), new Diff(EQUAL, "xxx"), new Diff(DELETE, "abc")), diffs); - - diffs = diffList(new Diff(DELETE, "abcd1212"), new Diff(INSERT, "1212efghi"), new Diff(EQUAL, "----"), new Diff(DELETE, "A3"), new Diff(INSERT, "3BC")); - dmp.diff_cleanupSemantic(diffs); - assertEquals("diff_cleanupSemantic: Two overlap eliminations.", diffList(new Diff(DELETE, "abcd"), new Diff(EQUAL, "1212"), new Diff(INSERT, "efghi"), new Diff(EQUAL, "----"), new Diff(DELETE, "A"), new Diff(EQUAL, "3"), new Diff(INSERT, "BC")), diffs); - } - - public void testDiffCleanupEfficiency() { - // Cleanup operationally trivial equalities. - dmp.Diff_EditCost = 4; - LinkedList diffs = diffList(); - dmp.diff_cleanupEfficiency(diffs); - assertEquals("diff_cleanupEfficiency: Null case.", diffList(), diffs); - System.out.println(dmp.diff_prettyHtml(diffs)); - - diffs = diffList(new Diff(DELETE, "ab"), new Diff(INSERT, "12"), new Diff(EQUAL, "wxyz"), new Diff(DELETE, "cd"), new Diff(INSERT, "34")); - dmp.diff_cleanupEfficiency(diffs); - assertEquals("diff_cleanupEfficiency: No elimination.", diffList(new Diff(DELETE, "ab"), new Diff(INSERT, "12"), new Diff(EQUAL, "wxyz"), new Diff(DELETE, "cd"), new Diff(INSERT, "34")), diffs); - System.out.println(dmp.diff_prettyHtml(diffs)); - - diffs = diffList(new Diff(DELETE, "ab"), new Diff(INSERT, "12"), new Diff(EQUAL, "xyz"), new Diff(DELETE, "cd"), new Diff(INSERT, "34")); - dmp.diff_cleanupEfficiency(diffs); - assertEquals("diff_cleanupEfficiency: Four-edit elimination.", diffList(new Diff(DELETE, "abxyzcd"), new Diff(INSERT, "12xyz34")), diffs); - System.out.println(dmp.diff_prettyHtml(diffs)); - - diffs = diffList(new Diff(INSERT, "12"), new Diff(EQUAL, "x"), new Diff(DELETE, "cd"), new Diff(INSERT, "34")); - dmp.diff_cleanupEfficiency(diffs); - assertEquals("diff_cleanupEfficiency: Three-edit elimination.", diffList(new Diff(DELETE, "xcd"), new Diff(INSERT, "12x34")), diffs); - System.out.println(dmp.diff_prettyHtml(diffs)); - - diffs = diffList(new Diff(DELETE, "ab"), new Diff(INSERT, "12"), new Diff(EQUAL, "xy"), new Diff(INSERT, "34"), new Diff(EQUAL, "z"), new Diff(DELETE, "cd"), new Diff(INSERT, "56")); - dmp.diff_cleanupEfficiency(diffs); - assertEquals("diff_cleanupEfficiency: Backpass elimination.", diffList(new Diff(DELETE, "abxyzcd"), new Diff(INSERT, "12xy34z56")), diffs); - System.out.println(dmp.diff_prettyHtml(diffs)); - - dmp.Diff_EditCost = 5; - diffs = diffList(new Diff(DELETE, "ab"), new Diff(INSERT, "12"), new Diff(EQUAL, "wxyz"), new Diff(DELETE, "cd"), new Diff(INSERT, "34")); - dmp.diff_cleanupEfficiency(diffs); - assertEquals("diff_cleanupEfficiency: High cost elimination.", diffList(new Diff(DELETE, "abwxyzcd"), new Diff(INSERT, "12wxyz34")), diffs); - dmp.Diff_EditCost = 4; - System.out.println(dmp.diff_prettyHtml(diffs)); - } - - public void testDiffPrettyHtml() { - // Pretty print. - LinkedList diffs = diffList(new Diff(EQUAL, "a\n"), new Diff(DELETE, "b"), new Diff(INSERT, "c&d")); - assertEquals("diff_prettyHtml:", "
<B>b</B>c&d", dmp.diff_prettyHtml(diffs)); - } - - public void testDiffText() { - // Compute the source and destination texts. - LinkedList diffs = diffList(new Diff(EQUAL, "jump"), new Diff(DELETE, "s"), new Diff(INSERT, "ed"), new Diff(EQUAL, " over "), new Diff(DELETE, "the"), new Diff(INSERT, "a"), new Diff(EQUAL, " lazy")); - assertEquals("diff_text1:", "jumps over the lazy", dmp.diff_text1(diffs)); - assertEquals("diff_text2:", "jumped over a lazy", dmp.diff_text2(diffs)); - } - - public void testDiffDelta() { - // Convert a diff into delta string. - LinkedList diffs = diffList(new Diff(EQUAL, "jump"), new Diff(DELETE, "s"), new Diff(INSERT, "ed"), new Diff(EQUAL, " over "), new Diff(DELETE, "the"), new Diff(INSERT, "a"), new Diff(EQUAL, " lazy"), new Diff(INSERT, "old dog")); - String text1 = dmp.diff_text1(diffs); - assertEquals("diff_text1: Base text.", "jumps over the lazy", text1); - - String delta = dmp.diff_toDelta(diffs); - assertEquals("diff_toDelta:", "=4\t-1\t+ed\t=6\t-3\t+a\t=5\t+old dog", delta); - - // Convert delta string into a diff. - assertEquals("diff_fromDelta: Normal.", diffs, dmp.diff_fromDelta(text1, delta)); - - // Generates error (19 < 20). - try { - dmp.diff_fromDelta(text1 + "x", delta); - fail("diff_fromDelta: Too long."); - } catch (IllegalArgumentException ex) { - // Exception expected. - } - - // Generates error (19 > 18). - try { - dmp.diff_fromDelta(text1.substring(1), delta); - fail("diff_fromDelta: Too short."); - } catch (IllegalArgumentException ex) { - // Exception expected. - } - - // Generates error (%c3%xy invalid Unicode). - try { - dmp.diff_fromDelta("", "+%c3%xy"); - fail("diff_fromDelta: Invalid character."); - } catch (IllegalArgumentException ex) { - // Exception expected. - } - - // Test deltas with special characters. - diffs = diffList(new Diff(EQUAL, "\u0680 \000 \t %"), new Diff(DELETE, "\u0681 \001 \n ^"), new Diff(INSERT, "\u0682 \002 \\ |")); - text1 = dmp.diff_text1(diffs); - assertEquals("diff_text1: Unicode text.", "\u0680 \000 \t %\u0681 \001 \n ^", text1); - - delta = dmp.diff_toDelta(diffs); - assertEquals("diff_toDelta: Unicode.", "=7\t-7\t+%DA%82 %02 %5C %7C", delta); - - assertEquals("diff_fromDelta: Unicode.", diffs, dmp.diff_fromDelta(text1, delta)); - - // Verify pool of unchanged characters. - diffs = diffList(new Diff(INSERT, "A-Z a-z 0-9 - _ . ! ~ * ' ( ) ; / ? : @ & = + $ , # ")); - String text2 = dmp.diff_text2(diffs); - assertEquals("diff_text2: Unchanged characters.", "A-Z a-z 0-9 - _ . ! ~ * \' ( ) ; / ? : @ & = + $ , # ", text2); - - delta = dmp.diff_toDelta(diffs); - assertEquals("diff_toDelta: Unchanged characters.", "+A-Z a-z 0-9 - _ . ! ~ * \' ( ) ; / ? : @ & = + $ , # ", delta); - - // Convert delta string into a diff. - assertEquals("diff_fromDelta: Unchanged characters.", diffs, dmp.diff_fromDelta("", delta)); - } - - public void testDiffXIndex() { - // Translate a location in text1 to text2. - LinkedList diffs = diffList(new Diff(DELETE, "a"), new Diff(INSERT, "1234"), new Diff(EQUAL, "xyz")); - assertEquals("diff_xIndex: Translation on equality.", 5, dmp.diff_xIndex(diffs, 2)); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "1234"), new Diff(EQUAL, "xyz")); - assertEquals("diff_xIndex: Translation on deletion.", 1, dmp.diff_xIndex(diffs, 3)); - } - - public void testDiffLevenshtein() { - LinkedList diffs = diffList(new Diff(DELETE, "abc"), new Diff(INSERT, "1234"), new Diff(EQUAL, "xyz")); - assertEquals("Levenshtein with trailing equality.", 4, dmp.diff_levenshtein(diffs)); - - diffs = diffList(new Diff(EQUAL, "xyz"), new Diff(DELETE, "abc"), new Diff(INSERT, "1234")); - assertEquals("Levenshtein with leading equality.", 4, dmp.diff_levenshtein(diffs)); - - diffs = diffList(new Diff(DELETE, "abc"), new Diff(EQUAL, "xyz"), new Diff(INSERT, "1234")); - assertEquals("Levenshtein with middle equality.", 7, dmp.diff_levenshtein(diffs)); - } - - public void testDiffBisect() { - // Normal. - String a = "cat"; - String b = "map"; - // Since the resulting diff hasn't been normalized, it would be ok if - // the insertion and deletion pairs are swapped. - // If the order changes, tweak this test as required. - LinkedList diffs = diffList(new Diff(DELETE, "c"), new Diff(INSERT, "m"), new Diff(EQUAL, "a"), new Diff(DELETE, "t"), new Diff(INSERT, "p")); - assertEquals("diff_bisect: Normal.", diffs, dmp.diff_bisect(a, b, Long.MAX_VALUE)); - - // Timeout. - diffs = diffList(new Diff(DELETE, "cat"), new Diff(INSERT, "map")); - assertEquals("diff_bisect: Timeout.", diffs, dmp.diff_bisect(a, b, 0)); - } - - public void testDiffMain() { - // Perform a trivial diff. - LinkedList diffs = diffList(); - assertEquals("diff_main: Null case.", diffs, dmp.diff_main("", "", false)); - - diffs = diffList(new Diff(EQUAL, "abc")); - assertEquals("diff_main: Equality.", diffs, dmp.diff_main("abc", "abc", false)); - - diffs = diffList(new Diff(EQUAL, "ab"), new Diff(INSERT, "123"), new Diff(EQUAL, "c")); - assertEquals("diff_main: Simple insertion.", diffs, dmp.diff_main("abc", "ab123c", false)); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "123"), new Diff(EQUAL, "bc")); - assertEquals("diff_main: Simple deletion.", diffs, dmp.diff_main("a123bc", "abc", false)); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(INSERT, "123"), new Diff(EQUAL, "b"), new Diff(INSERT, "456"), new Diff(EQUAL, "c")); - assertEquals("diff_main: Two insertions.", diffs, dmp.diff_main("abc", "a123b456c", false)); - - diffs = diffList(new Diff(EQUAL, "a"), new Diff(DELETE, "123"), new Diff(EQUAL, "b"), new Diff(DELETE, "456"), new Diff(EQUAL, "c")); - assertEquals("diff_main: Two deletions.", diffs, dmp.diff_main("a123b456c", "abc", false)); - - // Perform a real diff. - // Switch off the timeout. - dmp.Diff_Timeout = 0; - diffs = diffList(new Diff(DELETE, "a"), new Diff(INSERT, "b")); - assertEquals("diff_main: Simple case #1.", diffs, dmp.diff_main("a", "b", false)); - - diffs = diffList(new Diff(DELETE, "Apple"), new Diff(INSERT, "Banana"), new Diff(EQUAL, "s are a"), new Diff(INSERT, "lso"), new Diff(EQUAL, " fruit.")); - assertEquals("diff_main: Simple case #2.", diffs, dmp.diff_main("Apples are a fruit.", "Bananas are also fruit.", false)); - - diffs = diffList(new Diff(DELETE, "a"), new Diff(INSERT, "\u0680"), new Diff(EQUAL, "x"), new Diff(DELETE, "\t"), new Diff(INSERT, "\000")); - assertEquals("diff_main: Simple case #3.", diffs, dmp.diff_main("ax\t", "\u0680x\000", false)); - - diffs = diffList(new Diff(DELETE, "1"), new Diff(EQUAL, "a"), new Diff(DELETE, "y"), new Diff(EQUAL, "b"), new Diff(DELETE, "2"), new Diff(INSERT, "xab")); - assertEquals("diff_main: Overlap #1.", diffs, dmp.diff_main("1ayb2", "abxab", false)); - - diffs = diffList(new Diff(INSERT, "xaxcx"), new Diff(EQUAL, "abc"), new Diff(DELETE, "y")); - assertEquals("diff_main: Overlap #2.", diffs, dmp.diff_main("abcy", "xaxcxabc", false)); - - diffs = diffList(new Diff(DELETE, "ABCD"), new Diff(EQUAL, "a"), new Diff(DELETE, "="), new Diff(INSERT, "-"), new Diff(EQUAL, "bcd"), new Diff(DELETE, "="), new Diff(INSERT, "-"), new Diff(EQUAL, "efghijklmnopqrs"), new Diff(DELETE, "EFGHIJKLMNOefg")); - assertEquals("diff_main: Overlap #3.", diffs, dmp.diff_main("ABCDa=bcd=efghijklmnopqrsEFGHIJKLMNOefg", "a-bcd-efghijklmnopqrs", false)); - - diffs = diffList(new Diff(INSERT, " "), new Diff(EQUAL, "a"), new Diff(INSERT, "nd"), new Diff(EQUAL, " [[Pennsylvania]]"), new Diff(DELETE, " and [[New")); - assertEquals("diff_main: Large equality.", diffs, dmp.diff_main("a [[Pennsylvania]] and [[New", " and [[Pennsylvania]]", false)); - - dmp.Diff_Timeout = 0.1f; // 100ms - String a = "`Twas brillig, and the slithy toves\nDid gyre and gimble in the wabe:\nAll mimsy were the borogoves,\nAnd the mome raths outgrabe.\n"; - String b = "I am the very model of a modern major general,\nI've information vegetable, animal, and mineral,\nI know the kings of England, and I quote the fights historical,\nFrom Marathon to Waterloo, in order categorical.\n"; - // Increase the text lengths by 1024 times to ensure a timeout. - for (int x = 0; x < 10; x++) { - a = a + a; - b = b + b; - } - long startTime = System.currentTimeMillis(); - dmp.diff_main(a, b); - long endTime = System.currentTimeMillis(); - // Test that we took at least the timeout period. - assertTrue("diff_main: Timeout min.", dmp.Diff_Timeout * 1000 <= endTime - startTime); - // Test that we didn't take forever (be forgiving). - // Theoretically this test could fail very occasionally if the - // OS task swaps or locks up for a second at the wrong moment. - assertTrue("diff_main: Timeout max.", dmp.Diff_Timeout * 1000 * 2 > endTime - startTime); - dmp.Diff_Timeout = 0; - - // Test the linemode speedup. - // Must be long to pass the 100 char cutoff. - a = "1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n"; - b = "abcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\nabcdefghij\n"; - assertEquals("diff_main: Simple line-mode.", dmp.diff_main(a, b, true), dmp.diff_main(a, b, false)); - - a = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; - b = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"; - assertEquals("diff_main: Single line-mode.", dmp.diff_main(a, b, true), dmp.diff_main(a, b, false)); - - a = "1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n1234567890\n"; - b = "abcdefghij\n1234567890\n1234567890\n1234567890\nabcdefghij\n1234567890\n1234567890\n1234567890\nabcdefghij\n1234567890\n1234567890\n1234567890\nabcdefghij\n"; - String[] texts_linemode = diff_rebuildtexts(dmp.diff_main(a, b, true)); - String[] texts_textmode = diff_rebuildtexts(dmp.diff_main(a, b, false)); - assertArrayEquals("diff_main: Overlap line-mode.", texts_textmode, texts_linemode); - - // Test null inputs. - try { - dmp.diff_main(null, null); - fail("diff_main: Null inputs."); - } catch (IllegalArgumentException ex) { - // Error expected. - } - } - - - // MATCH TEST FUNCTIONS - - - public void testMatchAlphabet() { - // Initialise the bitmasks for Bitap. - Map bitmask; - bitmask = new HashMap(); - bitmask.put('a', 4); bitmask.put('b', 2); bitmask.put('c', 1); - assertEquals("match_alphabet: Unique.", bitmask, dmp.match_alphabet("abc")); - - bitmask = new HashMap(); - bitmask.put('a', 37); bitmask.put('b', 18); bitmask.put('c', 8); - assertEquals("match_alphabet: Duplicates.", bitmask, dmp.match_alphabet("abcaba")); - } - - public void testMatchBitap() { - // Bitap algorithm. - dmp.Match_Distance = 100; - dmp.Match_Threshold = 0.5f; - assertEquals("match_bitap: Exact match #1.", 5, dmp.match_bitap("abcdefghijk", "fgh", 5)); - - assertEquals("match_bitap: Exact match #2.", 5, dmp.match_bitap("abcdefghijk", "fgh", 0)); - - assertEquals("match_bitap: Fuzzy match #1.", 4, dmp.match_bitap("abcdefghijk", "efxhi", 0)); - - assertEquals("match_bitap: Fuzzy match #2.", 2, dmp.match_bitap("abcdefghijk", "cdefxyhijk", 5)); - - assertEquals("match_bitap: Fuzzy match #3.", -1, dmp.match_bitap("abcdefghijk", "bxy", 1)); - - assertEquals("match_bitap: Overflow.", 2, dmp.match_bitap("123456789xx0", "3456789x0", 2)); - - assertEquals("match_bitap: Before start match.", 0, dmp.match_bitap("abcdef", "xxabc", 4)); - - assertEquals("match_bitap: Beyond end match.", 3, dmp.match_bitap("abcdef", "defyy", 4)); - - assertEquals("match_bitap: Oversized pattern.", 0, dmp.match_bitap("abcdef", "xabcdefy", 0)); - - dmp.Match_Threshold = 0.4f; - assertEquals("match_bitap: Threshold #1.", 4, dmp.match_bitap("abcdefghijk", "efxyhi", 1)); - - dmp.Match_Threshold = 0.3f; - assertEquals("match_bitap: Threshold #2.", -1, dmp.match_bitap("abcdefghijk", "efxyhi", 1)); - - dmp.Match_Threshold = 0.0f; - assertEquals("match_bitap: Threshold #3.", 1, dmp.match_bitap("abcdefghijk", "bcdef", 1)); - - dmp.Match_Threshold = 0.5f; - assertEquals("match_bitap: Multiple select #1.", 0, dmp.match_bitap("abcdexyzabcde", "abccde", 3)); - - assertEquals("match_bitap: Multiple select #2.", 8, dmp.match_bitap("abcdexyzabcde", "abccde", 5)); - - dmp.Match_Distance = 10; // Strict location. - assertEquals("match_bitap: Distance test #1.", -1, dmp.match_bitap("abcdefghijklmnopqrstuvwxyz", "abcdefg", 24)); - - assertEquals("match_bitap: Distance test #2.", 0, dmp.match_bitap("abcdefghijklmnopqrstuvwxyz", "abcdxxefg", 1)); - - dmp.Match_Distance = 1000; // Loose location. - assertEquals("match_bitap: Distance test #3.", 0, dmp.match_bitap("abcdefghijklmnopqrstuvwxyz", "abcdefg", 24)); - } - - public void testMatchMain() { - // Full match. - assertEquals("match_main: Equality.", 0, dmp.match_main("abcdef", "abcdef", 1000)); - - assertEquals("match_main: Null text.", -1, dmp.match_main("", "abcdef", 1)); - - assertEquals("match_main: Null pattern.", 3, dmp.match_main("abcdef", "", 3)); - - assertEquals("match_main: Exact match.", 3, dmp.match_main("abcdef", "de", 3)); - - assertEquals("match_main: Beyond end match.", 3, dmp.match_main("abcdef", "defy", 4)); - - assertEquals("match_main: Oversized pattern.", 0, dmp.match_main("abcdef", "abcdefy", 0)); - - dmp.Match_Threshold = 0.7f; - assertEquals("match_main: Complex match.", 4, dmp.match_main("I am the very model of a modern major general.", " that berry ", 5)); - dmp.Match_Threshold = 0.5f; - - // Test null inputs. - try { - dmp.match_main(null, null, 0); - fail("match_main: Null inputs."); - } catch (IllegalArgumentException ex) { - // Error expected. - } - } - - - // PATCH TEST FUNCTIONS - - - public void testPatchObj() { - // Patch Object. - Patch p = new Patch(); - p.start1 = 20; - p.start2 = 21; - p.length1 = 18; - p.length2 = 17; - p.diffs = diffList(new Diff(EQUAL, "jump"), new Diff(DELETE, "s"), new Diff(INSERT, "ed"), new Diff(EQUAL, " over "), new Diff(DELETE, "the"), new Diff(INSERT, "a"), new Diff(EQUAL, "\nlaz")); - String strp = "@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n %0Alaz\n"; - assertEquals("Patch: toString.", strp, p.toString()); - } - - public void testPatchFromText() { - assertTrue("patch_fromText: #0.", dmp.patch_fromText("").isEmpty()); - - String strp = "@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n %0Alaz\n"; - assertEquals("patch_fromText: #1.", strp, dmp.patch_fromText(strp).get(0).toString()); - - assertEquals("patch_fromText: #2.", "@@ -1 +1 @@\n-a\n+b\n", dmp.patch_fromText("@@ -1 +1 @@\n-a\n+b\n").get(0).toString()); - - assertEquals("patch_fromText: #3.", "@@ -1,3 +0,0 @@\n-abc\n", dmp.patch_fromText("@@ -1,3 +0,0 @@\n-abc\n").get(0).toString()); - - assertEquals("patch_fromText: #4.", "@@ -0,0 +1,3 @@\n+abc\n", dmp.patch_fromText("@@ -0,0 +1,3 @@\n+abc\n").get(0).toString()); - - // Generates error. - try { - dmp.patch_fromText("Bad\nPatch\n"); - fail("patch_fromText: #5."); - } catch (IllegalArgumentException ex) { - // Exception expected. - } - } - - public void testPatchToText() { - String strp = "@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n laz\n"; - List patches; - patches = dmp.patch_fromText(strp); - assertEquals("patch_toText: Single.", strp, dmp.patch_toText(patches)); - - strp = "@@ -1,9 +1,9 @@\n-f\n+F\n oo+fooba\n@@ -7,9 +7,9 @@\n obar\n-,\n+.\n tes\n"; - patches = dmp.patch_fromText(strp); - assertEquals("patch_toText: Dual.", strp, dmp.patch_toText(patches)); - } - - public void testPatchAddContext() { - dmp.Patch_Margin = 4; - Patch p; - p = dmp.patch_fromText("@@ -21,4 +21,10 @@\n-jump\n+somersault\n").get(0); - dmp.patch_addContext(p, "The quick brown fox jumps over the lazy dog."); - assertEquals("patch_addContext: Simple case.", "@@ -17,12 +17,18 @@\n fox \n-jump\n+somersault\n s ov\n", p.toString()); - - p = dmp.patch_fromText("@@ -21,4 +21,10 @@\n-jump\n+somersault\n").get(0); - dmp.patch_addContext(p, "The quick brown fox jumps."); - assertEquals("patch_addContext: Not enough trailing context.", "@@ -17,10 +17,16 @@\n fox \n-jump\n+somersault\n s.\n", p.toString()); - - p = dmp.patch_fromText("@@ -3 +3,2 @@\n-e\n+at\n").get(0); - dmp.patch_addContext(p, "The quick brown fox jumps."); - assertEquals("patch_addContext: Not enough leading context.", "@@ -1,7 +1,8 @@\n Th\n-e\n+at\n qui\n", p.toString()); - - p = dmp.patch_fromText("@@ -3 +3,2 @@\n-e\n+at\n").get(0); - dmp.patch_addContext(p, "The quick brown fox jumps. The quick brown fox crashes."); - assertEquals("patch_addContext: Ambiguity.", "@@ -1,27 +1,28 @@\n Th\n-e\n+at\n quick brown fox jumps. \n", p.toString()); - } - - public void testPatchMake() { - LinkedList patches; - patches = dmp.patch_make("", ""); - assertEquals("patch_make: Null case.", "", dmp.patch_toText(patches)); - - String text1 = "The quick brown fox jumps over the lazy dog."; - String text2 = "That quick brown fox jumped over a lazy dog."; - String expectedPatch = "@@ -1,8 +1,7 @@\n Th\n-at\n+e\n qui\n@@ -21,17 +21,18 @@\n jump\n-ed\n+s\n over \n-a\n+the\n laz\n"; - // The second patch must be "-21,17 +21,18", not "-22,17 +21,18" due to rolling context. - patches = dmp.patch_make(text2, text1); - assertEquals("patch_make: Text2+Text1 inputs.", expectedPatch, dmp.patch_toText(patches)); - - expectedPatch = "@@ -1,11 +1,12 @@\n Th\n-e\n+at\n quick b\n@@ -22,18 +22,17 @@\n jump\n-s\n+ed\n over \n-the\n+a\n laz\n"; - patches = dmp.patch_make(text1, text2); - assertEquals("patch_make: Text1+Text2 inputs.", expectedPatch, dmp.patch_toText(patches)); - - LinkedList diffs = dmp.diff_main(text1, text2, false); - patches = dmp.patch_make(diffs); - assertEquals("patch_make: Diff input.", expectedPatch, dmp.patch_toText(patches)); - - patches = dmp.patch_make(text1, diffs); - assertEquals("patch_make: Text1+Diff inputs.", expectedPatch, dmp.patch_toText(patches)); - - patches = dmp.patch_make("`1234567890-=[]\\;',./", "~!@#$%^&*()_+{}|:\"<>?"); - assertEquals("patch_toText: Character encoding.", "@@ -1,21 +1,21 @@\n-%601234567890-=%5B%5D%5C;',./\n+~!@#$%25%5E&*()_+%7B%7D%7C:%22%3C%3E?\n", dmp.patch_toText(patches)); - - diffs = diffList(new Diff(DELETE, "`1234567890-=[]\\;',./"), new Diff(INSERT, "~!@#$%^&*()_+{}|:\"<>?")); - assertEquals("patch_fromText: Character decoding.", diffs, dmp.patch_fromText("@@ -1,21 +1,21 @@\n-%601234567890-=%5B%5D%5C;',./\n+~!@#$%25%5E&*()_+%7B%7D%7C:%22%3C%3E?\n").get(0).diffs); - - text1 = ""; - for (int x = 0; x < 100; x++) { - text1 += "abcdef"; - } - text2 = text1 + "123"; - expectedPatch = "@@ -573,28 +573,31 @@\n cdefabcdefabcdefabcdefabcdef\n+123\n"; - patches = dmp.patch_make(text1, text2); - assertEquals("patch_make: Long string with repeats.", expectedPatch, dmp.patch_toText(patches)); - - // Test null inputs. - try { - dmp.patch_make(null); - fail("patch_make: Null inputs."); - } catch (IllegalArgumentException ex) { - // Error expected. - } - } - - public void testPatchSplitMax() { - // Assumes that Match_MaxBits is 32. - LinkedList patches; - patches = dmp.patch_make("abcdefghijklmnopqrstuvwxyz01234567890", "XabXcdXefXghXijXklXmnXopXqrXstXuvXwxXyzX01X23X45X67X89X0"); - dmp.patch_splitMax(patches); - assertEquals("patch_splitMax: #1.", "@@ -1,32 +1,46 @@\n+X\n ab\n+X\n cd\n+X\n ef\n+X\n gh\n+X\n ij\n+X\n kl\n+X\n mn\n+X\n op\n+X\n qr\n+X\n st\n+X\n uv\n+X\n wx\n+X\n yz\n+X\n 012345\n@@ -25,13 +39,18 @@\n zX01\n+X\n 23\n+X\n 45\n+X\n 67\n+X\n 89\n+X\n 0\n", dmp.patch_toText(patches)); - - patches = dmp.patch_make("abcdef1234567890123456789012345678901234567890123456789012345678901234567890uvwxyz", "abcdefuvwxyz"); - String oldToText = dmp.patch_toText(patches); - dmp.patch_splitMax(patches); - assertEquals("patch_splitMax: #2.", oldToText, dmp.patch_toText(patches)); - - patches = dmp.patch_make("1234567890123456789012345678901234567890123456789012345678901234567890", "abc"); - dmp.patch_splitMax(patches); - assertEquals("patch_splitMax: #3.", "@@ -1,32 +1,4 @@\n-1234567890123456789012345678\n 9012\n@@ -29,32 +1,4 @@\n-9012345678901234567890123456\n 7890\n@@ -57,14 +1,3 @@\n-78901234567890\n+abc\n", dmp.patch_toText(patches)); - - patches = dmp.patch_make("abcdefghij , h : 0 , t : 1 abcdefghij , h : 0 , t : 1 abcdefghij , h : 0 , t : 1", "abcdefghij , h : 1 , t : 1 abcdefghij , h : 1 , t : 1 abcdefghij , h : 0 , t : 1"); - dmp.patch_splitMax(patches); - assertEquals("patch_splitMax: #4.", "@@ -2,32 +2,32 @@\n bcdefghij , h : \n-0\n+1\n , t : 1 abcdef\n@@ -29,32 +29,32 @@\n bcdefghij , h : \n-0\n+1\n , t : 1 abcdef\n", dmp.patch_toText(patches)); - } - - public void testPatchAddPadding() { - LinkedList patches; - patches = dmp.patch_make("", "test"); - assertEquals("patch_addPadding: Both edges full.", "@@ -0,0 +1,4 @@\n+test\n", dmp.patch_toText(patches)); - dmp.patch_addPadding(patches); - assertEquals("patch_addPadding: Both edges full.", "@@ -1,8 +1,12 @@\n %01%02%03%04\n+test\n %01%02%03%04\n", dmp.patch_toText(patches)); - - patches = dmp.patch_make("XY", "XtestY"); - assertEquals("patch_addPadding: Both edges partial.", "@@ -1,2 +1,6 @@\n X\n+test\n Y\n", dmp.patch_toText(patches)); - dmp.patch_addPadding(patches); - assertEquals("patch_addPadding: Both edges partial.", "@@ -2,8 +2,12 @@\n %02%03%04X\n+test\n Y%01%02%03\n", dmp.patch_toText(patches)); - - patches = dmp.patch_make("XXXXYYYY", "XXXXtestYYYY"); - assertEquals("patch_addPadding: Both edges none.", "@@ -1,8 +1,12 @@\n XXXX\n+test\n YYYY\n", dmp.patch_toText(patches)); - dmp.patch_addPadding(patches); - assertEquals("patch_addPadding: Both edges none.", "@@ -5,8 +5,12 @@\n XXXX\n+test\n YYYY\n", dmp.patch_toText(patches)); - } - - public void testPatchApply() { - dmp.Match_Distance = 1000; - dmp.Match_Threshold = 0.5f; - dmp.Patch_DeleteThreshold = 0.5f; - LinkedList patches; - patches = dmp.patch_make("", ""); - Object[] results = dmp.patch_apply(patches, "Hello world."); - boolean[] boolArray = (boolean[]) results[1]; - String resultStr = results[0] + "\t" + boolArray.length; - assertEquals("patch_apply: Null case.", "Hello world.\t0", resultStr); - - patches = dmp.patch_make("The quick brown fox jumps over the lazy dog.", "That quick brown fox jumped over a lazy dog."); - results = dmp.patch_apply(patches, "The quick brown fox jumps over the lazy dog."); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0] + "\t" + boolArray[1]; - assertEquals("patch_apply: Exact match.", "That quick brown fox jumped over a lazy dog.\ttrue\ttrue", resultStr); - - results = dmp.patch_apply(patches, "The quick red rabbit jumps over the tired tiger."); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0] + "\t" + boolArray[1]; - assertEquals("patch_apply: Partial match.", "That quick red rabbit jumped over a tired tiger.\ttrue\ttrue", resultStr); - - results = dmp.patch_apply(patches, "I am the very model of a modern major general."); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0] + "\t" + boolArray[1]; - assertEquals("patch_apply: Failed match.", "I am the very model of a modern major general.\tfalse\tfalse", resultStr); - - patches = dmp.patch_make("x1234567890123456789012345678901234567890123456789012345678901234567890y", "xabcy"); - results = dmp.patch_apply(patches, "x123456789012345678901234567890-----++++++++++-----123456789012345678901234567890y"); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0] + "\t" + boolArray[1]; - assertEquals("patch_apply: Big delete, small change.", "xabcy\ttrue\ttrue", resultStr); - - patches = dmp.patch_make("x1234567890123456789012345678901234567890123456789012345678901234567890y", "xabcy"); - results = dmp.patch_apply(patches, "x12345678901234567890---------------++++++++++---------------12345678901234567890y"); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0] + "\t" + boolArray[1]; - assertEquals("patch_apply: Big delete, big change 1.", "xabc12345678901234567890---------------++++++++++---------------12345678901234567890y\tfalse\ttrue", resultStr); - - dmp.Patch_DeleteThreshold = 0.6f; - patches = dmp.patch_make("x1234567890123456789012345678901234567890123456789012345678901234567890y", "xabcy"); - results = dmp.patch_apply(patches, "x12345678901234567890---------------++++++++++---------------12345678901234567890y"); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0] + "\t" + boolArray[1]; - assertEquals("patch_apply: Big delete, big change 2.", "xabcy\ttrue\ttrue", resultStr); - dmp.Patch_DeleteThreshold = 0.5f; - - // Compensate for failed patch. - dmp.Match_Threshold = 0.0f; - dmp.Match_Distance = 0; - patches = dmp.patch_make("abcdefghijklmnopqrstuvwxyz--------------------1234567890", "abcXXXXXXXXXXdefghijklmnopqrstuvwxyz--------------------1234567YYYYYYYYYY890"); - results = dmp.patch_apply(patches, "ABCDEFGHIJKLMNOPQRSTUVWXYZ--------------------1234567890"); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0] + "\t" + boolArray[1]; - assertEquals("patch_apply: Compensate for failed patch.", "ABCDEFGHIJKLMNOPQRSTUVWXYZ--------------------1234567YYYYYYYYYY890\tfalse\ttrue", resultStr); - dmp.Match_Threshold = 0.5f; - dmp.Match_Distance = 1000; - - patches = dmp.patch_make("", "test"); - String patchStr = dmp.patch_toText(patches); - dmp.patch_apply(patches, ""); - assertEquals("patch_apply: No side effects.", patchStr, dmp.patch_toText(patches)); - - patches = dmp.patch_make("The quick brown fox jumps over the lazy dog.", "Woof"); - patchStr = dmp.patch_toText(patches); - dmp.patch_apply(patches, "The quick brown fox jumps over the lazy dog."); - assertEquals("patch_apply: No side effects with major delete.", patchStr, dmp.patch_toText(patches)); - - patches = dmp.patch_make("", "test"); - results = dmp.patch_apply(patches, ""); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0]; - assertEquals("patch_apply: Edge exact match.", "test\ttrue", resultStr); - - patches = dmp.patch_make("XY", "XtestY"); - results = dmp.patch_apply(patches, "XY"); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0]; - assertEquals("patch_apply: Near edge exact match.", "XtestY\ttrue", resultStr); - - patches = dmp.patch_make("y", "y123"); - results = dmp.patch_apply(patches, "x"); - boolArray = (boolean[]) results[1]; - resultStr = results[0] + "\t" + boolArray[0]; - assertEquals("patch_apply: Edge partial match.", "x123\ttrue", resultStr); - } - - private void assertArrayEquals(String error_msg, Object[] a, Object[] b) { - List list_a = Arrays.asList(a); - List list_b = Arrays.asList(b); - assertEquals(error_msg, list_a, list_b); - } - - private void assertLinesToCharsResultEquals(String error_msg, - LinesToCharsResult a, LinesToCharsResult b) { - assertEquals(error_msg, a.chars1, b.chars1); - assertEquals(error_msg, a.chars2, b.chars2); - assertEquals(error_msg, a.lineArray, b.lineArray); - } - - // Construct the two texts which made up the diff originally. - private static String[] diff_rebuildtexts(LinkedList diffs) { - String[] text = {"", ""}; - for (Diff myDiff : diffs) { - if (myDiff.operation != diff_match_patch.Operation.INSERT) { - text[0] += myDiff.text; - } - if (myDiff.operation != diff_match_patch.Operation.DELETE) { - text[1] += myDiff.text; - } - } - return text; - } - - // Private function for quickly building lists of diffs. - private static LinkedList diffList(Diff... diffs) { - LinkedList myDiffList = new LinkedList(); - for (Diff myDiff : diffs) { - myDiffList.add(myDiff); - } - return myDiffList; - } - - public static void assertEquals(String message, Object expected, Object actual) { -// System.out.println(message + " " + expected + " " + actual); - Assert.assertEquals(message, expected, actual); - } - public static void assertEquals(String message, String expected, String actual) { -// System.out.println(message + " " + expected + " " + actual); - Assert.assertEquals(message, expected, actual); - } - - public static void main(String[] args) { - diff_match_patch_test d = new diff_match_patch_test(); - d.setUp(); - d.testDiffCleanupEfficiency(); - } - -} diff --git a/modules/core/db/core.erm b/modules/core/db/core.erm index f5c8af9f..3e152639 100644 --- a/modules/core/db/core.erm +++ b/modules/core/db/core.erm @@ -11,8 +11,8 @@ 0 1.0 - 531 - 1945 + 109 + 1843 128 128 @@ -791,6 +791,22 @@ dict_value varchar(n) + + ed5ac38bb6330b7ce8daaa76475ac87c6e1f7e4c + null + null + false + null + false + false + false + + false + + 新旧数据比较结果 + diff_modify_data + clob + 329bbb76f0884117ace79bb686695f4e9cb120b6 300 @@ -1431,6 +1447,22 @@ is_attac character(n) + + e889df5da9a251b18e384fc428bb2654cdda9310 + 1 + null + false + null + false + false + false + + false + + 是否异常 + is_exception + character(n) + 5224ef38946585af8ba22f294756ffaecb434ddc 1 @@ -1720,8 +1752,8 @@ nvarchar(n) - 1656c73df4466012ab837df13e760b030caa7ce8 - 1 + e05fe9078021fb5b026eefac77069bc0b2d13c56 + 50 null false null @@ -1733,7 +1765,7 @@ 日志类型 日志类型 log_type - character(n) + varchar(n) a349e3aeee90969e1e0c7f6ad8481b209eb691f3 @@ -13240,6 +13272,423 @@ + + d666c509d068f3dabf0fba21897bba87ecd883c4 + 170 + 269 + Segoe UI + 9 + 1112 + 2034 + + 128 + 128 + 192 + + + + dcb09f95b0ac0ddaef78794ac3fa636075cc7152 + e991c3c26f1883475a23693afa7c3cd6a4cef394 + d666c509d068f3dabf0fba21897bba87ecd883c4 + -1 + -1 + -1 + -1 + + 0 + 0 + 0 + + 1..n + 1 + true + + RESTRICT + RESTRICT + null + null + + + js_sys_job_log + 作业调度日志表 + + + + + + + 869fc70cf3a4e92e8056b40814df8e03f9f9efde + 9382e4d59004f8f437199ae02d75645c714ed23f + + + + + varchar(n) + + + false + false + true + true + false + + + + + + + + + + + false + false + false + + + 0 + + + + 6d5f3e5ef4d28e57966c33c4b4ef424f1dc42b7b + 55c7d0a9ab8650c264a75bb1bf958cac2fe68152 + dcb09f95b0ac0ddaef78794ac3fa636075cc7152 + + + + + varchar(n) + + + false + true + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 91110163a8a31ee61a4153360707026b5498dd65 + 443772d4627c23aef484c324c8e431121b921a44 + dcb09f95b0ac0ddaef78794ac3fa636075cc7152 + + + + + varchar(n) + + + false + true + true + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 8afadc1ddabcb75c4b83d8bef5401cd464ddb03b + 3e80df782a38bab9e765399dfd0343f568b4d9b7 + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 728962f9a8c15fa620380b1e8bbb54a9b386ce72 + 81bc4d9e8dad3d9348f2c71eb3c600e4594f1316 + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + 78a5e7f85b6c82e0032ba56579b661b0971a46c8 + 6ed5757124ebbe8c4839b820b2418e840d14bb89 + + + + + varchar(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + e889df5da9a251b18e384fc428bb2654cdda9310 + 0b9a8fee0730362310d5c0e58a67ea01e2d5d722 + + + + + character(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + d903f31236ff7a6701ff92a19986146ace84c236 + 81d875aad67d3c4ada7aa5d5972a120957d18221 + + + + + clob + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + da64f182d5dd75b3fc0eaaf8ee1aed8e3d57aa41 + 2aa75821064814ccb859d75d5c59616e9949cae2 + + + + + timestamp + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + + + + + false + true + idx_sys_job_log_jn + + + + + 6d5f3e5ef4d28e57966c33c4b4ef424f1dc42b7b + false + + + + + false + true + idx_sys_job_log_jg + + + + + 91110163a8a31ee61a4153360707026b5498dd65 + false + + + + + false + true + idx_sys_job_log_t + + + + + 3e80df782a38bab9e765399dfd0343f568b4d9b7 + false + + + + + false + true + idx_sys_job_log_e + + + + + 81bc4d9e8dad3d9348f2c71eb3c600e4594f1316 + false + + + + + false + true + idx_sys_job_log_ie + + + + + 0b9a8fee0730362310d5c0e58a67ea01e2d5d722 + false + + + + + + + + + +
2074919cbcf9f3c311ec3d7e27d331e2a3cfa883443 @@ -13296,13 +13745,13 @@ - 1656c73df4466012ab837df13e760b030caa7ce8 + e05fe9078021fb5b026eefac77069bc0b2d13c56 a03e633748bfae8eae5aa92ae432469d3130afb4 - character(n) + varchar(n) false @@ -13559,6 +14008,39 @@ 0 + + ed5ac38bb6330b7ce8daaa76475ac87c6e1f7e4c + adcd4f96b525c65bc0d1f9ab2f20d70498760da8 + + + + + clob + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + 667704664e4b88b145cebda0d6a1fbafb53525f0 8f891169da270ac3ad6f57020764868821524aa8 @@ -13691,6 +14173,39 @@ 0 + + e889df5da9a251b18e384fc428bb2654cdda9310 + 186bf2bddf5b4fb9ce835106138d47adb1bebc9e + + + + + character(n) + + + false + false + false + false + false + + + + + + + + + + + false + false + false + + + 0 + + d903f31236ff7a6701ff92a19986146ace84c236 cce47a5de15237ce22ef226c5d652d9d0eeab8ce @@ -13891,325 +14406,19 @@ - - - - - - -
- - d666c509d068f3dabf0fba21897bba87ecd883c4 - 170 - 269 - Segoe UI - 9 - 1112 - 2034 - - 128 - 128 - 192 - - - - e1a2f005527fd14e5cff72541625da54bf76faf6 - e991c3c26f1883475a23693afa7c3cd6a4cef394 - d666c509d068f3dabf0fba21897bba87ecd883c4 - -1 - -1 - -1 - -1 - - 0 - 0 - 0 - - 1..n - 1 - true - - RESTRICT - RESTRICT - null - null - - - js_sys_job_log - 作业调度日志表 - - - - - - - 869fc70cf3a4e92e8056b40814df8e03f9f9efde - 9382e4d59004f8f437199ae02d75645c714ed23f + + false + true + idx_sys_log_ie + - - - - varchar(n) - - - false - false - true - true - false - - - - - - - - - - - false - false - false - - - 0 - - - - 6d5f3e5ef4d28e57966c33c4b4ef424f1dc42b7b - 55c7d0a9ab8650c264a75bb1bf958cac2fe68152 - e1a2f005527fd14e5cff72541625da54bf76faf6 - - - - - varchar(n) - - - false - true - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 91110163a8a31ee61a4153360707026b5498dd65 - 443772d4627c23aef484c324c8e431121b921a44 - e1a2f005527fd14e5cff72541625da54bf76faf6 - - - - - varchar(n) - - - false - true - true - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 8afadc1ddabcb75c4b83d8bef5401cd464ddb03b - 3e80df782a38bab9e765399dfd0343f568b4d9b7 - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 728962f9a8c15fa620380b1e8bbb54a9b386ce72 - 81bc4d9e8dad3d9348f2c71eb3c600e4594f1316 - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - 78a5e7f85b6c82e0032ba56579b661b0971a46c8 - 6ed5757124ebbe8c4839b820b2418e840d14bb89 - - - - - varchar(n) - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - d903f31236ff7a6701ff92a19986146ace84c236 - 81d875aad67d3c4ada7aa5d5972a120957d18221 - - - - - clob - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - da64f182d5dd75b3fc0eaaf8ee1aed8e3d57aa41 - 2aa75821064814ccb859d75d5c59616e9949cae2 - - - - - timestamp - - - false - false - false - false - false - - - - - - - - - - - false - false - false - - - 0 - - - - + + + 186bf2bddf5b4fb9ce835106138d47adb1bebc9e + false + + + diff --git a/modules/core/db/oracle/core.sql b/modules/core/db/oracle/core.sql index eb32e488..2770f7cf 100644 --- a/modules/core/db/oracle/core.sql +++ b/modules/core/db/oracle/core.sql @@ -39,6 +39,11 @@ DROP INDEX idx_sys_file_biz_ud; DROP INDEX idx_sys_file_biz_bt; DROP INDEX idx_sys_file_biz_bk; DROP INDEX idx_sys_job_status; +DROP INDEX idx_sys_job_log_jn; +DROP INDEX idx_sys_job_log_jg; +DROP INDEX idx_sys_job_log_t; +DROP INDEX idx_sys_job_log_e; +DROP INDEX idx_sys_job_log_ie; DROP INDEX idx_sys_lang_code; DROP INDEX idx_sys_lang_type; DROP INDEX idx_sys_log_cd; @@ -46,6 +51,7 @@ DROP INDEX idx_sys_log_cc; DROP INDEX idx_sys_log_lt; DROP INDEX idx_sys_log_bk; DROP INDEX idx_sys_log_bt; +DROP INDEX idx_sys_log_ie; DROP INDEX idx_sys_menu_pc; DROP INDEX idx_sys_menu_ts; DROP INDEX idx_sys_menu_status; @@ -411,6 +417,7 @@ CREATE TABLE js_sys_job_log job_type varchar2(50), job_event varchar2(200), job_message varchar2(500), + is_exception char(1), exception_info clob, create_date timestamp, PRIMARY KEY (id) @@ -438,7 +445,7 @@ CREATE TABLE js_sys_lang CREATE TABLE js_sys_log ( id varchar2(64) NOT NULL, - log_type char(1) NOT NULL, + log_type varchar2(50) NOT NULL, log_title nvarchar2(500) NOT NULL, create_by varchar2(64) NOT NULL, create_by_name nvarchar2(100) NOT NULL, @@ -446,10 +453,12 @@ CREATE TABLE js_sys_log request_uri nvarchar2(255), request_method varchar2(10), request_params clob, + diff_modify_data clob, biz_key varchar2(64), biz_type varchar2(64), remote_addr varchar2(255) NOT NULL, server_addr varchar2(255) NOT NULL, + is_exception char(1), exception_info clob, user_agent nvarchar2(500), device_name varchar2(100), @@ -888,6 +897,11 @@ CREATE INDEX idx_sys_file_biz_ud ON js_sys_file_upload (update_date); CREATE INDEX idx_sys_file_biz_bt ON js_sys_file_upload (biz_type); CREATE INDEX idx_sys_file_biz_bk ON js_sys_file_upload (biz_key); CREATE INDEX idx_sys_job_status ON js_sys_job (status); +CREATE INDEX idx_sys_job_log_jn ON js_sys_job_log (job_name); +CREATE INDEX idx_sys_job_log_jg ON js_sys_job_log (job_group); +CREATE INDEX idx_sys_job_log_t ON js_sys_job_log (job_type); +CREATE INDEX idx_sys_job_log_e ON js_sys_job_log (job_event); +CREATE INDEX idx_sys_job_log_ie ON js_sys_job_log (is_exception); CREATE INDEX idx_sys_lang_code ON js_sys_lang (lang_code); CREATE INDEX idx_sys_lang_type ON js_sys_lang (lang_type); CREATE INDEX idx_sys_log_cd ON js_sys_log (create_by); @@ -895,6 +909,7 @@ CREATE INDEX idx_sys_log_cc ON js_sys_log (corp_code); CREATE INDEX idx_sys_log_lt ON js_sys_log (log_type); CREATE INDEX idx_sys_log_bk ON js_sys_log (biz_key); CREATE INDEX idx_sys_log_bt ON js_sys_log (biz_type); +CREATE INDEX idx_sys_log_ie ON js_sys_log (is_exception); CREATE INDEX idx_sys_menu_pc ON js_sys_menu (parent_code); CREATE INDEX idx_sys_menu_ts ON js_sys_menu (tree_sort); CREATE INDEX idx_sys_menu_status ON js_sys_menu (status); @@ -1157,6 +1172,7 @@ COMMENT ON COLUMN js_sys_job_log.job_group IS '任务组名'; COMMENT ON COLUMN js_sys_job_log.job_type IS '日志类型'; COMMENT ON COLUMN js_sys_job_log.job_event IS '日志事件'; COMMENT ON COLUMN js_sys_job_log.job_message IS '日志信息'; +COMMENT ON COLUMN js_sys_job_log.is_exception IS '是否异常'; COMMENT ON COLUMN js_sys_job_log.exception_info IS '异常信息'; COMMENT ON COLUMN js_sys_job_log.create_date IS '创建时间'; COMMENT ON TABLE js_sys_lang IS '国际化语言'; @@ -1180,10 +1196,12 @@ COMMENT ON COLUMN js_sys_log.create_date IS '创建时间'; COMMENT ON COLUMN js_sys_log.request_uri IS '请求URI'; COMMENT ON COLUMN js_sys_log.request_method IS '操作方式'; COMMENT ON COLUMN js_sys_log.request_params IS '操作提交的数据'; +COMMENT ON COLUMN js_sys_log.diff_modify_data IS '新旧数据比较结果'; COMMENT ON COLUMN js_sys_log.biz_key IS '业务主键'; COMMENT ON COLUMN js_sys_log.biz_type IS '业务类型'; COMMENT ON COLUMN js_sys_log.remote_addr IS '操作IP地址'; COMMENT ON COLUMN js_sys_log.server_addr IS '请求服务器地址'; +COMMENT ON COLUMN js_sys_log.is_exception IS '是否异常'; COMMENT ON COLUMN js_sys_log.exception_info IS '异常信息'; COMMENT ON COLUMN js_sys_log.user_agent IS '用户代理'; COMMENT ON COLUMN js_sys_log.device_name IS '设备名称/操作系统'; diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java index 9e5804bf..e17c567d 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory; import com.jeesite.common.config.Global; import com.jeesite.common.web.http.ServletUtils; +import com.jeesite.modules.sys.entity.Log; import com.jeesite.modules.sys.utils.LogUtils; /** @@ -35,7 +36,7 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter //try/catch added for SHIRO-298: try { // 记录用户退出日志 - LogUtils.saveLog(ServletUtils.getRequest(), "系统退出"); + LogUtils.saveLog(ServletUtils.getRequest(), "系统退出", Log.TYPE_LOGIN_LOGOUT); // 退出登录 subject.logout(); } catch (SessionException ise) { diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java b/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java index 53dcd3e3..ddf756b3 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java @@ -5,12 +5,15 @@ package com.jeesite.common.shiro.realm; import java.util.Map; +import javax.servlet.http.HttpServletRequest; + import org.apache.shiro.subject.PrincipalCollection; import com.jeesite.common.codec.EncodeUtils; import com.jeesite.common.lang.ObjectUtils; import com.jeesite.common.web.http.ServletUtils; import com.jeesite.modules.sys.entity.EmpUser; +import com.jeesite.modules.sys.entity.Log; import com.jeesite.modules.sys.entity.User; import com.jeesite.modules.sys.service.EmpUserService; import com.jeesite.modules.sys.service.UserService; @@ -55,13 +58,13 @@ public class AuthorizingRealm extends com.jeesite.common.shiro.realm.BaseAuthori userService.updateUserLoginInfo(user); // 记录用户登录日志 - LogUtils.saveLog(ServletUtils.getRequest(), "系统登录"); + LogUtils.saveLog(ServletUtils.getRequest(), "系统登录", Log.TYPE_LOGIN_LOGOUT); } @Override - public void onLogoutSuccess(User logoutUser) { + public void onLogoutSuccess(User logoutUser, HttpServletRequest request) { // 记录用户退出日志 - LogUtils.saveLog(logoutUser, null, null, null, "系统退出"); + LogUtils.saveLog(logoutUser, request, null, null, "系统退出", Log.TYPE_LOGIN_LOGOUT); } public void setUserService(UserService userService) { diff --git a/web/src/main/java/com/jeesite/modules/config/web/DruidStatConfig.java b/modules/core/src/main/java/com/jeesite/modules/config/web/DruidStatConfig.java similarity index 85% rename from web/src/main/java/com/jeesite/modules/config/web/DruidStatConfig.java rename to modules/core/src/main/java/com/jeesite/modules/config/web/DruidStatConfig.java index 5ef2d134..aba834dd 100644 --- a/web/src/main/java/com/jeesite/modules/config/web/DruidStatConfig.java +++ b/modules/core/src/main/java/com/jeesite/modules/config/web/DruidStatConfig.java @@ -3,6 +3,7 @@ */ package com.jeesite.modules.config.web; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; @@ -17,6 +18,7 @@ import com.alibaba.druid.support.http.WebStatFilter; * @version 2017年11月30日 */ @Configuration +@ConditionalOnProperty(name="druid.stat.enabled", havingValue="true", matchIfMissing=true) public class DruidStatConfig { /** diff --git a/web/src/main/java/com/jeesite/modules/config/web/interceptor/LogInterceptorConfig.java b/modules/core/src/main/java/com/jeesite/modules/config/web/interceptor/LogInterceptorConfig.java similarity index 57% rename from web/src/main/java/com/jeesite/modules/config/web/interceptor/LogInterceptorConfig.java rename to modules/core/src/main/java/com/jeesite/modules/config/web/interceptor/LogInterceptorConfig.java index 5f7e6701..b83324b8 100644 --- a/web/src/main/java/com/jeesite/modules/config/web/interceptor/LogInterceptorConfig.java +++ b/modules/core/src/main/java/com/jeesite/modules/config/web/interceptor/LogInterceptorConfig.java @@ -6,10 +6,12 @@ package com.jeesite.modules.config.web.interceptor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.jeesite.common.config.Global; +import com.jeesite.common.lang.StringUtils; import com.jeesite.modules.sys.interceptor.LogInterceptor; /** @@ -24,17 +26,19 @@ public class LogInterceptorConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new LogInterceptor()) - .addPathPatterns(Global.getAdminPath() + "/**") - .excludePathPatterns(Global.getAdminPath() + "/index") - .excludePathPatterns(Global.getAdminPath() + "/login") - .excludePathPatterns(Global.getAdminPath() + "/**/listData") - .excludePathPatterns(Global.getAdminPath() + "/**/treeData") - .excludePathPatterns(Global.getAdminPath() + "/file/**") - .excludePathPatterns(Global.getAdminPath() + "/tags/**") - .excludePathPatterns(Global.getAdminPath() + "/sys/log/**") - .excludePathPatterns(Global.getAdminPath() + "/sys/online/count") - ; + InterceptorRegistration registration = registry.addInterceptor(new LogInterceptor()); + String apps = Global.getProperty("web.interceptor.log.addPathPatterns"); + String epps = Global.getProperty("web.interceptor.log.excludePathPatterns"); + for (String uri : StringUtils.split(apps, ",")){ + if (StringUtils.isNotBlank(uri)){ + registration.addPathPatterns(StringUtils.trim(uri)); + } + } + for (String uri : StringUtils.split(epps, ",")){ + if (StringUtils.isNotBlank(uri)){ + registration.excludePathPatterns(StringUtils.trim(epps)); + } + } } } \ No newline at end of file diff --git a/web/src/main/java/com/jeesite/modules/config/web/interceptor/MobileViewInterceptorConfig.java b/modules/core/src/main/java/com/jeesite/modules/config/web/interceptor/MobileViewInterceptorConfig.java similarity index 51% rename from web/src/main/java/com/jeesite/modules/config/web/interceptor/MobileViewInterceptorConfig.java rename to modules/core/src/main/java/com/jeesite/modules/config/web/interceptor/MobileViewInterceptorConfig.java index f731f755..c16b02cc 100644 --- a/web/src/main/java/com/jeesite/modules/config/web/interceptor/MobileViewInterceptorConfig.java +++ b/modules/core/src/main/java/com/jeesite/modules/config/web/interceptor/MobileViewInterceptorConfig.java @@ -6,11 +6,13 @@ package com.jeesite.modules.config.web.interceptor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.jeesite.common.config.Global; -import com.jeesite.modules.sys.interceptor.LogInterceptor; +import com.jeesite.common.lang.StringUtils; +import com.jeesite.modules.sys.interceptor.MobileInterceptor; /** * 前台自动切换到手机视图拦截器 @@ -19,14 +21,24 @@ import com.jeesite.modules.sys.interceptor.LogInterceptor; */ @Configuration @EnableWebMvc -@ConditionalOnProperty(name="web.interceptor.mobile.enabled", havingValue="true") +@ConditionalOnProperty(name="web.interceptor.mobile.enabled", havingValue="true", matchIfMissing=false) public class MobileViewInterceptorConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new LogInterceptor()) - .addPathPatterns(Global.getFrontPath() + "/**") - ; + InterceptorRegistration registration = registry.addInterceptor(new MobileInterceptor()); + String apps = Global.getProperty("web.interceptor.mobile.addPathPatterns"); + String epps = Global.getProperty("web.interceptor.mobile.excludePathPatterns"); + for (String uri : StringUtils.split(apps, ",")){ + if (StringUtils.isNotBlank(uri)){ + registration.addPathPatterns(StringUtils.trim(uri)); + } + } + for (String uri : StringUtils.split(epps, ",")){ + if (StringUtils.isNotBlank(uri)){ + registration.excludePathPatterns(StringUtils.trim(epps)); + } + } } } \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/db/InitCoreData.xlsx b/modules/core/src/main/java/com/jeesite/modules/db/InitCoreData.xlsx index b8c608aee8ea9e65d92e6980977a0a4810113ca8..8993227931a51a3003934e8189dd30d704b0eeff 100644 GIT binary patch delta 125616 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

QoK?{3=VkCh|aTFxM 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 diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Log.java b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Log.java index 4cb769c8..6faf2ba8 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Log.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Log.java @@ -1,243 +1,255 @@ -/** - * Copyright (c) 2013-Now http://jeesite.com All rights reserved. - */ -package com.jeesite.modules.sys.entity; - -import java.util.Map; - -import org.apache.commons.lang3.builder.ReflectionToStringBuilder; -import org.hibernate.validator.constraints.Length; -import org.hibernate.validator.constraints.NotBlank; - -import com.jeesite.common.collect.MapUtils; -import com.jeesite.common.entity.BaseEntity; -import com.jeesite.common.entity.DataEntity; -import com.jeesite.common.lang.StringUtils; -import com.jeesite.common.mybatis.annotation.Column; -import com.jeesite.common.mybatis.annotation.Table; -import com.jeesite.common.mybatis.mapper.query.QueryType; -import com.jeesite.common.shiro.realm.LoginInfo; -import com.jeesite.modules.sys.utils.UserUtils; - -/** - * 操作日志Entity - * @author ThinkGem - * @version 2017-03-19 - */ -@Table(name="${_prefix}sys_log", alias="a", columns={ - @Column(includeEntity=BaseEntity.class), - @Column(name="id", attrName="id", label="编码", isPK=true), - @Column(name="log_type", attrName="logType", label="日志类型"), - @Column(name="log_title", attrName="logTitle", label="日志标题", queryType=QueryType.LIKE), - @Column(name="create_by", attrName="createBy.userCode", label="创建者", isUpdate=false), - @Column(name="create_by_name", attrName="createBy.userName", label="创建者名称", queryType=QueryType.LIKE), - @Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false), - @Column(name="request_uri", attrName="requestUri", label="请求URI", queryType=QueryType.LIKE), - @Column(name="request_method", attrName="requestMethod", label="操作方式"), - @Column(name="request_params", attrName="requestParams", label="操作提交的数据", queryType=QueryType.LIKE), - @Column(name="biz_key", attrName="bizKey", label="业务主键"), - @Column(name="biz_type", attrName="bizType", label="业务类型"), - @Column(name="remote_addr", attrName="remoteAddr", label="操作IP地址"), - @Column(name="server_addr", attrName="serverAddr", label="请求服务器地址"), - @Column(name="exception_info", attrName="exceptionInfo", label="异常信息"), - @Column(name="user_agent", attrName="userAgent", label="用户代理"), - @Column(name="device_name", attrName="deviceName", label="设备名称/操作系统", queryType=QueryType.LIKE), - @Column(name="browser_name", attrName="browserName", label="浏览器名称", queryType=QueryType.LIKE), - }, orderBy="a.create_date DESC" -) -public class Log extends DataEntity { - - // 日志类型(1:接入日志;2:错误日志) - public static final String TYPE_ACCESS = "1"; - public static final String TYPE_EXCEPTION = "2"; - - private static final long serialVersionUID = 1L; - - private String logType; // 日志类型 - private String logTitle; // 日志标题 - private String requestUri; // 请求URI - private String requestMethod; // 操作方式 - private String requestParams; // 操作提交的数据 - private String bizKey; // 业务主键 - private String bizType; // 业务类型 - private String remoteAddr; // 操作IP地址 - private String serverAddr; // 请求服务器地址 - private String exceptionInfo; // 异常信息 - private String userAgent; // 用户代理 - private String deviceName; // 设备名称/操作系统 - private String browserName; // 浏览器名称 - - private Map paramsMap; // 操作提交的数据,临时存储用 - - public Log() { - this(null); - } - - public Log(String id){ - super(id); - } - - @NotBlank(message="日志类型不能为空") - @Length(min=0, max=1, message="日志类型长度不能超过 1 个字符") - public String getLogType() { - return logType; - } - - public void setLogType(String logType) { - this.logType = logType; - } - - @NotBlank(message="日志标题不能为空") - @Length(min=0, max=500, message="日志标题长度不能超过 500 个字符") - public String getLogTitle() { - return logTitle; - } - - public void setLogTitle(String logTitle) { - this.logTitle = logTitle; - } - - @Length(min=0, max=255, message="请求URI长度不能超过 255 个字符") - public String getRequestUri() { - LoginInfo p = UserUtils.getLoginInfo(); - if (p != null && "1".equals(p.getParam("l"))){ - return null; - } - return requestUri; - } - - public void setRequestUri(String requestUri) { - this.requestUri = requestUri; - } - - @Length(min=0, max=10, message="操作方式长度不能超过 10 个字符") - public String getRequestMethod() { - return requestMethod; - } - - public void setRequestMethod(String requestMethod) { - this.requestMethod = requestMethod; - } - - public String getRequestParams() { - return requestParams; - } - - public void setRequestParams(String requestParams) { - this.requestParams = requestParams; - } - - @Length(min=0, max=64, message="业务主键长度不能超过 64 个字符") - public String getBizKey() { - return bizKey; - } - - public void setBizKey(String bizKey) { - this.bizKey = bizKey; - } - - @Length(min=0, max=64, message="业务类型长度不能超过 64 个字符") - public String getBizType() { - return bizType; - } - - public void setBizType(String bizType) { - this.bizType = bizType; - } - - @NotBlank(message="操作IP地址不能为空") - @Length(min=0, max=255, message="操作IP地址长度不能超过 255 个字符") - public String getRemoteAddr() { - return remoteAddr; - } - - public void setRemoteAddr(String remoteAddr) { - this.remoteAddr = remoteAddr; - } - - @NotBlank(message="请求服务器地址不能为空") - @Length(min=0, max=255, message="请求服务器地址长度不能超过 255 个字符") - public String getServerAddr() { - return serverAddr; - } - - public void setServerAddr(String serverAddr) { - this.serverAddr = serverAddr; - } - - public String getExceptionInfo() { - return exceptionInfo; - } - - public void setExceptionInfo(String exceptionInfo) { - this.exceptionInfo = exceptionInfo; - } - - @Length(min=0, max=500, message="用户代理长度不能超过 500 个字符") - public String getUserAgent() { - return userAgent; - } - - public void setUserAgent(String userAgent) { - this.userAgent = userAgent; - } - - @Length(min=0, max=100, message="设备名称/操作系统长度不能超过 100 个字符") - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - @Length(min=0, max=100, message="浏览器名称长度不能超过 100 个字符") - public String getBrowserName() { - return browserName; - } - - public void setBrowserName(String browserName) { - this.browserName = browserName; - } - - /** - * 设置请求参数 - * @param paramMap - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - public void setRequestParams(Map paramsMap){ - if (paramsMap == null){ - return; - } - if (this.paramsMap == null){ - this.paramsMap = MapUtils.newHashMap(); - } - StringBuilder params = new StringBuilder(); - for (Map.Entry param : ((Map)paramsMap).entrySet()){ - params.append(("".equals(params.toString()) ? "" : "&") + param.getKey() + "="); - String paramValue = (param.getValue() != null && param.getValue().length > 0 ? param.getValue()[0] : ""); - params.append(StringUtils.abbr(StringUtils.endsWithIgnoreCase(param.getKey(), "password") ? "*" : paramValue, 1000)); - this.paramsMap.put(param.getKey(), param.getValue()); - } - this.requestParams = params.toString(); - } - - /** - * 根据名称获取参数(只有先执行setParams(Map)后才有效) - * @param name - * @return - */ - public String getRequestParam(String name) { - if (paramsMap == null){ - return null; - } - String[] values = (String[])paramsMap.get(name); - return values != null && values.length > 0 ? values[0] : null; - } - - @Override - public String toString() { - return ReflectionToStringBuilder.toString(this); - } - +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.sys.entity; + +import java.util.Map; + +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; + +import com.jeesite.common.collect.MapUtils; +import com.jeesite.common.entity.BaseEntity; +import com.jeesite.common.entity.DataEntity; +import com.jeesite.common.lang.StringUtils; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.Table; +import com.jeesite.common.mybatis.mapper.query.QueryType; +import com.jeesite.common.shiro.realm.LoginInfo; +import com.jeesite.modules.sys.utils.UserUtils; + +/** + * 操作日志Entity + * @author ThinkGem + * @version 2017-03-19 + */ +@Table(name="${_prefix}sys_log", alias="a", columns={ + @Column(includeEntity=BaseEntity.class), + @Column(name="id", attrName="id", label="编码", isPK=true), + @Column(name="log_type", attrName="logType", label="日志类型"), + @Column(name="log_title", attrName="logTitle", label="日志标题", queryType=QueryType.LIKE), + @Column(name="create_by", attrName="createBy.userCode", label="创建者", isUpdate=false), + @Column(name="create_by_name", attrName="createBy.userName", label="创建者名称", queryType=QueryType.LIKE), + @Column(name="create_date", attrName="createDate", label="创建时间", isUpdate=false, isQuery=false), + @Column(name="request_uri", attrName="requestUri", label="请求URI", queryType=QueryType.LIKE), + @Column(name="request_method", attrName="requestMethod", label="操作方式"), + @Column(name="request_params", attrName="requestParams", label="操作提交的数据", queryType=QueryType.LIKE), + @Column(name="biz_key", attrName="bizKey", label="业务主键"), + @Column(name="biz_type", attrName="bizType", label="业务类型"), + @Column(name="remote_addr", attrName="remoteAddr", label="操作IP地址"), + @Column(name="server_addr", attrName="serverAddr", label="请求服务器地址"), + @Column(name="is_exception", attrName="isException", label="是否异常"), + @Column(name="exception_info", attrName="exceptionInfo", label="异常信息"), + @Column(name="user_agent", attrName="userAgent", label="用户代理"), + @Column(name="device_name", attrName="deviceName", label="设备名称/操作系统", queryType=QueryType.LIKE), + @Column(name="browser_name", attrName="browserName", label="浏览器名称", queryType=QueryType.LIKE), + }, orderBy="a.create_date DESC" +) +public class Log extends DataEntity { + + // 日志类型(access:接入日志;update:修改日志;select:查询日志;loginLogout:登录登出;) + public static final String TYPE_ACCESS = "access"; + public static final String TYPE_UPDATE = "update"; + public static final String TYPE_SELECT = "select"; + public static final String TYPE_LOGIN_LOGOUT = "loginLogout"; + + private static final long serialVersionUID = 1L; + + private String logType; // 日志类型 + private String logTitle; // 日志标题 + private String requestUri; // 请求URI + private String requestMethod; // 操作方式 + private String requestParams; // 操作提交的数据 + private String bizKey; // 业务主键 + private String bizType; // 业务类型 + private String remoteAddr; // 操作IP地址 + private String serverAddr; // 请求服务器地址 + private String isException; // 是否有异常 + private String exceptionInfo; // 异常信息 + private String userAgent; // 用户代理 + private String deviceName; // 设备名称/操作系统 + private String browserName; // 浏览器名称 + + private Map paramsMap; // 操作提交的数据,临时存储用 + + public Log() { + this(null); + } + + public Log(String id){ + super(id); + } + + @NotBlank(message="日志类型不能为空") + @Length(min=0, max=1, message="日志类型长度不能超过 1 个字符") + public String getLogType() { + return logType; + } + + public void setLogType(String logType) { + this.logType = logType; + } + + @NotBlank(message="日志标题不能为空") + @Length(min=0, max=500, message="日志标题长度不能超过 500 个字符") + public String getLogTitle() { + return logTitle; + } + + public void setLogTitle(String logTitle) { + this.logTitle = logTitle; + } + + @Length(min=0, max=255, message="请求URI长度不能超过 255 个字符") + public String getRequestUri() { + LoginInfo p = UserUtils.getLoginInfo(); + if (p != null && "1".equals(p.getParam("l"))){ + return null; + } + return requestUri; + } + + public void setRequestUri(String requestUri) { + this.requestUri = requestUri; + } + + @Length(min=0, max=10, message="操作方式长度不能超过 10 个字符") + public String getRequestMethod() { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) { + this.requestMethod = requestMethod; + } + + public String getRequestParams() { + return requestParams; + } + + public void setRequestParams(String requestParams) { + this.requestParams = requestParams; + } + + @Length(min=0, max=64, message="业务主键长度不能超过 64 个字符") + public String getBizKey() { + return bizKey; + } + + public void setBizKey(String bizKey) { + this.bizKey = bizKey; + } + + @Length(min=0, max=64, message="业务类型长度不能超过 64 个字符") + public String getBizType() { + return bizType; + } + + public void setBizType(String bizType) { + this.bizType = bizType; + } + + @NotBlank(message="操作IP地址不能为空") + @Length(min=0, max=255, message="操作IP地址长度不能超过 255 个字符") + public String getRemoteAddr() { + return remoteAddr; + } + + public void setRemoteAddr(String remoteAddr) { + this.remoteAddr = remoteAddr; + } + + @NotBlank(message="请求服务器地址不能为空") + @Length(min=0, max=255, message="请求服务器地址长度不能超过 255 个字符") + public String getServerAddr() { + return serverAddr; + } + + public void setServerAddr(String serverAddr) { + this.serverAddr = serverAddr; + } + + public String getIsException() { + return isException; + } + + public void setIsException(String isException) { + this.isException = isException; + } + + public String getExceptionInfo() { + return exceptionInfo; + } + + public void setExceptionInfo(String exceptionInfo) { + this.exceptionInfo = exceptionInfo; + } + + @Length(min=0, max=500, message="用户代理长度不能超过 500 个字符") + public String getUserAgent() { + return userAgent; + } + + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } + + @Length(min=0, max=100, message="设备名称/操作系统长度不能超过 100 个字符") + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + @Length(min=0, max=100, message="浏览器名称长度不能超过 100 个字符") + public String getBrowserName() { + return browserName; + } + + public void setBrowserName(String browserName) { + this.browserName = browserName; + } + + /** + * 设置请求参数 + * @param paramMap + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void setRequestParams(Map paramsMap){ + if (paramsMap == null){ + return; + } + if (this.paramsMap == null){ + this.paramsMap = MapUtils.newHashMap(); + } + StringBuilder params = new StringBuilder(); + for (Map.Entry param : ((Map)paramsMap).entrySet()){ + params.append(("".equals(params.toString()) ? "" : "&") + param.getKey() + "="); + String paramValue = (param.getValue() != null && param.getValue().length > 0 ? param.getValue()[0] : ""); + params.append(StringUtils.abbr(StringUtils.endsWithIgnoreCase(param.getKey(), "password") ? "*" : paramValue, 1000)); + this.paramsMap.put(param.getKey(), param.getValue()); + } + this.requestParams = params.toString(); + } + + /** + * 根据名称获取参数(只有先执行setParams(Map)后才有效) + * @param name + * @return + */ + public String getRequestParam(String name) { + if (paramsMap == null){ + return null; + } + String[] values = (String[])paramsMap.get(name); + return values != null && values.length > 0 ? values[0] : null; + } + + @Override + public String toString() { + return ReflectionToStringBuilder.toString(this); + } + } \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/interceptor/LogInterceptor.java b/modules/core/src/main/java/com/jeesite/modules/sys/interceptor/LogInterceptor.java index e82b5b15..e66c8cd1 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/interceptor/LogInterceptor.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/interceptor/LogInterceptor.java @@ -1,70 +1,71 @@ -/** - * Copyright (c) 2013-Now http://jeesite.com All rights reserved. - */ -package com.jeesite.modules.sys.interceptor; - -import java.text.SimpleDateFormat; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.core.NamedThreadLocal; -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -import com.jeesite.common.lang.DateUtils; -import com.jeesite.common.lang.TimeUtils; -import com.jeesite.common.service.BaseService; -import com.jeesite.modules.sys.utils.LogUtils; - -/** - * 日志拦截器 - * @author ThinkGem - * @version 2014-8-19 - */ -public class LogInterceptor extends BaseService implements HandlerInterceptor { - - private static final ThreadLocal startTimeThreadLocal = - new NamedThreadLocal("ThreadLocal StartTime"); - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, - Object handler) throws Exception { - if (logger.isDebugEnabled()){ - long beginTime = System.currentTimeMillis();//1、开始时间 - startTimeThreadLocal.set(beginTime); //线程绑定变量(该数据只有当前请求的线程可见) - logger.debug("开始计时: {} URI: {}", new SimpleDateFormat("hh:mm:ss.SSS") - .format(beginTime), request.getRequestURI()); - } - return true; - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, - ModelAndView modelAndView) throws Exception { - if (modelAndView != null){ - logger.info("ViewName: " + modelAndView.getViewName() + " <<<<<<<<< " + request.getRequestURI() + " >>>>>>>>> " + handler); - } - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, - Object handler, Exception ex) throws Exception { - - // 保存日志 - LogUtils.saveLog(request, handler, ex, null); - - // 打印JVM信息。 - if (logger.isDebugEnabled()){ - long beginTime = startTimeThreadLocal.get();//得到线程绑定的局部变量(开始时间) - long endTime = System.currentTimeMillis(); //2、结束时间 - logger.debug("计时结束: {} 用时: {} URI: {} 最大内存: {}m 已分配内存: {}m 已分配内存中的剩余空间: {}m 最大可用内存: {}m", - DateUtils.formatDate(endTime, "hh:mm:ss.SSS"), TimeUtils.formatDateAgo(endTime - beginTime), - request.getRequestURI(), Runtime.getRuntime().maxMemory()/1024/1024, Runtime.getRuntime().totalMemory()/1024/1024, Runtime.getRuntime().freeMemory()/1024/1024, - (Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().freeMemory())/1024/1024); - startTimeThreadLocal.remove(); //用完之后销毁线程变量数据 - } - - } - -} +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.sys.interceptor; + +import java.text.SimpleDateFormat; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.core.NamedThreadLocal; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.lang.TimeUtils; +import com.jeesite.common.service.BaseService; +import com.jeesite.modules.sys.utils.LogUtils; +import com.jeesite.modules.sys.utils.UserUtils; + +/** + * 日志拦截器 + * @author ThinkGem + * @version 2014-8-19 + */ +public class LogInterceptor extends BaseService implements HandlerInterceptor { + + private static final ThreadLocal startTimeThreadLocal = + new NamedThreadLocal("ThreadLocal StartTime"); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, + Object handler) throws Exception { + if (logger.isDebugEnabled()){ + long beginTime = System.currentTimeMillis();//1、开始时间 + startTimeThreadLocal.set(beginTime); //线程绑定变量(该数据只有当前请求的线程可见) + logger.debug("开始计时: {} URI: {}", new SimpleDateFormat("hh:mm:ss.SSS") + .format(beginTime), request.getRequestURI()); + } + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + if (modelAndView != null){ + logger.info("ViewName: " + modelAndView.getViewName() + " <<<<<<<<< " + request.getRequestURI() + " >>>>>>>>> " + handler); + } + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, + Object handler, Exception ex) throws Exception { + + // 保存日志 + LogUtils.saveLog(UserUtils.getUser(), request, handler, ex, null, null); + + // 打印JVM信息。 + if (logger.isDebugEnabled()){ + long beginTime = startTimeThreadLocal.get();//得到线程绑定的局部变量(开始时间) + long endTime = System.currentTimeMillis(); //2、结束时间 + logger.debug("计时结束: {} 用时: {} URI: {} 最大内存: {}m 已分配内存: {}m 已分配内存中的剩余空间: {}m 最大可用内存: {}m", + DateUtils.formatDate(endTime, "hh:mm:ss.SSS"), TimeUtils.formatDateAgo(endTime - beginTime), + request.getRequestURI(), Runtime.getRuntime().maxMemory()/1024/1024, Runtime.getRuntime().totalMemory()/1024/1024, Runtime.getRuntime().freeMemory()/1024/1024, + (Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().freeMemory())/1024/1024); + startTimeThreadLocal.remove(); //用完之后销毁线程变量数据 + } + + } + +} diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/utils/LogUtils.java b/modules/core/src/main/java/com/jeesite/modules/sys/utils/LogUtils.java index 8babdfeb..5478d285 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/utils/LogUtils.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/utils/LogUtils.java @@ -1,210 +1,197 @@ -/** - * Copyright (c) 2013-Now http://jeesite.com All rights reserved. - */ -package com.jeesite.modules.sys.utils; - -import java.lang.reflect.Method; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.core.DefaultParameterNameDiscoverer; -import org.springframework.core.ParameterNameDiscoverer; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.method.HandlerMethod; - -import com.jeesite.common.config.Global; -import com.jeesite.common.entity.BaseEntity; -import com.jeesite.common.lang.ExceptionUtils; -import com.jeesite.common.lang.StringUtils; -import com.jeesite.common.mybatis.annotation.Column; -import com.jeesite.common.mybatis.annotation.Table; -import com.jeesite.common.mybatis.mapper.MapperHelper; -import com.jeesite.common.network.IpUtils; -import com.jeesite.common.utils.SpringUtils; -import com.jeesite.common.web.http.ServletUtils; -import com.jeesite.common.web.http.UserAgentUtils; -import com.jeesite.modules.sys.entity.Log; -import com.jeesite.modules.sys.entity.User; -import com.jeesite.modules.sys.service.LogService; -import com.jeesite.modules.sys.service.MenuService; -import com.jeesite.modules.sys.utils.UserUtils; - -import eu.bitwalker.useragentutils.UserAgent; - -/** - * 字典工具类 - * @author ThinkGem - * @version 2014-11-7 - */ -public class LogUtils { - - /** - * 静态内部类,延迟加载,懒汉式,线程安全的单例模式 - */ - private static final class Static { - private static LogService logService = SpringUtils.getBean(LogService.class); - private static MenuService menuService = SpringUtils.getBean(MenuService.class); - } - - // 参数名获取工具(尝试获取标注为@ModelAttribute注解的方法,第一个参数名一般为主键名) - private static ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer(); - - /** - * 保存日志 - */ - public static void saveLog(String title){ - saveLog(null, null, null, title); - } - - /** - * 保存日志 - */ - public static void saveLog(HttpServletRequest request, String title){ - saveLog(request, null, null, title); - } - - /** - * 保存日志 - */ - public static void saveLog(HttpServletRequest request, Object handler, Exception ex, String title){ - saveLog(null, request, handler, ex, title); - } - - /** - * 保存日志 - */ - public static void saveLog(User user, HttpServletRequest request, Object handler, Exception ex, String title){ - if (user == null){ - user = UserUtils.getUser(); - } - if (request == null){ - request = ServletUtils.getRequest(); - } - if (request != null && user != null && StringUtils.isNotBlank(user.getUserCode())){ - Log log = new Log(); - log.setLogTitle(title); - Throwable throwable = ex != null ? ex : ExceptionUtils.getThrowable(request); - log.setLogType(throwable == null ? Log.TYPE_ACCESS : Log.TYPE_EXCEPTION); - log.setServerAddr(request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()); - log.setRemoteAddr(IpUtils.getRemoteAddr(request)); - UserAgent userAgent = UserAgentUtils.getUserAgent(request); - log.setDeviceName(userAgent.getOperatingSystem().getName()); - log.setBrowserName(userAgent.getBrowser().getName()); - log.setUserAgent(request.getHeader("User-Agent")); - log.setRequestUri(StringUtils.abbr(request.getRequestURI(), 255)); - log.setRequestParams(request.getParameterMap()); - log.setRequestMethod(request.getMethod()); - if (Global.isUseCorpModel()){ - log.setCorpCode(user.getCorpCode()); - log.setCorpName(user.getCorpName()); - } - log.setCurrentUser(user); - log.preInsert(); - - // 异步保存日志 - new SaveLogThread(log, handler, throwable).start(); - - } - } - /** - * 保存日志线程 - */ - public static class SaveLogThread extends Thread{ - - private Log log; - private Object handler; - private Throwable throwable; - - public SaveLogThread(Log log, Object handler, Throwable throwable){ - super(SaveLogThread.class.getSimpleName()); - this.log = log; - this.handler = handler; - this.throwable = throwable; - } - - @Override - public void run() { - // 获取日志标题 - if (StringUtils.isBlank(log.getLogTitle())){ - String permission = ""; - if (handler instanceof HandlerMethod){ - HandlerMethod hm = ((HandlerMethod)handler); - Method m = hm.getMethod(); - // 获取权限字符串 - RequiresPermissions rp = m.getAnnotation(RequiresPermissions.class); - permission = (rp != null ? StringUtils.join(rp.value(), ",") : ""); - - // 尝试获取BaseEntity的设置的主键值 - for (Class type : m.getParameterTypes()){ - try { - // 判断是否是BaseEntity的子类 - Class superClass = type.getSuperclass(); - while(superClass != null && superClass != BaseEntity.class){ - superClass = superClass.getSuperclass(); - }; - // 如果是BaseEntity的子类,则获取主键名 - if (superClass != null){ - Table t = type.getAnnotation(Table.class); - for (Column c : t.columns()){ - if (c.isPK()){ - try { - String attrName = MapperHelper.getAttrName(c); - if (attrName != null){ - log.setBizKey(log.getRequestParam(attrName)); - } - } catch (Exception e) { - break; - } - } - } - } - } catch (Exception e) { - break; - } - } - - // 尝试获取标注为@ModelAttribute注解的方法,第一个参数名一般为主键名 - if (StringUtils.isBlank(log.getBizKey())){ - for (Method me : hm.getBeanType().getMethods()){ - ModelAttribute ma = AnnotationUtils.findAnnotation(me, ModelAttribute.class); - if(ma != null){ - String[] ps = pnd.getParameterNames(me); - if(ps != null && ps.length > 0){ - log.setBizKey(StringUtils.abbr(log.getRequestParam(ps[0]), 64)); - break; - } - } - } - } - - // 最后尝试获取参数为id的值 - if (StringUtils.isBlank(log.getBizKey())){ - log.setBizKey(log.getRequestParam("id")); - } - - } - log.setLogTitle(Static.menuService.getMenuNamePath(log.getRequestUri(), permission)); - } - if (StringUtils.isBlank(log.getLogTitle())){ - if (StringUtils.contains(log.getRequestParams(), "taskCommandInfo=")){ - log.setLogTitle("我的任务-任务办理"); - }else{ - log.setLogTitle("未知操作"); - } - } - // 如果有异常,设置异常信息(将异常对象转换为字符串) - log.setExceptionInfo(ExceptionUtils.getStackTraceAsString(throwable)); - // 如果无地址并无异常日志,则不保存信息 - if (StringUtils.isBlank(log.getRequestUri()) && StringUtils.isBlank(log.getExceptionInfo())){ - return; - } - // 保存日志信息 - log.setIsNewRecord(true); - Static.logService.insertLog(log); - - } - } - -} +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ +package com.jeesite.modules.sys.utils; + +import java.lang.reflect.Method; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.method.HandlerMethod; + +import com.jeesite.common.config.Global; +import com.jeesite.common.entity.BaseEntity; +import com.jeesite.common.lang.ExceptionUtils; +import com.jeesite.common.lang.ObjectUtils; +import com.jeesite.common.lang.StringUtils; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.Table; +import com.jeesite.common.mybatis.mapper.MapperHelper; +import com.jeesite.common.network.IpUtils; +import com.jeesite.common.utils.SpringUtils; +import com.jeesite.common.web.http.UserAgentUtils; +import com.jeesite.modules.sys.entity.Log; +import com.jeesite.modules.sys.entity.User; +import com.jeesite.modules.sys.service.LogService; +import com.jeesite.modules.sys.service.MenuService; + +import eu.bitwalker.useragentutils.UserAgent; + +/** + * 字典工具类 + * @author ThinkGem + * @version 2014-11-7 + */ +public class LogUtils { + + /** + * 静态内部类,延迟加载,懒汉式,线程安全的单例模式 + */ + private static final class Static { + private static LogService logService = SpringUtils.getBean(LogService.class); + private static MenuService menuService = SpringUtils.getBean(MenuService.class); + } + + // 参数名获取工具(尝试获取标注为@ModelAttribute注解的方法,第一个参数名一般为主键名) + private static ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer(); + + /** + * 保存日志 + */ + public static void saveLog(HttpServletRequest request, String logTitle, String logType){ + saveLog(UserUtils.getUser(), request, null, null, logTitle, logType); + } + + /** + * 保存日志 + */ + public static void saveLog(User user, HttpServletRequest request, Object handler, Exception ex, String logTitle, String logType){ + if (user == null || StringUtils.isBlank(user.getUserCode()) || request == null){ + return; + } + Log log = new Log(); + log.setLogTitle(logTitle); + log.setLogType(logType); + if (StringUtils.isBlank(log.getLogType())){ + String sqlCommandTypes = ObjectUtils.toString(request.getAttribute(SqlCommandType.class.getName())); + if (StringUtils.inString(","+sqlCommandTypes+",", ",INSERT,", ",UPDATE,", ",DELETE,")){ + log.setLogType(Log.TYPE_UPDATE); + }else if (StringUtils.inString(","+sqlCommandTypes+",", ",SELECT,")){ + log.setLogType(Log.TYPE_SELECT); + }else{ + log.setLogType(Log.TYPE_ACCESS); + } + } + log.setServerAddr(request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()); + log.setRemoteAddr(IpUtils.getRemoteAddr(request)); + UserAgent userAgent = UserAgentUtils.getUserAgent(request); + log.setDeviceName(userAgent.getOperatingSystem().getName()); + log.setBrowserName(userAgent.getBrowser().getName()); + log.setUserAgent(request.getHeader("User-Agent")); + log.setRequestUri(StringUtils.abbr(request.getRequestURI(), 255)); + log.setRequestParams(request.getParameterMap()); + log.setRequestMethod(request.getMethod()); + if (Global.isUseCorpModel()){ + log.setCorpCode(user.getCorpCode()); + log.setCorpName(user.getCorpName()); + } + log.setCurrentUser(user); + log.preInsert(); + + // 获取异常对象 + Throwable throwable = null; + if (ex != null){ + throwable = ExceptionUtils.getThrowable(request); + } + + // 异步保存日志 + new SaveLogThread(log, handler, throwable).start(); + } + /** + * 保存日志线程 + */ + public static class SaveLogThread extends Thread{ + + private Log log; + private Object handler; + private Throwable throwable; + + public SaveLogThread(Log log, Object handler, Throwable throwable){ + super(SaveLogThread.class.getSimpleName()); + this.log = log; + this.handler = handler; + this.throwable = throwable; + } + + @Override + public void run() { + // 获取日志标题 + if (StringUtils.isBlank(log.getLogTitle())){ + String permission = ""; + if (handler instanceof HandlerMethod){ + HandlerMethod hm = ((HandlerMethod)handler); + Method m = hm.getMethod(); + // 获取权限字符串 + RequiresPermissions rp = m.getAnnotation(RequiresPermissions.class); + permission = (rp != null ? StringUtils.join(rp.value(), ",") : ""); + + // 尝试获取BaseEntity的设置的主键值 + for (Class type : m.getParameterTypes()){ + try { + // 判断是否是BaseEntity的子类 + Class superClass = type.getSuperclass(); + while(superClass != null && superClass != BaseEntity.class){ + superClass = superClass.getSuperclass(); + }; + // 如果是BaseEntity的子类,则获取主键名 + if (superClass != null){ + Table t = type.getAnnotation(Table.class); + for (Column c : t.columns()){ + if (c.isPK()){ + try { + String attrName = MapperHelper.getAttrName(c); + if (attrName != null){ + log.setBizKey(log.getRequestParam(attrName)); + } + } catch (Exception e) { + break; + } + } + } + } + } catch (Exception e) { + break; + } + } + + // 尝试获取标注为@ModelAttribute注解的方法,第一个参数名一般为主键名 + if (StringUtils.isBlank(log.getBizKey())){ + for (Method me : hm.getBeanType().getMethods()){ + ModelAttribute ma = AnnotationUtils.findAnnotation(me, ModelAttribute.class); + if(ma != null){ + String[] ps = pnd.getParameterNames(me); + if(ps != null && ps.length > 0){ + log.setBizKey(StringUtils.abbr(log.getRequestParam(ps[0]), 64)); + log.setBizType(me.getReturnType().getSimpleName()); + break; + } + } + } + } + } + log.setLogTitle(Static.menuService.getMenuNamePath(log.getRequestUri(), permission)); + } + if (StringUtils.isBlank(log.getLogTitle())){ + log.setLogTitle("未知操作"); + } + // 如果有异常,设置异常信息(将异常对象转换为字符串) + log.setExceptionInfo(throwable != null ? Global.YES : Global.NO); + log.setExceptionInfo(ExceptionUtils.getStackTraceAsString(throwable)); + // 如果无地址并无异常日志,则不保存信息 + if (StringUtils.isBlank(log.getRequestUri()) && StringUtils.isBlank(log.getExceptionInfo())){ + return; + } + // 保存日志信息 + log.setIsNewRecord(true); + Static.logService.insertLog(log); + + } + } + +} diff --git a/modules/core/src/main/resources/jeesite-core.yml b/modules/core/src/main/resources/jeesite-core.yml index 8eac8bf0..7270746a 100644 --- a/modules/core/src/main/resources/jeesite-core.yml +++ b/modules/core/src/main/resources/jeesite-core.yml @@ -56,9 +56,6 @@ jdbc: # 最大连接数 maxActive: 20 - # 表名前缀 - tablePrefix: js_ - # # 多数数据源名称列表,调用方式:DataSourceHolder.setDataSourceName("ds2") # dataSourceNames: ds2 # @@ -69,13 +66,23 @@ jdbc: # url: jdbc:oracle:thin:@127.0.0.1:1521/orcl # username: jeesite # password: jeesite -# encryptUsername: false -# encryptPassword: true +# testSql: ~ +# encrypt: +# username: false +# password: true # pool: # init: 1 # minIdle: 3 # maxActive: 20 + # 表名前缀 + tablePrefix: js_ + + # Druid连接池监控 + druid: + stat: + enabled: true + # Redis 配置 redis: @@ -353,11 +360,25 @@ web: # 后台管理日志记录拦截器 log: enabled: true + addPathPatterns: > + ${adminPath}/** + excludePathPatterns: > + ${adminPath}/index, + ${adminPath}/login, + ${adminPath}/**/listData, + ${adminPath}/**/treeData, + ${adminPath}/file/**, + ${adminPath}/tags/*, + ${adminPath}/sys/log/**, + ${adminPath}/sys/online/count # 前台自动切换到手机视图拦截器 mobile: enabled: false - + addPathPatterns: > + ${frontPath}/** + excludePathPatterns: ~ + # 静态文件后缀,过滤静态文件,以提高访问性能。 staticFile: .css,.js,.map,.png,.jpg,.gif,.jpeg,.bmp,.ico,.swf,.psd,.htc,.crx,.xpi,.exe,.ipa,.apk,.otf,.eot,.svg,.ttf,.woff,.woff2 diff --git a/modules/core/src/main/resources/logger-core.xml b/modules/core/src/main/resources/logger-core.xml index ee73705b..35cfa3a2 100644 --- a/modules/core/src/main/resources/logger-core.xml +++ b/modules/core/src/main/resources/logger-core.xml @@ -15,5 +15,6 @@ + \ No newline at end of file diff --git a/web/.settings/org.eclipse.jdt.core.prefs b/web/.settings/org.eclipse.jdt.core.prefs index 443e0859..6e80039d 100644 --- a/web/.settings/org.eclipse.jdt.core.prefs +++ b/web/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,8 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/web/.settings/org.eclipse.wst.common.project.facet.core.xml b/web/.settings/org.eclipse.wst.common.project.facet.core.xml index af7ced35..05642433 100644 --- a/web/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/web/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -2,6 +2,6 @@ - + diff --git a/web/pom.xml b/web/pom.xml index 03eb8ac1..d2632f6e 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -20,6 +20,9 @@ com.jeesite.modules.config.Application + + + 1.8 false false diff --git a/web/src/test/java/com/jeesite/test/InitCoreData.java b/web/src/test/java/com/jeesite/test/InitCoreData.java index 9ebcd9bd..d04a6b62 100644 --- a/web/src/test/java/com/jeesite/test/InitCoreData.java +++ b/web/src/test/java/com/jeesite/test/InitCoreData.java @@ -24,14 +24,14 @@ public class InitCoreData extends com.jeesite.modules.db.InitCoreData { initConfig(); initModule(); initDict(); - initRole(); - initMenu(); - initUser(); +// initRole(); +// initMenu(); +// initUser(); // initArea(); - initOffice(); - initCompany(); - initPost(); - initEmpUser(); +// initOffice(); +// initCompany(); +// initPost(); +// initEmpUser(); } }