From 37897fc8f7d25f2230e597fbac9d23efa131e316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E6=9E=9A=E7=A0=81=E5=86=9C?= <154040976@qq.com> Date: Tue, 18 Apr 2023 08:36:51 +0000 Subject: [PATCH 1/9] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 一枚码农 <154040976@qq.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c1e402d..8e6693b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- 👉 http://42.192.219.164:8081👈|admin|123456 + 👉 http://42.192.219.164👈|admin|123456

@@ -37,7 +37,7 @@ lenosp是一个基于spring boot的脚手架,并提供完善社区文档教程 # 体验 -[http://42.192.219.164:8081/login](http://42.192.219.164:8081/login) +[http://42.192.219.164/login](http://42.192.219.164/login) 体验账户:admin,所有账户密码:123456 测试环境,所有业务增删改不会持久化,默认显示成功 -- Gitee From 4fc80e6672e178666ddb10719b67e8adae357ff1 Mon Sep 17 00:00:00 2001 From: Star_Chen <1622997479@qq.com> Date: Tue, 18 Apr 2023 22:42:26 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=89=80=E6=9C=89=E5=AD=90=E5=B7=A5?= =?UTF-8?q?=E7=A8=8B=E4=BE=9D=E8=B5=96=E6=95=B4=E7=90=86=EF=BC=8Curl?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=8C=E7=BB=9F=E4=B8=80junit=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=E3=80=82=20BaseController=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=EF=BC=8C=E5=8F=96=E6=B6=88equals=E8=AD=A6?= =?UTF-8?q?=E5=91=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- len-activiti/pom.xml | 12 +++++------- len-blog/pom.xml | 13 +++++++------ len-common/pom.xml | 3 +-- len-core/pom.xml | 11 ++++------- .../src/main/java/com/len/base/BaseController.java | 8 ++++++-- len-sys/pom.xml | 9 ++------- len-web/pom.xml | 8 +++----- pom.xml | 10 ++++++++-- 8 files changed, 36 insertions(+), 38 deletions(-) diff --git a/len-activiti/pom.xml b/len-activiti/pom.xml index 0c11fb5..51ae321 100644 --- a/len-activiti/pom.xml +++ b/len-activiti/pom.xml @@ -7,19 +7,18 @@ lenosp-2.0-SNAPSHOT 4.0.0 - len-activiti + jar len-activiti - http://maven.apache.org + https://gitee.com/zzdevelop/lenosp UTF-8 - 5.22.0 - + org.activiti @@ -54,7 +53,7 @@ junit junit - 4.12 + ${junit.version} @@ -62,7 +61,7 @@ com.len len-sys - lenosp-2.0-SNAPSHOT + ${lenosp.version} @@ -85,5 +84,4 @@ - diff --git a/len-blog/pom.xml b/len-blog/pom.xml index bb19071..14656f6 100644 --- a/len-blog/pom.xml +++ b/len-blog/pom.xml @@ -8,9 +8,15 @@ lenosp-2.0-SNAPSHOT 4.0.0 - len-blog + jar + + len-blog + https://gitee.com/zzdevelop/lenosp + + UTF-8 + @@ -21,10 +27,5 @@ com.len len-sys - - junit - junit - 4.12 - \ No newline at end of file diff --git a/len-common/pom.xml b/len-common/pom.xml index b10d339..e80f0c4 100644 --- a/len-common/pom.xml +++ b/len-common/pom.xml @@ -11,7 +11,6 @@ jar len-common - https://gitee.com/zzdevelop/lenosp @@ -24,7 +23,7 @@ junit junit - 4.11 + ${junit.version} test diff --git a/len-core/pom.xml b/len-core/pom.xml index 7fe9853..54a204f 100644 --- a/len-core/pom.xml +++ b/len-core/pom.xml @@ -7,12 +7,11 @@ lenosp-2.0-SNAPSHOT 4.0.0 - len-core - + jar len-core - http://maven.apache.org + https://gitee.com/zzdevelop/lenosp UTF-8 @@ -22,7 +21,7 @@ junit junit - 3.8.1 + ${junit.version} test @@ -30,9 +29,7 @@ javax.mail mail - 1.5.0-b01 + ${mail.version} - - diff --git a/len-core/src/main/java/com/len/base/BaseController.java b/len-core/src/main/java/com/len/base/BaseController.java index 90d67c0..60a9bb7 100644 --- a/len-core/src/main/java/com/len/base/BaseController.java +++ b/len-core/src/main/java/com/len/base/BaseController.java @@ -25,12 +25,16 @@ import com.len.util.MsHelper; import lombok.extern.slf4j.Slf4j; +/** + * 控制器基础抽象类 + * @author https://gitee.com/zzdevelop/lenosp 自行补充 + */ @Slf4j public abstract class BaseController { private static boolean isAjaxRequest(HttpServletRequest request) { String requestedWith = request.getHeader("x-requested-with"); - return requestedWith != null && requestedWith.equalsIgnoreCase("XMLHttpRequest"); + return "XMLHttpRequest".equalsIgnoreCase(requestedWith); } @InitBinder @@ -41,7 +45,7 @@ public abstract class BaseController { } @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class}) - public String authorizationException(HttpServletRequest request, HttpServletResponse response) { + public String authorizationException(HttpServletRequest request) { if (isAjaxRequest(request)) { Map map = Maps.newHashMap(); map.put("code", "403"); diff --git a/len-sys/pom.xml b/len-sys/pom.xml index a70b196..03e3e3e 100644 --- a/len-sys/pom.xml +++ b/len-sys/pom.xml @@ -7,11 +7,11 @@ lenosp-2.0-SNAPSHOT 4.0.0 - len-sys + jar len-sys - http://maven.apache.org + https://gitee.com/zzdevelop/lenosp UTF-8 @@ -22,10 +22,5 @@ com.len len-core - - junit - junit - 4.12 - diff --git a/len-web/pom.xml b/len-web/pom.xml index d9482f5..e9aed51 100644 --- a/len-web/pom.xml +++ b/len-web/pom.xml @@ -8,18 +8,17 @@ 4.0.0 len-web - len-web - http://maven.apache.org jar + len-web + https://gitee.com/zzdevelop/lenosp - org.mybatis.generator mybatis-generator-core - 1.3.5 + ${mybatis-generator-core.version} org.springframework.boot @@ -42,7 +41,6 @@ com.len len-blog - lenosp-2.0-SNAPSHOT diff --git a/pom.xml b/pom.xml index ba6542b..5855161 100644 --- a/pom.xml +++ b/pom.xml @@ -8,6 +8,8 @@ lenosp pom lenosp-2.0-SNAPSHOT + https://gitee.com/zzdevelop/lenosp + org.springframework.boot spring-boot-starter-parent @@ -20,13 +22,14 @@ 1.8 lenosp-2.0-SNAPSHOT + 1.2.8 3.5.3 3.2.0 - 5.1.6 - 1.2.8 + 5.22.0 1.2.5 2.5.0 2.3.0 + 5.1.6 2.1.9.RELEASE 1.3.2 @@ -42,6 +45,8 @@ 3.7 1.3.2 + 4.12 + 1.5.0-b01 4.0.12 1.16.10 2.7.0 @@ -49,6 +54,7 @@ 1.2.41 1.7.25 2.0.1.Final + 1.3.5 6.0.10.Final 3.0.0 -- Gitee From 8b09e8903b1d18d175a214d59be9a12ba9d50ba5 Mon Sep 17 00:00:00 2001 From: linht12 <343773342@qq.com> Date: Thu, 20 Apr 2023 10:53:59 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsonar=E6=BC=8F=E6=B4=9E?= =?UTF-8?q?=E5=92=8C=E9=98=BF=E9=87=8C=E8=A7=84=E7=BA=A6=E6=89=AB=E6=8F=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/len/util/AnimatedGifEncoder.java | 147 +++++++++++------- .../activiti/FilterServletOutputStream.java | 10 +- .../org/activiti/GenericResponseWrapper.java | 10 +- .../org/activiti/JsonpCallbackFilter.java | 12 +- .../image/HMProcessDiagramGenerator.java | 21 +-- .../impl/DefaultProcessDiagramCanvas.java | 25 +-- .../impl/DefaultProcessDiagramGenerator.java | 90 +++++------ ...rocessDefinitionDiagramLayoutResource.java | 66 ++++---- .../service/impl/BlogArticleServiceImpl.java | 11 +- .../src/main/java/com/len/util/JdbcUtil.java | 10 -- .../java/com/len/util/VerifyCodeUtils.java | 23 +-- .../com/len/core/filter/VerifyCodeUtils.java | 23 +-- .../com/len/core/listener/LenospInit.java | 2 +- .../core/quartz/CustomQuartz/DataSchdule.java | 8 +- len-web/src/main/java/test/ActivitiDemo.java | 26 ++-- .../src/main/java/test/ActivitiGateWay.java | 18 ++- 16 files changed, 270 insertions(+), 232 deletions(-) diff --git a/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java b/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java index 98ef705..4398039 100644 --- a/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java +++ b/len-activiti/src/main/java/com/len/util/AnimatedGifEncoder.java @@ -164,8 +164,9 @@ public class AnimatedGifEncoder { * Flushes any pending data and closes output file. If writing to an OutputStream, the stream is not closed. */ public boolean finish() { - if (!started) + if (!started) { return false; + } boolean ok = true; started = false; try { @@ -212,8 +213,9 @@ public class AnimatedGifEncoder { * @return */ public void setQuality(int quality) { - if (quality < 1) + if (quality < 1) { quality = 1; + } sample = quality; } @@ -224,14 +226,17 @@ public class AnimatedGifEncoder { * @param h int frame width. */ public void setSize(int w, int h) { - if (started && !firstFrame) + if (started && !firstFrame) { return; + } width = w; height = h; - if (width < 1) + if (width < 1) { width = 320; - if (height < 1) + } + if (height < 1) { height = 240; + } sizeSet = true; } @@ -242,8 +247,9 @@ public class AnimatedGifEncoder { * @return false if initial write failed. */ public boolean start(OutputStream os) { - if (os == null) + if (os == null) { return false; + } boolean ok = true; closeStream = false; out = os; @@ -311,8 +317,9 @@ public class AnimatedGifEncoder { * */ protected int findClosest(Color c) { - if (colorTab == null) + if (colorTab == null) { return -1; + } int r = c.getRed(); int g = c.getGreen(); int b = c.getBlue(); @@ -528,7 +535,7 @@ class LZWEncoder { // for the decompressor. Late addition: construct the table according to // file size for noticeable speed improvement on small files. Please direct // questions about this implementation to ames!jaw. - int masks[] = {0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, + int[] masks = {0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF}; // Number of characters so far in this 'packet' int a_count; @@ -567,8 +574,9 @@ class LZWEncoder { // characters, flush the packet to disk. void char_out(byte c, OutputStream outs) throws IOException { accum[a_count++] = c; - if (a_count >= 254) + if (a_count >= 254) { flush_char(outs); + } } // Clear out the hash table @@ -584,8 +592,9 @@ class LZWEncoder { // reset code table void cl_hash(int hsize) { - for (int i = 0; i < hsize; ++i) + for (int i = 0; i < hsize; ++i) { htab[i] = -1; + } } void compress(int init_bits, OutputStream outs) throws IOException { @@ -614,8 +623,9 @@ class LZWEncoder { ent = nextPixel(); hshift = 0; - for (fcode = hsize; fcode < 65536; fcode *= 2) + for (fcode = hsize; fcode < 65536; fcode *= 2) { ++hshift; + } hshift = 8 - hshift; // set hash code range bound hsize_reg = hsize; @@ -634,11 +644,13 @@ class LZWEncoder { } else if (htab[i] >= 0) // non-empty slot { disp = hsize_reg - i; // secondary hash (after G. Knott) - if (i == 0) + if (i == 0) { disp = 1; + } do { - if ((i -= disp) < 0) + if ((i -= disp) < 0) { i += hsize_reg; + } if (htab[i] == fcode) { ent = codetab[i]; @@ -651,8 +663,9 @@ class LZWEncoder { if (free_ent < maxmaxcode) { codetab[i] = free_ent++; // code -> hashtable htab[i] = fcode; - } else + } else { cl_block(outs); + } } // Put out the final code. output(ent, outs); @@ -688,9 +701,9 @@ class LZWEncoder { // Return the next pixel from the image // ---------------------------------------------------------------------------- private int nextPixel() { - if (remaining == 0) + if (remaining == 0) { return EOF; - + } --remaining; byte pix = pixAry[curPixel++]; @@ -701,11 +714,11 @@ class LZWEncoder { void output(int code, OutputStream outs) throws IOException { cur_accum &= masks[cur_bits]; - if (cur_bits > 0) + if (cur_bits > 0) { cur_accum |= (code << cur_bits); - else + }else { cur_accum = code; - + } cur_bits += n_bits; while (cur_bits >= 8) { @@ -722,10 +735,11 @@ class LZWEncoder { clear_flg = false; } else { ++n_bits; - if (n_bits == maxbits) + if (n_bits == maxbits) { maxcode = maxmaxcode; - else + }else { maxcode = MAXCODE(n_bits); + } } } @@ -892,8 +906,9 @@ class NeuQuant { public byte[] colorMap() { byte[] map = new byte[3 * netsize]; int[] index = new int[netsize]; - for (int i = 0; i < netsize; i++) + for (int i = 0; i < netsize; i++) { index[network[i][3]] = i; + } int k = 0; for (int i = 0; i < netsize; i++) { int j = index[i]; @@ -949,15 +964,17 @@ class NeuQuant { /* smallval entry is now in position i */ if (smallval != previouscol) { netindex[previouscol] = (startpos + i) >> 1; - for (j = previouscol + 1; j < smallval; j++) + for (j = previouscol + 1; j < smallval; j++) { netindex[j] = i; + } previouscol = smallval; startpos = i; } } netindex[previouscol] = (startpos + maxnetpos) >> 1; - for (j = previouscol + 1; j < 256; j++) + for (j = previouscol + 1; j < 256; j++) { netindex[j] = maxnetpos; /* really 256 */ + } } /* @@ -970,8 +987,9 @@ class NeuQuant { byte[] p; int pix, lim; - if (lengthcount < minpicturebytes) + if (lengthcount < minpicturebytes) { samplefac = 1; + } alphadec = 30 + ((samplefac - 1) / 3); p = thepicture; pix = 0; @@ -982,25 +1000,27 @@ class NeuQuant { radius = initradius; rad = radius >> radiusbiasshift; - if (rad <= 1) + if (rad <= 1) { rad = 0; - for (i = 0; i < rad; i++) + } + for (i = 0; i < rad; i++) { radpower[i] = alpha * (((rad * rad - i * i) * radbias) / (rad * rad)); - + } // fprintf(stderr,"beginning 1D learning: initial radius=%d\n", rad); - if (lengthcount < minpicturebytes) + if (lengthcount < minpicturebytes) { step = 3; - else if ((lengthcount % prime1) != 0) + } else if ((lengthcount % prime1) != 0) { step = 3 * prime1; - else { - if ((lengthcount % prime2) != 0) + }else { + if ((lengthcount % prime2) != 0){ step = 3 * prime2; - else { - if ((lengthcount % prime3) != 0) + }else { + if ((lengthcount % prime3) != 0) { step = 3 * prime3; - else + }else { step = 3 * prime4; + } } } @@ -1012,24 +1032,27 @@ class NeuQuant { j = contest(b, g, r); altersingle(alpha, j, b, g, r); - if (rad != 0) + if (rad != 0) { alterneigh(rad, j, b, g, r); /* alter neighbours */ - + } pix += step; - if (pix >= lim) + if (pix >= lim) { pix -= lengthcount; - + } i++; - if (delta == 0) + if (delta == 0) { delta = 1; + } if (i % delta == 0) { alpha -= alpha / alphadec; radius -= radius / radiusdec; rad = radius >> radiusbiasshift; - if (rad <= 1) + if (rad <= 1) { rad = 0; - for (j = 0; j < rad; j++) + } + for (j = 0; j < rad; j++) { radpower[j] = alpha * (((rad * rad - j * j) * radbias) / (rad * rad)); + } } } // fprintf(stderr,"finished 1D learning: final alpha=%f @@ -1056,20 +1079,23 @@ class NeuQuant { if (i < netsize) { p = network[i]; dist = p[1] - g; /* inx key */ - if (dist >= bestd) + if (dist >= bestd) { i = netsize; /* stop iter */ - else { + }else { i++; - if (dist < 0) + if (dist < 0) { dist = -dist; + } a = p[0] - b; - if (a < 0) + if (a < 0) { a = -a; + } dist += a; if (dist < bestd) { a = p[2] - r; - if (a < 0) + if (a < 0) { a = -a; + } dist += a; if (dist < bestd) { bestd = dist; @@ -1081,20 +1107,24 @@ class NeuQuant { if (j >= 0) { p = network[j]; dist = g - p[1]; /* inx key - reverse dif */ - if (dist >= bestd) + if (dist >= bestd) { j = -1; /* stop iter */ + } else { j--; - if (dist < 0) + if (dist < 0) { dist = -dist; + } a = p[0] - b; - if (a < 0) + if (a < 0) { a = -a; + } dist += a; if (dist < bestd) { a = p[2] - r; - if (a < 0) + if (a < 0) { a = -a; + } dist += a; if (dist < bestd) { bestd = dist; @@ -1139,11 +1169,13 @@ class NeuQuant { int[] p; lo = i - rad; - if (lo < -1) + if (lo < -1) { lo = -1; + } hi = i + rad; - if (hi > netsize) + if (hi > netsize) { hi = netsize; + } j = i + 1; k = i - 1; @@ -1206,15 +1238,18 @@ class NeuQuant { for (i = 0; i < netsize; i++) { n = network[i]; dist = n[0] - b; - if (dist < 0) + if (dist < 0) { dist = -dist; + } a = n[1] - g; - if (a < 0) + if (a < 0) { a = -a; + } dist += a; a = n[2] - r; - if (a < 0) + if (a < 0) { a = -a; + } dist += a; if (dist < bestd) { bestd = dist; diff --git a/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java b/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java index c351445..abf1fa0 100644 --- a/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java +++ b/len-activiti/src/main/java/org/activiti/FilterServletOutputStream.java @@ -15,23 +15,23 @@ public class FilterServletOutputStream extends ServletOutputStream { public FilterServletOutputStream(OutputStream output) { stream = new DataOutputStream(output); } - + @Override public void write(int b) throws IOException { stream.write(b); } - + @Override public void write(byte[] b) throws IOException { stream.write(b); } - + @Override public void write(byte[] b, int off, int len) throws IOException { stream.write(b, off, len); } - + @Override public void setWriteListener(WriteListener writeListener) { this.writeListener = writeListener; } - + @Override public boolean isReady() { return true; } diff --git a/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java b/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java index 2856f39..322b52e 100644 --- a/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java +++ b/len-activiti/src/main/java/org/activiti/GenericResponseWrapper.java @@ -20,11 +20,11 @@ public class GenericResponseWrapper extends HttpServletResponseWrapper { public byte[] getData() { return output.toByteArray(); } - + @Override public ServletOutputStream getOutputStream() { return new FilterServletOutputStream(output); } - + @Override public PrintWriter getWriter() { return new PrintWriter(getOutputStream(), true); } @@ -32,16 +32,16 @@ public class GenericResponseWrapper extends HttpServletResponseWrapper { public int getContentLength() { return contentLength; } - + @Override public void setContentLength(int length) { this.contentLength = length; super.setContentLength(length); } - + @Override public String getContentType() { return contentType; } - + @Override public void setContentType(String type) { this.contentType = type; super.setContentType(type); diff --git a/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java b/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java index e787a2c..14e4325 100644 --- a/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java +++ b/len-activiti/src/main/java/org/activiti/JsonpCallbackFilter.java @@ -15,9 +15,9 @@ import lombok.extern.slf4j.Slf4j; @WebFilter("/service/*") @Slf4j public class JsonpCallbackFilter implements Filter { - + @Override public void init(FilterConfig fConfig) throws ServletException {} - + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request; @@ -26,9 +26,9 @@ public class JsonpCallbackFilter implements Filter { Map parms = httpRequest.getParameterMap(); if (parms.containsKey("callback")) { - if (log.isDebugEnabled()) + if (log.isDebugEnabled()) { log.debug("Wrapping response with JSONP callback '" + parms.get("callback")[0] + "'"); - + } OutputStream out = httpResponse.getOutputStream(); GenericResponseWrapper wrapper = new GenericResponseWrapper(httpResponse); @@ -40,7 +40,7 @@ public class JsonpCallbackFilter implements Filter { outputStream.write(new String(parms.get("callback")[0] + "(").getBytes()); outputStream.write(wrapper.getData()); outputStream.write(new String(");").getBytes()); - byte jsonpResponse[] = outputStream.toByteArray(); + byte[] jsonpResponse = outputStream.toByteArray(); wrapper.setContentType("text/javascript;charset=UTF-8"); wrapper.setContentLength(jsonpResponse.length); @@ -53,6 +53,6 @@ public class JsonpCallbackFilter implements Filter { chain.doFilter(request, response); } } - + @Override public void destroy() {} } diff --git a/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java b/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java index f896c0a..d574517 100644 --- a/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java +++ b/len-activiti/src/main/java/org/activiti/image/HMProcessDiagramGenerator.java @@ -36,6 +36,7 @@ public interface HMProcessDiagramGenerator extends ProcessDiagramGenerator { * @param annotationFontName override the default annotation font * @param customClassLoader provide a custom classloader for retrieving icon images */ + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor); @@ -52,31 +53,33 @@ public interface HMProcessDiagramGenerator extends ProcessDiagramGenerator { * @param highLightedActivities activities to highlight * @param highLightedFlows flows to highlight */ + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows); - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, double scaleFactor); - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities); - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, double scaleFactor); - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader); - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor); + @Override public InputStream generatePngDiagram(BpmnModel bpmnModel); - + @Override public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor); - + @Override public InputStream generateJpgDiagram(BpmnModel bpmnModel); - + @Override public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor); - + @Override public BufferedImage generatePngImage(BpmnModel bpmnModel, double scaleFactor); } diff --git a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java index 2d318bb..98227d4 100644 --- a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java +++ b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramCanvas.java @@ -517,8 +517,9 @@ public class DefaultProcessDiagramCanvas { g.fill(outerCircle); g.setPaint(EVENT_BORDER_COLOR); - if (isInterrupting == false) + if (isInterrupting == false) { g.setStroke(NON_INTERRUPTING_EVENT_STROKE); + } g.draw(outerCircle); g.setStroke(originalStroke); g.setPaint(originalPaint); @@ -610,9 +611,9 @@ public class DefaultProcessDiagramCanvas { public void drawSequenceflow(int srcX, int srcY, int targetX, int targetY, boolean conditional, boolean highLighted, double scaleFactor) { Paint originalPaint = g.getPaint(); - if (highLighted) + if (highLighted) { g.setPaint(HIGHLIGHT_COLOR); - + } Line2D.Double line = new Line2D.Double(srcX, srcY, targetX, targetY); g.draw(line); drawArrowHead(line, scaleFactor); @@ -621,8 +622,9 @@ public class DefaultProcessDiagramCanvas { drawConditionalSequenceFlowIndicator(line, scaleFactor); } - if (highLighted) + if (highLighted) { g.setPaint(originalPaint); + } } public void drawAssociation(int[] xPoints, int[] yPoints, AssociationDirection associationDirection, @@ -645,7 +647,7 @@ public class DefaultProcessDiagramCanvas { Stroke originalStroke = g.getStroke(); g.setPaint(CONNECTION_COLOR); - if (connectionType.equals("association")) { + if ("association".equals(connectionType)) { g.setStroke(ASSOCIATION_STROKE); } else if (highLighted) { g.setPaint(HIGHLIGHT_COLOR); @@ -693,8 +695,9 @@ public class DefaultProcessDiagramCanvas { public void drawSequenceflowWithoutArrow(int srcX, int srcY, int targetX, int targetY, boolean conditional, boolean highLighted, double scaleFactor) { Paint originalPaint = g.getPaint(); - if (highLighted) + if (highLighted) { g.setPaint(HIGHLIGHT_COLOR); + } Line2D.Double line = new Line2D.Double(srcX, srcY, targetX, targetY); g.draw(line); @@ -703,8 +706,9 @@ public class DefaultProcessDiagramCanvas { drawConditionalSequenceFlowIndicator(line, scaleFactor); } - if (highLighted) + if (highLighted) { g.setPaint(originalPaint); + } } public void drawArrowHead(Line2D.Double line, double scaleFactor) { @@ -757,8 +761,9 @@ public class DefaultProcessDiagramCanvas { } public void drawConditionalSequenceFlowIndicator(Line2D.Double line, double scaleFactor) { - if (scaleFactor > 1.0) + if (scaleFactor > 1.0) { return; + } int horizontal = (int)(CONDITIONAL_INDICATOR_WIDTH * 0.7); int halfOfHorizontal = horizontal / 2; int halfOfVertical = CONDITIONAL_INDICATOR_WIDTH / 2; @@ -839,9 +844,9 @@ public class DefaultProcessDiagramCanvas { // g.setPaint(TASK_BOX_COLOR); g.setPaint(new Color(144, 238, 144)); int arcR = 6; - if (thickBorder) + if (thickBorder) { arcR = 3; - + } // shape RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, arcR, arcR); g.fill(rect); diff --git a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java index 9ffbcec..71852ba 100644 --- a/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java +++ b/len-activiti/src/main/java/org/activiti/image/impl/DefaultProcessDiagramGenerator.java @@ -44,7 +44,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator public DefaultProcessDiagramGenerator(final double scaleFactor) { // start event activityDrawInstructions.put(StartEvent.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); StartEvent startEvent = (StartEvent)flowNode; @@ -69,7 +69,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // signal catch activityDrawInstructions.put(IntermediateCatchEvent.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent)flowNode; @@ -90,7 +90,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // signal throw activityDrawInstructions.put(ThrowEvent.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); ThrowEvent throwEvent = (ThrowEvent)flowNode; @@ -110,7 +110,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // end event activityDrawInstructions.put(EndEvent.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); EndEvent endEvent = (EndEvent)flowNode; @@ -128,7 +128,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // task activityDrawInstructions.put(Task.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawTask(flowNode.getName(), graphicInfo); @@ -137,7 +137,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // user task activityDrawInstructions.put(UserTask.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawUserTask(flowNode.getName(), graphicInfo, scaleFactor); @@ -146,7 +146,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // script task activityDrawInstructions.put(ScriptTask.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawScriptTask(flowNode.getName(), graphicInfo, scaleFactor); @@ -155,7 +155,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // service task activityDrawInstructions.put(ServiceTask.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); ServiceTask serviceTask = (ServiceTask)flowNode; @@ -171,7 +171,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // receive task activityDrawInstructions.put(ReceiveTask.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawReceiveTask(flowNode.getName(), graphicInfo, scaleFactor); @@ -180,7 +180,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // send task activityDrawInstructions.put(SendTask.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawSendTask(flowNode.getName(), graphicInfo, scaleFactor); @@ -189,7 +189,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // manual task activityDrawInstructions.put(ManualTask.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawManualTask(flowNode.getName(), graphicInfo, scaleFactor); @@ -198,7 +198,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // businessRuleTask task activityDrawInstructions.put(BusinessRuleTask.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawBusinessRuleTask(flowNode.getName(), graphicInfo, scaleFactor); @@ -207,7 +207,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // exclusive gateway activityDrawInstructions.put(ExclusiveGateway.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawExclusiveGateway(graphicInfo, scaleFactor); @@ -216,7 +216,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // inclusive gateway activityDrawInstructions.put(InclusiveGateway.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawInclusiveGateway(graphicInfo, scaleFactor); @@ -225,7 +225,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // parallel gateway activityDrawInstructions.put(ParallelGateway.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawParallelGateway(graphicInfo, scaleFactor); @@ -234,7 +234,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // event based gateway activityDrawInstructions.put(EventGateway.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawEventBasedGateway(graphicInfo, scaleFactor); @@ -243,7 +243,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // Boundary timer activityDrawInstructions.put(BoundaryEvent.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); BoundaryEvent boundaryEvent = (BoundaryEvent)flowNode; @@ -277,7 +277,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // subprocess activityDrawInstructions.put(SubProcess.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { @@ -290,7 +290,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // Event subprocess activityDrawInstructions.put(EventSubProcess.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); if (graphicInfo.getExpanded() != null && !graphicInfo.getExpanded()) { @@ -303,7 +303,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // call activity activityDrawInstructions.put(CallActivity.class, new ActivityDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, FlowNode flowNode) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId()); processDiagramCanvas.drawCollapsedCallActivity(flowNode.getName(), graphicInfo); @@ -312,7 +312,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // text annotation artifactDrawInstructions.put(TextAnnotation.class, new ArtifactDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(artifact.getId()); TextAnnotation textAnnotation = (TextAnnotation)artifact; @@ -322,7 +322,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator // association artifactDrawInstructions.put(Association.class, new ArtifactDrawInstruction() { - + @Override public void draw(DefaultProcessDiagramCanvas processDiagramCanvas, BpmnModel bpmnModel, Artifact artifact) { Association association = (Association)artifact; String sourceRef = association.getSourceRef(); @@ -340,8 +340,8 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator List graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId()); graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int xPoints[] = new int[graphicInfoList.size()]; - int yPoints[] = new int[graphicInfoList.size()]; + int[] xPoints = new int[graphicInfoList.size()]; + int[] yPoints = new int[graphicInfoList.size()]; for (int i = 1; i < graphicInfoList.size(); i++) { GraphicInfo graphicInfo = graphicInfoList.get(i); GraphicInfo previousGraphicInfo = graphicInfoList.get(i - 1); @@ -405,8 +405,8 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator protected static GraphicInfo getLineCenter(List graphicInfoList) { GraphicInfo gi = new GraphicInfo(); - int xPoints[] = new int[graphicInfoList.size()]; - int yPoints[] = new int[graphicInfoList.size()]; + int[] xPoints = new int[graphicInfoList.size()]; + int[] yPoints = new int[graphicInfoList.size()]; double length = 0; double[] lengths = new double[graphicInfoList.size()]; @@ -635,7 +635,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator } return flowNodes; } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { @@ -643,7 +643,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator return generateProcessDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor).generateImage(imageType); } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor, List highLightedCurrentActivities) { @@ -652,55 +652,55 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator labelFontName, annotationFontName, customClassLoader, scaleFactor, highLightedCurrentActivities) .generateImage(imageType); } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows) { return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, 1.0); } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, List highLightedFlows, double scaleFactor) { return generateDiagram(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, scaleFactor); } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities) { return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList()); } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, List highLightedActivities, double scaleFactor) { return generateDiagram(bpmnModel, imageType, highLightedActivities, Collections.emptyList(), scaleFactor); } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), activityFontName, labelFontName, annotationFontName, customClassLoader, 1.0); } - + @Override public InputStream generateDiagram(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader, double scaleFactor) { return generateDiagram(bpmnModel, imageType, Collections.emptyList(), Collections.emptyList(), activityFontName, labelFontName, annotationFontName, customClassLoader, scaleFactor); } - + @Override public InputStream generatePngDiagram(BpmnModel bpmnModel) { return generatePngDiagram(bpmnModel, 1.0); } - + @Override public InputStream generatePngDiagram(BpmnModel bpmnModel, double scaleFactor) { return generateDiagram(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), scaleFactor); } - + @Override public InputStream generateJpgDiagram(BpmnModel bpmnModel) { return generateJpgDiagram(bpmnModel, 1.0); } - + @Override public InputStream generateJpgDiagram(BpmnModel bpmnModel, double scaleFactor) { return generateDiagram(bpmnModel, "jpg", Collections.emptyList(), Collections.emptyList()); } @@ -719,7 +719,7 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator return generateImage(bpmnModel, imageType, highLightedActivities, highLightedFlows, null, null, null, null, scaleFactor); } - + @Override public BufferedImage generatePngImage(BpmnModel bpmnModel, double scaleFactor) { return generateImage(bpmnModel, "png", Collections.emptyList(), Collections.emptyList(), scaleFactor); @@ -957,8 +957,8 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator if (graphicInfoList != null && graphicInfoList.size() > 0) { graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int xPoints[] = new int[graphicInfoList.size()]; - int yPoints[] = new int[graphicInfoList.size()]; + int[] xPoints = new int[graphicInfoList.size()]; + int[] yPoints = new int[graphicInfoList.size()]; for (int i = 1; i < graphicInfoList.size(); i++) { GraphicInfo graphicInfo = graphicInfoList.get(i); @@ -1039,9 +1039,9 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator } if (highLightedExecutedActivities.contains(flowNode.getId())) { - processDiagramCanvas.HIGHLIGHT_COLOR = Color.RED; + DefaultProcessDiagramCanvas.HIGHLIGHT_COLOR = Color.RED; drawColorHighLight(processDiagramCanvas, bpmnModel.getGraphicInfo(flowNode.getId()), Color.RED); - processDiagramCanvas.HIGHLIGHT_COLOR = Color.GREEN; + DefaultProcessDiagramCanvas.HIGHLIGHT_COLOR = Color.GREEN; } } @@ -1071,8 +1071,8 @@ public class DefaultProcessDiagramGenerator implements HMProcessDiagramGenerator if (graphicInfoList != null && graphicInfoList.size() > 0) { graphicInfoList = connectionPerfectionizer(processDiagramCanvas, bpmnModel, sourceElement, targetElement, graphicInfoList); - int xPoints[] = new int[graphicInfoList.size()]; - int yPoints[] = new int[graphicInfoList.size()]; + int[] xPoints = new int[graphicInfoList.size()]; + int[] yPoints = new int[graphicInfoList.size()]; for (int i = 1; i < graphicInfoList.size(); i++) { GraphicInfo graphicInfo = graphicInfoList.get(i); diff --git a/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java b/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java index 41a39a2..0314ac1 100644 --- a/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java +++ b/len-activiti/src/main/java/org/activiti/rest/diagram/services/BaseProcessDefinitionDiagramLayoutResource.java @@ -117,8 +117,9 @@ public class BaseProcessDefinitionDiagramLayoutResource { activityArray.add(activityName); } - for (String flow : highLightedFlows) + for (String flow : highLightedFlows) { flowsArray.add(flow); + } responseJSON.set("highLightedActivities", activityArray); responseJSON.set("highLightedFlows", flowsArray); @@ -185,8 +186,9 @@ public class BaseProcessDefinitionDiagramLayoutResource { laneSetArray.add(laneSetJSON); } - if (laneSetArray.size() > 0) + if (laneSetArray.size() > 0) { responseJSON.set("laneSets", laneSetArray); + } } ArrayNode sequenceFlowArray = new ObjectMapper().createArrayNode(); @@ -289,12 +291,15 @@ public class BaseProcessDefinitionDiagramLayoutResource { flowJSON.put("flow", "(" + sequenceFlow.getSource().getId() + ")--" + sequenceFlow.getId() + "-->(" + sequenceFlow.getDestination().getId() + ")"); - if (isConditional) + if (isConditional) { flowJSON.put("isConditional", isConditional); - if (isDefault) + } + if (isDefault) { flowJSON.put("isDefault", isDefault); - if (isHighLighted) + } + if (isHighLighted) { flowJSON.put("isHighLighted", isHighLighted); + } flowJSON.set("xPointArray", xPointArray); flowJSON.set("yPointArray", yPointArray); @@ -312,13 +317,13 @@ public class BaseProcessDefinitionDiagramLayoutResource { ObjectNode propertiesJSON = new ObjectMapper().createObjectNode(); for (String key : properties.keySet()) { Object prop = properties.get(key); - if (prop instanceof String) - propertiesJSON.put(key, (String)properties.get(key)); - else if (prop instanceof Integer) - propertiesJSON.put(key, (Integer)properties.get(key)); - else if (prop instanceof Boolean) - propertiesJSON.put(key, (Boolean)properties.get(key)); - else if ("initial".equals(key)) { + if (prop instanceof String) { + propertiesJSON.put(key, (String) properties.get(key)); + } else if (prop instanceof Integer) { + propertiesJSON.put(key, (Integer) properties.get(key)); + }else if (prop instanceof Boolean) { + propertiesJSON.put(key, (Boolean) properties.get(key)); + }else if ("initial".equals(key)) { ActivityImpl act = (ActivityImpl)properties.get(key); propertiesJSON.put(key, act.getId()); } else if ("timerDeclarations".equals(key)) { @@ -326,14 +331,14 @@ public class BaseProcessDefinitionDiagramLayoutResource { (ArrayList)properties.get(key); ArrayNode timerDeclarationArray = new ObjectMapper().createArrayNode(); - if (timerDeclarations != null) + if (timerDeclarations != null) { for (TimerDeclarationImpl timerDeclaration : timerDeclarations) { ObjectNode timerDeclarationJSON = new ObjectMapper().createObjectNode(); timerDeclarationJSON.put("isExclusive", timerDeclaration.isExclusive()); - if (timerDeclaration.getRepeat() != null) + if (timerDeclaration.getRepeat() != null) { timerDeclarationJSON.put("repeat", timerDeclaration.getRepeat()); - + } timerDeclarationJSON.put("retries", String.valueOf(timerDeclaration.getRetries())); timerDeclarationJSON.put("type", timerDeclaration.getJobHandlerType()); timerDeclarationJSON.put("configuration", timerDeclaration.getJobHandlerConfiguration()); @@ -341,8 +346,10 @@ public class BaseProcessDefinitionDiagramLayoutResource { timerDeclarationArray.add(timerDeclarationJSON); } - if (timerDeclarationArray.size() > 0) + } + if (timerDeclarationArray.size() > 0) { propertiesJSON.set(key, timerDeclarationArray); + } // TODO: implement getting description } else if ("eventDefinitions".equals(key)) { ArrayList eventDefinitions = @@ -353,8 +360,9 @@ public class BaseProcessDefinitionDiagramLayoutResource { for (EventSubscriptionDeclaration eventDefinition : eventDefinitions) { ObjectNode eventDefinitionJSON = new ObjectMapper().createObjectNode(); - if (eventDefinition.getActivityId() != null) + if (eventDefinition.getActivityId() != null) { eventDefinitionJSON.put("activityId", eventDefinition.getActivityId()); + } eventDefinitionJSON.put("eventName", eventDefinition.getEventName()); eventDefinitionJSON.put("eventType", eventDefinition.getEventType()); @@ -364,8 +372,9 @@ public class BaseProcessDefinitionDiagramLayoutResource { } } - if (eventDefinitionsArray.size() > 0) + if (eventDefinitionsArray.size() > 0) { propertiesJSON.set(key, eventDefinitionsArray); + } // TODO: implement it } else if ("errorEventDefinitions".equals(key)) { @@ -377,19 +386,20 @@ public class BaseProcessDefinitionDiagramLayoutResource { for (ErrorEventDefinition errorEventDefinition : errorEventDefinitions) { ObjectNode errorEventDefinitionJSON = new ObjectMapper().createObjectNode(); - if (errorEventDefinition.getErrorCode() != null) + if (errorEventDefinition.getErrorCode() != null) { errorEventDefinitionJSON.put("errorCode", errorEventDefinition.getErrorCode()); - else + }else { errorEventDefinitionJSON.putNull("errorCode"); - + } errorEventDefinitionJSON.put("handlerActivityId", errorEventDefinition.getHandlerActivityId()); errorEventDefinitionsArray.add(errorEventDefinitionJSON); } } - if (errorEventDefinitionsArray.size() > 0) + if (errorEventDefinitionsArray.size() > 0) { propertiesJSON.set(key, errorEventDefinitionsArray); + } } } @@ -445,14 +455,18 @@ public class BaseProcessDefinitionDiagramLayoutResource { activityJSON.put("activityId", activity.getId()); activityJSON.set("properties", propertiesJSON); - if (multiInstance != null) + if (multiInstance != null) { activityJSON.put("multiInstance", multiInstance); - if (collapsed) + } + if (collapsed) { activityJSON.put("collapsed", collapsed); - if (nestedActivityArray.size() > 0) + } + if (nestedActivityArray.size() > 0) { activityJSON.set("nestedActivities", nestedActivityArray); - if (isInterrupting != null) + } + if (isInterrupting != null) { activityJSON.put("isInterrupting", isInterrupting); + } activityJSON.put("x", activity.getX()); activityJSON.put("y", activity.getY()); diff --git a/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java b/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java index 5d673f0..5ed2714 100644 --- a/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java +++ b/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java @@ -1,5 +1,7 @@ package com.len.service.impl; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -27,7 +29,7 @@ import com.len.util.LenResponse; @Service public class BlogArticleServiceImpl extends BaseServiceImpl implements BlogArticleService { - + private Random rand = SecureRandom.getInstanceStrong(); private static final Pattern IMG = Pattern.compile("<(img)(.*?)(/>|>|>)"); private static final Pattern SRC = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)"); @Autowired @@ -41,6 +43,9 @@ public class BlogArticleServiceImpl extends BaseServiceImpl blogArticleQueryWrapper = new QueryWrapper<>(); @@ -167,10 +172,10 @@ public class BlogArticleServiceImpl extends BaseServiceImpl 255) + if (fc > 255) { fc = 255; - if (bc > 255) + } + if (bc > 255) { bc = 255; + } int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); @@ -270,15 +270,6 @@ public class VerifyCodeUtils { } - public static void main(String[] args) throws IOException { - File dir = new File("F:/verifies"); - int w = 200, h = 80; - for (int i = 0; i < 50; i++) { - String verifyCode = generateVerifyCode(4); - File file = new File(dir, verifyCode + ".jpg"); - outputImage(w, h, file, verifyCode); - } - } /** * 验证码对象 diff --git a/len-sys/src/main/java/com/len/core/filter/VerifyCodeUtils.java b/len-sys/src/main/java/com/len/core/filter/VerifyCodeUtils.java index ef5ad64..8017c67 100644 --- a/len-sys/src/main/java/com/len/core/filter/VerifyCodeUtils.java +++ b/len-sys/src/main/java/com/len/core/filter/VerifyCodeUtils.java @@ -134,7 +134,6 @@ public class VerifyCodeUtils { public static void outputImage(int w, int h, OutputStream os, String code) throws IOException { int verifySize = code.length(); BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); - Random rand = new Random(); Graphics2D g2 = image.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Color[] colors = new Color[5]; @@ -142,8 +141,8 @@ public class VerifyCodeUtils { Color.ORANGE, Color.PINK, Color.YELLOW}; float[] fractions = new float[colors.length]; for (int i = 0; i < colors.length; i++) { - colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; - fractions[i] = rand.nextFloat(); + colors[i] = colorSpaces[random.nextInt(colorSpaces.length)]; + fractions[i] = random.nextFloat(); } Arrays.sort(fractions); @@ -155,7 +154,6 @@ public class VerifyCodeUtils { g2.fillRect(0, 2, w, h - 4); // 绘制干扰线 - Random random = new Random(); g2.setColor(getRandColor(160, 200));// 设置线条的颜色 for (int i = 0; i < 20; i++) { int x = random.nextInt(w - 1); @@ -184,7 +182,7 @@ public class VerifyCodeUtils { char[] chars = code.toCharArray(); for (int i = 0; i < verifySize; i++) { AffineTransform affine = new AffineTransform(); - affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), + affine.setToRotation(Math.PI / 4 * random.nextDouble() * (random.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize / 2, h / 2); g2.setTransform(affine); g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); @@ -195,10 +193,12 @@ public class VerifyCodeUtils { } private static Color getRandColor(int fc, int bc) { - if (fc > 255) + if (fc > 255) { fc = 255; - if (bc > 255) + } + if (bc > 255) { bc = 255; + } int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); @@ -270,15 +270,6 @@ public class VerifyCodeUtils { } - public static void main(String[] args) throws IOException { - File dir = new File("F:/verifies"); - int w = 200, h = 80; - for (int i = 0; i < 50; i++) { - String verifyCode = generateVerifyCode(4); - File file = new File(dir, verifyCode + ".jpg"); - outputImage(w, h, file, verifyCode); - } - } /** * 验证码对象 diff --git a/len-sys/src/main/java/com/len/core/listener/LenospInit.java b/len-sys/src/main/java/com/len/core/listener/LenospInit.java index 9476b47..9cd25c2 100644 --- a/len-sys/src/main/java/com/len/core/listener/LenospInit.java +++ b/len-sys/src/main/java/com/len/core/listener/LenospInit.java @@ -12,7 +12,7 @@ import com.len.core.init.job.JobExecuteImpl; */ @Component public class LenospInit implements ApplicationListener { - + @Override public void onApplicationEvent(ContextRefreshedEvent event) { init(event); } diff --git a/len-sys/src/main/java/com/len/core/quartz/CustomQuartz/DataSchdule.java b/len-sys/src/main/java/com/len/core/quartz/CustomQuartz/DataSchdule.java index 28f3f29..735466f 100644 --- a/len-sys/src/main/java/com/len/core/quartz/CustomQuartz/DataSchdule.java +++ b/len-sys/src/main/java/com/len/core/quartz/CustomQuartz/DataSchdule.java @@ -21,14 +21,16 @@ public class DataSchdule { @Log(type = Log.LOG_TYPE.UPDATE, desc = "定时还原数据库") public static void restData() throws IOException, InterruptedException { // SQL文件路径 - try { + String sqlPath = "G:\\os\\sql\\lenos_test.sql"; + try( + BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sqlPath), "utf-8")); + ) { Runtime rt = Runtime.getRuntime(); - String sqlPath = "G:\\os\\sql\\lenos_test.sql"; + Process process = rt.exec( "D:\\java\\mysql-5.7.21-winx64\\mysql-5.7.21-winx64\\bin\\mysql.exe -hlocalhost -uroot -ppassword --default-character-set=utf8 " + "lenos_test"); OutputStream outputStream = process.getOutputStream(); - BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sqlPath), "utf-8")); String str = null; StringBuffer sb = new StringBuffer(); while ((str = br.readLine()) != null) { diff --git a/len-web/src/main/java/test/ActivitiDemo.java b/len-web/src/main/java/test/ActivitiDemo.java index 6e84915..f444f35 100644 --- a/len-web/src/main/java/test/ActivitiDemo.java +++ b/len-web/src/main/java/test/ActivitiDemo.java @@ -306,16 +306,15 @@ public class ActivitiDemo { @Test public void imageById() throws Exception { InputStream inputStream = repositoryService.getResourceAsStream("12501", "bpmn/leave.png"); - FileOutputStream outputStream = new FileOutputStream("F:/a.png"); - byte[] b = new byte[1024]; - int red = inputStream.read(b); - while (red != -1) { - outputStream.write(b, 0, red); - red = inputStream.read(b); - } - outputStream.write(b); - inputStream.close(); - outputStream.close(); + try(FileOutputStream outputStream = new FileOutputStream("F:/a.png");) { + byte[] b = new byte[1024]; + int red = inputStream.read(b); + while (red != -1) { + outputStream.write(b, 0, red); + red = inputStream.read(b); + } + outputStream.write(b); + } } @Test @@ -341,9 +340,10 @@ public class ActivitiDemo { processEngine.getProcessEngineConfiguration().getLabelFontName(), "宋体", null, 1.0); byte[] b = new byte[1024]; int len; - FileOutputStream outputStream = new FileOutputStream("F:/1.png"); - while ((len = imageStream.read(b, 0, 1024)) != -1) { - outputStream.write(b, 0, len); + try(FileOutputStream outputStream = new FileOutputStream("F:/1.png");) { + while ((len = imageStream.read(b, 0, 1024)) != -1) { + outputStream.write(b, 0, len); + } } } diff --git a/len-web/src/main/java/test/ActivitiGateWay.java b/len-web/src/main/java/test/ActivitiGateWay.java index 4c4d084..a8eb95e 100644 --- a/len-web/src/main/java/test/ActivitiGateWay.java +++ b/len-web/src/main/java/test/ActivitiGateWay.java @@ -160,17 +160,19 @@ public class ActivitiGateWay { */ @Test public void imageById() throws Exception { + try( InputStream inputStream = repositoryService.getResourceAsStream("12501", "bpmn/leave2.png"); FileOutputStream outputStream = new FileOutputStream("F:/a.png"); - byte[] b = new byte[1024]; - int red = inputStream.read(b); - while (red != -1) { - outputStream.write(b, 0, red); - red = inputStream.read(b); + ) { + byte[] b = new byte[1024]; + int red = inputStream.read(b); + while (red != -1) { + outputStream.write(b, 0, red); + red = inputStream.read(b); + } + outputStream.write(b); + } - outputStream.write(b); - inputStream.close(); - outputStream.close(); } } -- Gitee From 1a8426edd083c42b7975e0290d9d1baeb860f4d8 Mon Sep 17 00:00:00 2001 From: Frank7Zeng Date: Thu, 20 Apr 2023 11:25:29 +0000 Subject: [PATCH 4/9] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20pom.xml=20=E4=B8=ADcom?= =?UTF-8?q?mons-fileupload=E4=BE=9D=E8=B5=96=E7=9A=84=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E4=BF=AE=E5=A4=8DRCE=E6=BC=8F=E6=B4=9E=20Apa?= =?UTF-8?q?che=20Commons=20FileUpload=20before=201.3.3=20DiskFileItem=20Fi?= =?UTF-8?q?le=20Manipulation=20Remote=20Code=20Execution.=20=E6=BC=8F?= =?UTF-8?q?=E6=B4=9E=E7=BC=96=E5=8F=B7=EF=BC=9ACVE-2016-1000031?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Frank7Zeng --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5855161..1f0f86c 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 2.5 3.7 - 1.3.2 + 1.3.3 4.12 1.5.0-b01 -- Gitee From 93395f99e70b68a8fa230b704e713c30fff09c36 Mon Sep 17 00:00:00 2001 From: Future-StarFire <1622997479@qq.com> Date: Tue, 25 Apr 2023 23:33:50 +0800 Subject: [PATCH 5/9] =?UTF-8?q?1.log=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=EF=BC=8C=E6=B6=88=E9=99=A4=E8=AD=A6=E5=91=8A=E3=80=82=202.?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E7=B1=BB=E5=8E=BB=E6=8E=89ComponentScan?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=EF=BC=8C=E6=B6=88=E9=99=A4=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E3=80=82=203.=E8=A7=A3=E5=86=B3log4j:WARN=20No=20appenders=20c?= =?UTF-8?q?ould=20be=20found=20for=20logger=20(freemarker.cache).=E8=AD=A6?= =?UTF-8?q?=E5=91=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/len/core/annotation/Log.java | 8 ++- .../com/len/core/annotation/LogAspect.java | 55 +++++++++++-------- .../src/main/java/com/len/LenApplication.java | 12 ++-- len-web/src/main/resources/log4j.properties | 4 +- 4 files changed, 45 insertions(+), 34 deletions(-) diff --git a/len-sys/src/main/java/com/len/core/annotation/Log.java b/len-sys/src/main/java/com/len/core/annotation/Log.java index e1fb2e2..6679e5b 100644 --- a/len-sys/src/main/java/com/len/core/annotation/Log.java +++ b/len-sys/src/main/java/com/len/core/annotation/Log.java @@ -4,6 +4,7 @@ import java.lang.annotation.*; /** * 记录日志 + * @author star */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) @@ -15,14 +16,15 @@ public @interface Log { */ String desc(); - ; - /** * 类型 curd */ LOG_TYPE type() default LOG_TYPE.ATHOR; - public enum LOG_TYPE { + enum LOG_TYPE { + /** + * 日志操作类型 + */ ADD, UPDATE, DEL, SELECT, ATHOR } } diff --git a/len-sys/src/main/java/com/len/core/annotation/LogAspect.java b/len-sys/src/main/java/com/len/core/annotation/LogAspect.java index a7fc824..11c6586 100644 --- a/len-sys/src/main/java/com/len/core/annotation/LogAspect.java +++ b/len-sys/src/main/java/com/len/core/annotation/LogAspect.java @@ -2,6 +2,7 @@ package com.len.core.annotation; import java.lang.reflect.Method; import java.util.Date; +import java.util.concurrent.TimeUnit; import javax.servlet.http.HttpServletRequest; @@ -12,7 +13,8 @@ import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; -import org.springframework.beans.factory.annotation.Autowired; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.ui.Model; import org.springframework.web.context.request.RequestAttributes; @@ -29,41 +31,45 @@ import com.len.util.IpUtil; /** * * 为增删改添加监控 + * + * @author star */ @Aspect @Component public class LogAspect { - @Autowired - private SysLogMapper logMapper; + private static final Logger log = LoggerFactory.getLogger(LogAspect.class); - @Pointcut("@annotation(com.len.core.annotation.Log)") - private void pointcut() { + private final SysLogMapper logMapper; + public LogAspect(SysLogMapper logMapper) { + this.logMapper = logMapper; } + @Pointcut("@annotation(com.len.core.annotation.Log)") + private void pointcut() { /* 织入点无需方法体 */ } + @After("pointcut()") - public void insertLogSuccess(JoinPoint jp) { + public void insertLogSuccess(JoinPoint jp) throws InterruptedException { addLog(jp, getDesc(jp)); } - private void addLog(JoinPoint jp, String text) { + private void addLog(JoinPoint jp, String text) throws InterruptedException { Log.LOG_TYPE type = getType(jp); - SysLog log = new SysLog(); + SysLog sysLog = new SysLog(); RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); // 一些系统监控 if (requestAttributes != null) { - HttpServletRequest request = - ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); + HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest(); String ip = IpUtil.getIp(request); - log.setIp(ip); + sysLog.setIp(ip); } - log.setCreateTime(new Date()); - log.setType(type.toString()); - log.setText(text); + sysLog.setCreateTime(new Date()); + sysLog.setType(type.toString()); + sysLog.setText(text); Object[] obj = jp.getArgs(); - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); if (obj != null) { for (int i = 0; i < obj.length; i++) { buffer.append("[参数").append(i + 1).append(":"); @@ -71,36 +77,37 @@ public class LogAspect { if (o instanceof Model) { continue; } - String parameter; + String parameter = null; try { parameter = JSON.toJSONString(o); } catch (Exception e) { - continue; + TimeUnit.MILLISECONDS.sleep(0); } buffer.append(parameter); buffer.append("]"); } } - log.setParam(buffer.toString()); + sysLog.setParam(buffer.toString()); try { CurrentUser currentUser = Principal.getCurrentUse(); if (currentUser != null) { - log.setUserName(currentUser.getUsername()); + sysLog.setUserName(currentUser.getUsername()); } } catch (UnavailableSecurityManagerException e) { + log.error(e.getMessage()); } - logMapper.insert(log); + logMapper.insert(sysLog); } /** * 记录异常 * - * @param joinPoint - * @param e + * @param joinPoint 连接点对象 + * @param e 异常对象 */ @AfterThrowing(value = "pointcut()", throwing = "e") - public void afterException(JoinPoint joinPoint, Exception e) { - System.out.print("-----------afterException:" + e.getMessage()); + public void afterException(JoinPoint joinPoint, Exception e) throws InterruptedException { + log.error("-----------afterException:{}", e.getMessage()); addLog(joinPoint, getDesc(joinPoint) + e.getMessage()); } diff --git a/len-web/src/main/java/com/len/LenApplication.java b/len-web/src/main/java/com/len/LenApplication.java index c21eb2c..46568d9 100644 --- a/len-web/src/main/java/com/len/LenApplication.java +++ b/len-web/src/main/java/com/len/LenApplication.java @@ -4,21 +4,21 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.context.annotation.ComponentScan; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.config.annotation.EnableWebMvc; /** * 项目启动类 + * + * @author lenosp https://gitee.com/zzdevelop/lenosp */ - @EnableWebMvc @EnableTransactionManagement -@ComponentScan({"com.len", "org.activiti"}) @MapperScan(basePackages = {"com.len.mapper"}) -@SpringBootApplication(exclude = {RedisAutoConfiguration.class, - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, - org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class}) +@SpringBootApplication(scanBasePackages = {"com.len", "org.activiti"}, + exclude = {RedisAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, + org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class}) public class LenApplication { public static void main(String[] args) { diff --git a/len-web/src/main/resources/log4j.properties b/len-web/src/main/resources/log4j.properties index 23a8c45..ca1fd7a 100644 --- a/len-web/src/main/resources/log4j.properties +++ b/len-web/src/main/resources/log4j.properties @@ -1,2 +1,4 @@ log4j.rootLogger=debug -log4j.appender.appenderNam=org.apache.log4j.DailyRollingFileAppender \ No newline at end of file +log4j.logger.freemarker.cache=ERROR +log4j.logger.freemarker.beans=ERROR +log4j.appender.appenderNam=org.apache.log4j.DailyRollingFileAppender -- Gitee From bacdab20e6c6788532cac658426e78934f30453c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E6=9E=9A=E7=A0=81=E5=86=9C?= <154040976@qq.com> Date: Fri, 5 May 2023 02:40:29 +0000 Subject: [PATCH 6/9] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 一枚码农 <154040976@qq.com> --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8e6693b..151096b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +# 重要重要通知:强烈欢迎你的参与和贡献,保姆式引导你参与lenosp项目开源,联系组织管理,感兴趣的话非常欢迎你的加入,技术无所谓。真真的!!

👉 http://42.192.219.164👈|admin|123456

-- Gitee From b719cce1273e3c1013b868b0180c21664f59bb5c Mon Sep 17 00:00:00 2001 From: zhongmengfei_ext Date: Fri, 5 May 2023 14:36:28 +0800 Subject: [PATCH 7/9] =?UTF-8?q?len-common=201=E3=80=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AD=97=E5=85=B8=E5=B7=A5=E5=85=B7=EF=BC=8C?= =?UTF-8?q?=E5=BC=80=E7=AE=B1=E5=8D=B3=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- len-common/pom.xml | 5 + .../java/com/len/util/GenerateDocument.java | 103 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 len-common/src/main/java/com/len/util/GenerateDocument.java diff --git a/len-common/pom.xml b/len-common/pom.xml index e80f0c4..5e184d5 100644 --- a/len-common/pom.xml +++ b/len-common/pom.xml @@ -26,6 +26,11 @@ ${junit.version} test + + cn.smallbun.screw + screw-core + 1.0.5 + diff --git a/len-common/src/main/java/com/len/util/GenerateDocument.java b/len-common/src/main/java/com/len/util/GenerateDocument.java new file mode 100644 index 0000000..5ed04b2 --- /dev/null +++ b/len-common/src/main/java/com/len/util/GenerateDocument.java @@ -0,0 +1,103 @@ +package com.len.util; + +import cn.smallbun.screw.core.Configuration; +import cn.smallbun.screw.core.engine.EngineConfig; +import cn.smallbun.screw.core.engine.EngineFileType; +import cn.smallbun.screw.core.engine.EngineTemplateType; +import cn.smallbun.screw.core.execute.DocumentationExecute; +import cn.smallbun.screw.core.process.ProcessConfig; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; + +import javax.sql.DataSource; +import java.util.ArrayList; + +/** + * @Title: GenerateDocument + * @Author zhongmengfei + * @Package com + * @Date 2023/4/24 10:32 + * @description: 生成数据字典 + */ +public class GenerateDocument { + public static void main(String[] args) { + String fileOutputDir = "D:/"; + documentGeneration(fileOutputDir); + } + + /** + * 文档生成 + * + * @param fileOutputDir 生成文件路径 + * @methodName: documentGeneration + * @return: void + * @author: ybw + * @date: 2023/2/9 + **/ + static void documentGeneration(String fileOutputDir) { + //数据源 + HikariConfig hikariConfig = new HikariConfig(); + hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver"); + hikariConfig.setJdbcUrl("jdbc:mysql://ipxxxx:3306/nsshabi"); + hikariConfig.setUsername("root"); + hikariConfig.setPassword("xxxx密码@"); + //设置可以获取tables remarks信息 + hikariConfig.addDataSourceProperty("useInformationSchema", "true"); + hikariConfig.setMinimumIdle(2); + hikariConfig.setMaximumPoolSize(5); + DataSource dataSource = new HikariDataSource(hikariConfig); + //生成配置 + EngineConfig engineConfig = EngineConfig.builder() + //生成文件路径 + .fileOutputDir(fileOutputDir) + //打开目录 + .openOutputDir(true) + //文件类型 + .fileType(EngineFileType.WORD) + //生成模板实现 + .produceType(EngineTemplateType.freemarker) + //自定义文件名称 + .fileName("测试库").build(); + + //忽略表 + ArrayList ignoreTableName = new ArrayList<>(); + ignoreTableName.add("test_user"); + ignoreTableName.add("test_group"); + //忽略表前缀 + ArrayList ignorePrefix = new ArrayList<>(); + ignorePrefix.add("test_"); + //忽略表后缀 + ArrayList ignoreSuffix = new ArrayList<>(); + ignoreSuffix.add("_test"); + ProcessConfig processConfig = ProcessConfig.builder() + //指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置 + //根据名称指定表生成 + .designatedTableName(new ArrayList<>()) + //根据表前缀生成 + .designatedTablePrefix(new ArrayList<>()) + //根据表后缀生成 + .designatedTableSuffix(new ArrayList<>()) + //忽略表名 + .ignoreTableName(ignoreTableName) + //忽略表前缀 + .ignoreTablePrefix(ignorePrefix) + //忽略表后缀 + .ignoreTableSuffix(ignoreSuffix).build(); + //配置 + Configuration config = Configuration.builder() + //版本 + .version("1.0.0") + //描述 + .description("数据库设计文档生成") + //数据源 + .dataSource(dataSource) + //生成配置 + .engineConfig(engineConfig) + //生成配置 + .produceConfig(processConfig) + .build(); + //执行生成 + new DocumentationExecute(config).execute(); + } + +} -- Gitee From 55ab45a2b6a83f326bb9b3e05fec0232ac6a76a5 Mon Sep 17 00:00:00 2001 From: Future-StarFire <1622997479@qq.com> Date: Sun, 7 May 2023 12:05:22 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=AF=E5=8A=A8bug?= =?UTF-8?q?=E3=80=82https://gitee.com/zzdevelop/lenosp/issues/I70XK6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- len-web/src/main/java/com/len/LenApplication.java | 4 ++-- len-web/src/main/java/com/len/config/LogConfig.java | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/len-web/src/main/java/com/len/LenApplication.java b/len-web/src/main/java/com/len/LenApplication.java index 46568d9..efd87ca 100644 --- a/len-web/src/main/java/com/len/LenApplication.java +++ b/len-web/src/main/java/com/len/LenApplication.java @@ -9,8 +9,8 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; /** * 项目启动类 - * - * @author lenosp https://gitee.com/zzdevelop/lenosp + * + * @author lenosp */ @EnableWebMvc @EnableTransactionManagement diff --git a/len-web/src/main/java/com/len/config/LogConfig.java b/len-web/src/main/java/com/len/config/LogConfig.java index 957606e..d1e969e 100644 --- a/len-web/src/main/java/com/len/config/LogConfig.java +++ b/len-web/src/main/java/com/len/config/LogConfig.java @@ -1,5 +1,6 @@ package com.len.config; +import com.len.mapper.SysLogMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -7,13 +8,13 @@ import com.len.core.annotation.LogAspect; /** * 日志拦截配置 + * @author lenosp */ @Configuration public class LogConfig { @Bean(name = "logAspect") - public LogAspect getLogAspect() { - return new LogAspect(); + public LogAspect getLogAspect(SysLogMapper logMapper) { + return new LogAspect(logMapper); } - } -- Gitee From e52becbd2c0a73a27d942526421e8e33fd7b55ce Mon Sep 17 00:00:00 2001 From: Future-StarFire <1622997479@qq.com> Date: Sat, 13 May 2023 18:56:27 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0userLeaveController?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=EF=BC=9B=20=E4=BF=AE=E5=A4=8Dservices?= =?UTF-8?q?=E7=9A=84translational=E7=9A=84=E8=AD=A6=E5=91=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- len-activiti/pom.xml | 7 +- .../len/controller/UserLeaveController.java | 370 +++++++++++++----- .../java/com/len/util/CastClassUtils.java | 51 +++ .../service/impl/BlogArticleServiceImpl.java | 4 +- 4 files changed, 335 insertions(+), 97 deletions(-) create mode 100644 len-activiti/src/main/java/com/len/util/CastClassUtils.java diff --git a/len-activiti/pom.xml b/len-activiti/pom.xml index 51ae321..0a8c8f4 100644 --- a/len-activiti/pom.xml +++ b/len-activiti/pom.xml @@ -12,7 +12,6 @@ len-activiti https://gitee.com/zzdevelop/lenosp - UTF-8 @@ -55,6 +54,12 @@ junit ${junit.version} + + org.jetbrains + annotations + RELEASE + compile + diff --git a/len-activiti/src/main/java/com/len/controller/UserLeaveController.java b/len-activiti/src/main/java/com/len/controller/UserLeaveController.java index cde019d..8cefedf 100644 --- a/len-activiti/src/main/java/com/len/controller/UserLeaveController.java +++ b/len-activiti/src/main/java/com/len/controller/UserLeaveController.java @@ -20,7 +20,7 @@ import java.util.*; import java.util.List; import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletRequest; +import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletResponse; import org.activiti.bpmn.model.BpmnModel; @@ -39,9 +39,9 @@ import org.activiti.engine.task.Task; import org.activiti.image.HMProcessDiagramGenerator; import org.activiti.spring.ProcessEngineFactoryBean; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import com.alibaba.fastjson.JSON; @@ -62,70 +62,108 @@ import com.len.service.RoleUserService; import com.len.service.UserLeaveService; import com.len.util.*; -import sun.misc.BASE64Encoder; - /** + * 请假流程 控制器 + * * @author zhuxiaomeng * @date 2018/1/21. * @email lenospmiller@gmail.com *

* 请假流程示例 + *

*/ @Controller @RequestMapping("/leave") public class UserLeaveController extends BaseController { - @Autowired - UserLeaveService leaveService; - - @Autowired - RuntimeService runtimeService; + /** + * 请假服务层 + */ + private final UserLeaveService leaveService; - @Autowired - TaskService taskService; + /** + * activiti的运行时服务注入,用于查询实例等操作 + */ + private final RuntimeService runtimeService; - @Autowired - IdentityService identityService; + /** + * activiti的任务服务注入,用于查询任务相关变量 + */ + private final TaskService taskService; - @Autowired - RepositoryService repositoryService; + /** + * activiti的仓库服务注入,用于获取流程详细定义 + */ + private final RepositoryService repositoryService; - @Autowired - ProcessEngineFactoryBean processEngine; + /** + * activiti的流程引擎服务注入,用于获取引擎配置 + */ + private final ProcessEngineFactoryBean processEngine; - @Autowired - ProcessEngineConfiguration processEngineConfiguration; + /** + * 用户与角色服务层,获取当前用户的角色列表 + */ + private final RoleUserService roleUserService; - @Autowired - RoleUserService roleUserService; - @Autowired - HistoryService historyService; - private String leaveOpinionList = "leaveOpinionList"; + /** + * activiti的历史流程/任务服务注入,用于查询历史数据变量等信息 + */ + private final HistoryService historyService; - @GetMapping(value = "showMain") - public String showMain(Model model) { - return "/dashboard/dashboard"; - } + /** + * 请假列表 变量名 + */ + private static final String LEAVE_OPINION_LIST = "leaveOpinionList"; - @GetMapping(value = "showMain2") - public String showMain2(Model model) { - return "/dashboard/dashboard2"; + /** + * 任务基础 变量名 + */ + private static final String BASE_TASK = "baseTask"; + + public UserLeaveController(UserLeaveService leaveService, RuntimeService runtimeService, TaskService taskService, + RepositoryService repositoryService, ProcessEngineFactoryBean processEngine, RoleUserService roleUserService, + HistoryService historyService) { + this.leaveService = leaveService; + this.runtimeService = runtimeService; + this.taskService = taskService; + this.repositoryService = repositoryService; + this.processEngine = processEngine; + this.roleUserService = roleUserService; + this.historyService = historyService; } + /** + * 请假流程主页面 + * + * @return 视图地址 + */ @GetMapping(value = "showLeave") - public String showUser(Model model) { + public String showUser() { return "/act/leave/leaveList"; } + /** + * 分页查询请假列表数据 + * + * @param userLeave 查询条件包装 + * @param page 页码 + * @param limit 条数 + * @return 响应结果(json) + */ @GetMapping(value = "showLeaveList") @ResponseBody public ReType showLeaveList(UserLeave userLeave, String page, String limit) { + // 获取当前用户id String userId = CommonUtil.getUser().getId(); userLeave.setUserId(userId); List tList = null; + // 分页 Page tPage = PageHelper.startPage(Integer.valueOf(page), Integer.valueOf(limit)); try { + // 查询请假列表 tList = leaveService.selectListByPage(userLeave); + // 回显任务名 for (UserLeave leave : tList) { ProcessInstance instance = runtimeService.createProcessInstanceQuery() .processInstanceId(leave.getProcessInstanceId()).singleResult(); @@ -145,71 +183,102 @@ public class UserLeaveController extends BaseController { /** * 根据 执行对象id获取审批信息 * - * @param model - * @param processId - * @return + * @param model 视图 + * @param processId 流程id + * @return 流程详情页 */ @GetMapping("leaveDetail") public String leaveDetail(Model model, String processId) { + // 根据流程id查询 ProcessInstance instance = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult(); - // 保证运行ing List leaveList = null; + // 保证运行ing if (instance != null) { + // 获取当前任务 Task task = this.taskService.createTaskQuery().processInstanceId(processId).singleResult(); Map variables = taskService.getVariables(task.getId()); - Object o = variables.get(leaveOpinionList); - if (o != null) { + Object o = variables.get(LEAVE_OPINION_LIST); + if (Objects.nonNull(o)) { /*获取历史审核信息*/ - leaveList = (List)o; + leaveList = CastClassUtils.castList(o, LeaveOpinion.class); } } else { + // 未运行,从历史详情信息中获取 leaveList = new ArrayList<>(); List list = historyService.createHistoricDetailQuery().processInstanceId(processId).list(); - HistoricVariableUpdate variable = null; + HistoricVariableUpdate variable; for (HistoricDetail historicDetail : list) { variable = (HistoricVariableUpdate)historicDetail; - if (leaveOpinionList.equals(variable.getVariableName())) { + if (LEAVE_OPINION_LIST.equals(variable.getVariableName())) { leaveList.clear(); - leaveList.addAll((List)variable.getValue()); + leaveList.addAll(CastClassUtils.castList(variable.getValue(), LeaveOpinion.class)); } } } + // 传参 model.addAttribute("leaveDetail", JSON.toJSONString(leaveList)); return "/act/leave/leaveDetail"; } + /** + * 去新增请假页面 + * + * @return 新增页面 + */ @GetMapping("addLeave") public String addLeave() { return "/act/leave/add-leave"; } + /** + * 去请假编辑页面 + * + * @param model 模型对象 + * @param taskId 任务ID + * @return 编辑页面 + */ @GetMapping("updateLeave/{taskId}") public String updateLeave(Model model, @PathVariable String taskId) { Map variables = taskService.getVariables(taskId); - BaseTask baseTask = (BaseTask)variables.get("baseTask"); + BaseTask baseTask = (BaseTask)variables.get(BASE_TASK); + // 根据任务id获取请假详情 UserLeave leave = leaveService.getById(baseTask.getId()); + // 传参 model.addAttribute("leave", leave); model.addAttribute("taskId", taskId); return "/act/leave/update-leave"; } + /** + * 编辑请假信息 + * + * @param leave 请假对象 + * @param taskId 任务id + * @param id 请假id + * @param flag true:重新提交请假 | false:取消请假 + * @return 响应操作结果 + */ @PostMapping("updateLeave/updateLeave/{taskId}/{id}/{flag}") @ResponseBody public LenResponse updateLeave(UserLeave leave, @PathVariable String taskId, @PathVariable String id, @PathVariable boolean flag) { LenResponse j = new LenResponse(); try { - UserLeave oldLeave = leaveService.getById(leave.getId()); + // 此处修改了id获取方式为路径中的id,实际传入的参数就是leave.getId() + UserLeave oldLeave = leaveService.getById(id); + // 赋值 BeanUtil.copyNotNullBean(leave, oldLeave); + // 更新Dao层 QueryWrapper userLeaveQueryWrapper = new QueryWrapper<>(oldLeave); leaveService.update(userLeaveQueryWrapper); - Map variables = taskService.getVariables(taskId); Map map = new HashMap<>(); + // 重新提交请假 if (flag) { map.put("flag", true); } else { + // 取消请假 map.put("flag", false); } taskService.complete(taskId, map); @@ -222,6 +291,12 @@ public class UserLeaveController extends BaseController { return j; } + /** + * 新建请假 + * + * @param userLeave 请假实体 + * @return 响应结果 + */ @PostMapping("addLeave") @ResponseBody public LenResponse addLeave(UserLeave userLeave) { @@ -232,6 +307,7 @@ public class UserLeaveController extends BaseController { long beginTime = userLeave.getBeginTime().getTime(); long endTime = userLeave.getEndTime().getTime(); int days = 1; + // 计算请假天数 if (endTime != beginTime) { days += (int)((endTime - beginTime) / (1000 * 60 * 60 * 24)); } @@ -240,23 +316,35 @@ public class UserLeaveController extends BaseController { } userLeave.setDays(days); + // 设置用户信息 CurrentUser user = CommonUtil.getUser(); userLeave.setUserId(user.getId()); userLeave.setUserName(user.getUsername()); + // 设置实例id userLeave.setProcessInstanceId("2018"); + // 保存Dao层 leaveService.save(userLeave); Map map = new HashMap<>(); userLeave.setUrlpath("/leave/readOnlyLeave/" + userLeave.getId()); - map.put("baseTask", userLeave); + map.put(BASE_TASK, userLeave); map.put("day", days); + // 启动请假流程实例,保存实例的id ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process_leave", map); userLeave.setProcessInstanceId(processInstance.getId()); userLeave.setUrlpath("/leave/readOnlyLeave/" + userLeave.getId()); + // 更新Dao leaveService.updateById(userLeave); j.setMsg("请假申请成功"); return j; } + /** + * 读取请假实例,回显到编辑页面 + * + * @param model 模型层 + * @param billId 实例id + * @return 请假编辑页面 + */ @GetMapping("readOnlyLeave/{billId}") public String readOnlyLeave(Model model, @PathVariable String billId) { UserLeave leave = leaveService.getById(billId); @@ -268,13 +356,21 @@ public class UserLeaveController extends BaseController { * ---------我的任务--------- */ @GetMapping(value = "showTask") - public String showTask(Model model) { + public String showTask() { return "/act/task/taskList"; } + /** + * 分页查询任务列表 + * + * @param page 页码 + * @param limit 条数 + * @return 查询结果 + */ @GetMapping(value = "showTaskList") @ResponseBody - public String showTaskList(Model model, com.len.entity.Task task, String page, String limit) { + public String showTaskList(String page, String limit) { + // 查询当前用户的角色 CurrentUser user = CommonUtil.getUser(); SysRoleUser sysRoleUser = new SysRoleUser(); sysRoleUser.setUserId(user.getId()); @@ -284,11 +380,15 @@ public class UserLeaveController extends BaseController { for (SysRoleUser sru : userRoles) { roleString.add(sru.getRoleId()); } + // 根据当前用户查询相关任务列表 List taskList = taskService.createTaskQuery().taskCandidateUser(user.getId()).list(); + // 查询当前用户负责的任务列表 List assigneeList = taskService.createTaskQuery().taskAssignee(user.getId()).list(); + // 根据当前用户角色查询任务列表 List candidateGroup = taskService.createTaskQuery().taskCandidateGroupIn(roleString).list(); taskList.addAll(assigneeList); taskList.addAll(candidateGroup); + // 手动分页 int count = taskList.size(); Integer index = (Integer.valueOf(page) - 1) * Integer.valueOf(limit); taskList = taskList.subList(index, taskList.size() > index + 10 ? index + 10 : taskList.size()); @@ -299,17 +399,21 @@ public class UserLeaveController extends BaseController { Map> mapMap = new HashMap<>(); Map objectMap; - Set taskSet = new HashSet(); + Set taskSet = new HashSet<>(); for (Task task1 : taskList) { objectMap = new HashMap<>(); String taskId = task1.getId(); + + // 跳过重复任务 if (taskSet.contains(taskId)) { continue; } + // 查询任务的详细信息 map = taskService.getVariables(taskId); - BaseTask userLeave = (BaseTask)map.get("baseTask"); + BaseTask userLeave = (BaseTask)map.get(BASE_TASK); + // 回显用户名,请假原因,详情url taskEntity = new com.len.entity.Task(task1); taskEntity.setUserName(userLeave.getUserName()); taskEntity.setReason(userLeave.getReason()); @@ -328,34 +432,54 @@ public class UserLeaveController extends BaseController { } else { objectMap.put("flag", false); } + // 添加{任务id,flag标记}的map mapMap.put(taskEntity.getId(), objectMap); + // 返回的任务列表 tasks.add(taskEntity); + // 跳过重复的任务 taskSet.add(taskId); } return ReType.jsonStrng(count, tasks, mapMap, "id"); } + /** + * 跳转任务审批页面 + * + * @param model 模型层 + * @param taskId 任务id + * @return 审批页面 + */ @GetMapping("agent/{id}") public String agent(Model model, @PathVariable("id") String taskId) { + // 根据id获取任务详细信息 Map variables = taskService.getVariables(taskId); - BaseTask baseTask = (BaseTask)variables.get("baseTask"); - // UserLeave userLeave = leaveService.selectByPrimaryKey(baseTask.getId()); + BaseTask baseTask = (BaseTask)variables.get(BASE_TASK); + // 设置请假详细的url,用在Iframe中 model.addAttribute("leaveUrl", baseTask.getUrlpath()); model.addAttribute("taskId", taskId); return "/act/task/task-agent-iframe"; } + /** + * 审批动作处理 + * + * @param op 审批信息 + * @return 响应结果 + */ @PostMapping("agent/complete") @ResponseBody - public LenResponse complete(LeaveOpinion op, HttpServletRequest request) { + public LenResponse complete(LeaveOpinion op) { + // 获取任务详细 Map variables = taskService.getVariables(op.getTaskId()); + // 获取当前用户,设置操作时间,用户id,用户名 CurrentUser user = Principal.getCurrentUse(); op.setCreateTime(new Date()); op.setOpId(user.getId()); op.setOpName(user.getRealName()); LenResponse j = new LenResponse(); Map map = new HashMap<>(); + // 是否通过审批 map.put("flag", op.isFlag()); // 判断节点是否已经拒绝过一次了 @@ -371,16 +495,18 @@ public class UserLeaveController extends BaseController { } // 审批信息叠加 List leaveList = new ArrayList<>(); - Object o = variables.get(leaveOpinionList); + Object o = variables.get(LEAVE_OPINION_LIST); if (o != null) { - leaveList = (List)o; + leaveList = CastClassUtils.castList(o, LeaveOpinion.class); } leaveList.add(op); - UserLeave userLeave = (UserLeave)variables.get("baseTask"); + // 封装审批数据 + UserLeave userLeave = (UserLeave)variables.get(BASE_TASK); map.put("day", userLeave.getDays()); - map.put(leaveOpinionList, leaveList); + map.put(LEAVE_OPINION_LIST, leaveList); j.setMsg( "审核成功" + (op.isFlag() ? "[通过]" : "[未通过]")); + // 完成任务,设置审批信息与请假天数 taskService.complete(op.getTaskId(), map); return j; } @@ -388,36 +514,48 @@ public class UserLeaveController extends BaseController { /** * 追踪图片成图 增加历史流程 * - * @param request - * @param resp - * @param processInstanceId - * @throws IOException + * @param resp 响应对象 + * @param processInstanceId 实例id + * @throws IOException 可能发生文件IO异常 */ @GetMapping("getProcImage") - public void getProcImage(HttpServletRequest request, HttpServletResponse resp, String processInstanceId) - throws IOException { - InputStream imageStream = generateStream(request, resp, processInstanceId, true); + public void getProcImage(HttpServletResponse resp, String processInstanceId) throws IOException { + // 需要处于活动状态节点信息 + InputStream imageStream = generateStream(processInstanceId, true); + // 生成失败 if (imageStream == null) { return; } - InputStream imageNoCurrentStream = generateStream(request, resp, processInstanceId, false); + // 不带当前活动节点高亮出图 + InputStream imageNoCurrentStream = generateStream(processInstanceId, false); if (imageNoCurrentStream == null) { return; } + // 生成gif AnimatedGifEncoder e = new AnimatedGifEncoder(); + // 设置背景颜色 e.setTransparent(Color.BLACK); + // 设置帧播放次数 0为无限循环播放 e.setRepeat(0); + // 设置颜色质量 e.setQuality(19); + // 设置输出流 e.start(resp.getOutputStream()); - BufferedImage current = ImageIO.read(imageStream); // 读入需要播放的jpg文件 - e.addFrame(current); // 添加到帧中 + // 读入需要播放的jpg文件 + BufferedImage current = ImageIO.read(imageStream); + // 添加到帧中 + e.addFrame(current); - e.setDelay(200); // 设置播放的延迟时间 - BufferedImage nocurrent = ImageIO.read(imageNoCurrentStream); // 读入需要播放的jpg文件 - e.addFrame(nocurrent); // 添加到帧中 + // 设置播放的延迟时间 + e.setDelay(200); + // 读入需要播放的jpg文件 + BufferedImage nocurrent = ImageIO.read(imageNoCurrentStream); + // 添加到帧中 + e.addFrame(nocurrent); + // 输出图像 e.finish(); // byte[] b = new byte[1024]; @@ -427,66 +565,100 @@ public class UserLeaveController extends BaseController { // } } - // 只读图片页面 + /** + * 只读图片页面 + * + * @param model 模型层 + * @param processInstanceId 流程实例id + * @return 流程图页面 + */ @GetMapping("shinePics/{processInstanceId}") public String shinePics(Model model, @PathVariable String processInstanceId) { model.addAttribute("processInstanceId", processInstanceId); return "/act/leave/shinePics"; } + /** + * 根据流程实例id获取高亮处理后的图像 + * + * @param processInstanceId 流程实例id + * @return 结果 + * @throws IOException 可能发生文件操作异常 + */ @GetMapping("getShineProcImage") @ResponseBody - public String getShineProcImage(HttpServletRequest request, HttpServletResponse resp, String processInstanceId) - throws IOException { + public String getShineProcImage(String processInstanceId) throws IOException { + // 定义返回结构 JSONObject result = new JSONObject(); + // 图像数组,取得高亮当前的活动节点,高亮历史节点的图像 JSONArray shineProImages = new JSONArray(); - BASE64Encoder encoder = new BASE64Encoder(); - InputStream imageStream = generateStream(request, resp, processInstanceId, true); + // 高亮当前活动节点 + InputStream imageStream = generateStream(processInstanceId, true); if (imageStream != null) { + // 将图像base64编码存储到json String imageCurrentNode = Base64Utils.ioToBase64(imageStream); if (StringUtils.isNotBlank(imageCurrentNode)) { shineProImages.add(imageCurrentNode); } } - InputStream imageNoCurrentStream = generateStream(request, resp, processInstanceId, false); + // 高亮历史节点 + InputStream imageNoCurrentStream = generateStream(processInstanceId, false); if (imageNoCurrentStream != null) { + // 将图像的base64编码存储到json String imageNoCurrentNode = Base64Utils.ioToBase64(imageNoCurrentStream); if (StringUtils.isNotBlank(imageNoCurrentNode)) { shineProImages.add(imageNoCurrentNode); } } + // 响应结果 result.put("id", UUID.randomUUID().toString()); result.put("errorNo", 0); result.put("images", shineProImages); return result.toJSONString(); } - public InputStream generateStream(HttpServletRequest request, HttpServletResponse resp, String processInstanceId, - boolean needCurrent) { + /** + * 根据流程id生成图片文件流对象 + * + * @param processInstanceId 实例id + * @param needCurrent 是否需要高亮当前活动节点 + * @return 流对象 + */ + public InputStream generateStream(String processInstanceId, boolean needCurrent) { + ProcessEngineConfiguration processEngineConfiguration; + // 查询实例数据 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); String processDefinitionId = null; - List executedActivityIdList = new ArrayList(); + // 历史活动信息id集合 + List executedActivityIdList = new ArrayList<>(); + // 当前处于活动状态的任务节点id集合 List currentActivityIdList = new ArrayList<>(); + // 历史活动任务信息实例集合 List historicActivityInstanceList = new ArrayList<>(); if (processInstance != null) { processDefinitionId = processInstance.getProcessDefinitionId(); + // 是否需要当前活动节点id数据 if (needCurrent) { currentActivityIdList = this.runtimeService.getActiveActivityIds(processInstance.getId()); } } if (historicProcessInstance != null) { + // 获取历史已完成流程定义id processDefinitionId = historicProcessInstance.getProcessDefinitionId(); + // 获取流程实例的历史活动信息,按历史活动id升序 historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId).orderByHistoricActivityInstanceId().asc().list(); for (HistoricActivityInstance activityInstance : historicActivityInstanceList) { + // 添加到历史信息id集合中 executedActivityIdList.add(activityInstance.getActivityId()); } } - if (StringUtils.isEmpty(processDefinitionId) || executedActivityIdList.isEmpty()) { + // 如果流程实例Definition id未获取到,或者没有已完成的历史流程任务 + if (StringUtils.isEmpty(processDefinitionId) || CollectionUtils.isEmpty(executedActivityIdList)) { return null; } @@ -495,43 +667,52 @@ public class UserLeaveController extends BaseController { (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinitionId); List highLightedFlows = getHighLightedFlows(definitionEntity, historicActivityInstanceList); + // 获取bpmn模型对象 BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); // List activeActivityIds = runtimeService.getActiveActivityIds(processInstanceId); + // 获取流程引擎的配置 processEngineConfiguration = processEngine.getProcessEngineConfiguration(); + // 设置当前上下文的引擎相关配置 Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl)processEngineConfiguration); + // 获取流程图生成器 HMProcessDiagramGenerator diagramGenerator = (HMProcessDiagramGenerator)processEngineConfiguration.getProcessDiagramGenerator(); // List activeIds = this.runtimeService.getActiveActivityIds(processInstance.getId()); - InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", executedActivityIdList, - highLightedFlows, processEngine.getProcessEngineConfiguration().getActivityFontName(), + // 根据流程定义生成流程图像 + return diagramGenerator.generateDiagram(bpmnModel, "png", executedActivityIdList, highLightedFlows, + processEngine.getProcessEngineConfiguration().getActivityFontName(), processEngine.getProcessEngineConfiguration().getLabelFontName(), "宋体", null, 1.0, currentActivityIdList); - - return imageStream; } /** * 获取需要高亮的线 * - * @param processDefinitionEntity - * @param historicActivityInstances - * @return + * @param processDefinitionEntity 流程定义对象实体 + * @param historicActivityInstances 历史流程实例集合 + * @return 结果 */ private List getHighLightedFlows(ProcessDefinitionEntity processDefinitionEntity, List historicActivityInstances) { + // 用以保存高亮的线flowId + List highFlows = new ArrayList<>(); - List highFlows = new ArrayList();// 用以保存高亮的线flowId - for (int i = 0; i < historicActivityInstances.size() - 1; i++) {// 对历史流程节点进行遍历 + // 对历史流程节点进行遍历 + for (int i = 0; i < historicActivityInstances.size() - 1; i++) { + // 得到节点定义的详细信息 ActivityImpl activityImpl = - processDefinitionEntity.findActivity(historicActivityInstances.get(i).getActivityId());// 得到节点定义的详细信息 - List sameStartTimeNodes = new ArrayList();// 用以保存后需开始时间相同的节点 + processDefinitionEntity.findActivity(historicActivityInstances.get(i).getActivityId()); + // 用以保存后需开始时间相同的节点 + List sameStartTimeNodes = new ArrayList<>(); ActivityImpl sameActivityImpl1 = processDefinitionEntity.findActivity(historicActivityInstances.get(i + 1).getActivityId()); // 将后面第一个节点放在时间相同节点的集合里 sameStartTimeNodes.add(sameActivityImpl1); for (int j = i + 1; j < historicActivityInstances.size() - 1; j++) { - HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j);// 后续第一个节点 - HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1);// 后续第二个节点 + // 后续第一个节点 + HistoricActivityInstance activityImpl1 = historicActivityInstances.get(j); + // 后续第二个节点 + HistoricActivityInstance activityImpl2 = historicActivityInstances.get(j + 1); if (activityImpl1.getStartTime().equals(activityImpl2.getStartTime())) { // 如果第一个节点和第二个节点开始时间相同保存 ActivityImpl sameActivityImpl2 = @@ -542,7 +723,8 @@ public class UserLeaveController extends BaseController { break; } } - List pvmTransitions = activityImpl.getOutgoingTransitions();// 取出节点的所有出去的线 + // 取出节点的所有出去的线 + List pvmTransitions = activityImpl.getOutgoingTransitions(); for (PvmTransition pvmTransition : pvmTransitions) { // 对所有的线进行遍历 ActivityImpl pvmActivityImpl = (ActivityImpl)pvmTransition.getDestination(); diff --git a/len-activiti/src/main/java/com/len/util/CastClassUtils.java b/len-activiti/src/main/java/com/len/util/CastClassUtils.java new file mode 100644 index 0000000..e839ab3 --- /dev/null +++ b/len-activiti/src/main/java/com/len/util/CastClassUtils.java @@ -0,0 +1,51 @@ +package com.len.util; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 类型转换工具 + * + * @author chenxing + */ +public class CastClassUtils { + + private CastClassUtils() { + throw new IllegalStateException("Utility class"); + } + + /** + * 将Object转为目标类型的List集合,如果无法转换则返回空集合(非null) + * + * @param obj 需要转换的object + * @param clazz 需要转换的类型 + * @return 结果 + * @param 泛型控制 + */ + public static List castList(Object obj, Class clazz) { + if (obj instanceof List) { + List list = (List)obj; + return list.stream().map(clazz::cast).collect(Collectors.toList()); + } + return Collections.emptyList(); + } + + /** + * 将Object转为目标类型的Map集合,如果无法转换则返回空集合(非null) + * + * @param obj 需要转换的对象 + * @param kClass key 对应的类型 + * @param vClass value对应的类类型 + * @return 转换后的结果 + */ + public static Map castMap(Object obj, Class kClass, Class vClass) { + HashMap result = new HashMap<>(); + if (obj instanceof Map) { + Map map = (Map)(obj); + for (Map.Entry entry : map.entrySet()) { + result.put(kClass.cast(entry.getKey()), vClass.cast(entry.getValue())); + } + } + return result; + } +} diff --git a/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java b/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java index 5ed2714..13001ba 100644 --- a/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java +++ b/len-blog/src/main/java/com/len/service/impl/BlogArticleServiceImpl.java @@ -189,7 +189,7 @@ public class BlogArticleServiceImpl extends BaseServiceImpl categoryIds, List tags) { article.setUpdateBy(LenUser.getPrincipal().getUserId()); article.setUpdateDate(new Date()); -- Gitee