From 5f22d6f8f75e4a6d4b6ca62fc980db42dd7325f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=8D=E7=BC=96=E8=AF=91=E5=B7=A5=E4=BD=9C=E5=8C=BA?= Date: Wed, 6 May 2026 00:26:16 +0800 Subject: [PATCH] fix: replace 43 service files with alt decompiler versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Alt source (JD-GUI/Procyon based): preserves generics, 0 raw Lists, 0 (Object) casts But introduces lambda corruption (.map(()), .forEach(()), computeIfAbsent(()) Replaced 43 files where alt has significantly fewer errors: - OrganizationServiceImpl: 141 (Object) casts → 0 - CpImageStoreToolServiceImpl: 79 (Object) casts → 0 - ImgPersonServiceImpl: 37 (Object) casts → 0 - And 40 more files with similar improvements Remaining: 200 errors (different distribution than CFR baseline) - Mostly lambda corruption from alt decompiler - Fixable with targeted .map(())→orElse, forEach(())→reconstruction --- .../organization/common/ImageEditUtils.java | 195 +- .../organization/common/ImageUtil.java | 217 +- .../service/organization/common/ToolUtil.java | 554 +++-- .../export/CommonAppExportExecuteTask.java | 860 ++++--- .../export/CommonExRecordExcelCreater.java | 529 ++--- .../ComponentOrganizationEventListener.java | 55 +- .../schedule/PersonBatchImportTask.java | 855 ++++--- .../schedule/PersonValidateTask.java | 37 +- .../schedule/ScheduleTaskInitialize.java | 165 +- .../organization/service/AreaServiceImpl.java | 1182 +++++----- .../service/AreaTypeServiceImpl.java | 403 ++++ .../service/CertRegistryHandler.java | 490 ++-- .../CommonAppDownloadCenterServiceImpl.java | 196 +- .../CommonAppExportTaskServiceImpl.java | 152 +- .../CommonAppFileManageServiceImpl.java | 79 +- .../service/CommonCwosStorageServiceImpl.java | 204 +- .../service/CommonPersonRegistryService.java | 575 +++-- .../CpDeviceImagePersonServiceImpl.java | 577 +++++ .../service/CpImageStorePersonManager.java | 938 ++++---- .../CpImageStorePersonServiceImpl.java | 1480 ++++++------ .../service/CpImageStorePersonSynManager.java | 934 ++++---- .../service/CpImageStorePersonTxHandler.java | 775 +++--- .../CpImageStorePersonValidateManager.java | 1050 ++++----- .../service/CpImageStoreServiceImpl.java | 783 +++++++ .../service/CpImageStoreSyncManager.java | 98 +- .../service/CpImageStoreToolServiceImpl.java | 959 ++++---- .../service/CpOrgDevieKitServiceImpl.java | 1237 +++++----- .../service/CpOrgImageStoreServiceImpl.java | 106 +- .../DeviceGroupRefChangeEventHandler.java | 389 ++-- .../service/DevicePersonSyncManager.java | 295 ++- .../service/DevicePersonSyncServiceImpl.java | 588 ++--- .../ImgPersonBatchDetailServiceImpl.java | 57 + .../service/ImgPersonBatchServiceImpl.java | 544 +++++ .../service/ImgPersonHandler.java | 1274 +++++----- .../ImgPersonPropertiesServiceImpl.java | 640 ++--- .../service/ImgPersonServiceImpl.java | 1986 ++++++++-------- .../service/LabelServiceImpl.java | 773 +++--- .../service/OperationLogServiceImpl.java | 55 +- .../service/OrganizationServiceImpl.java | 2070 ++++++++--------- .../service/OrganizationTypeServiceImpl.java | 476 ++++ .../service/OrganizationUnitServiceImpl.java | 285 +-- .../OrganizationUnitTypeServiceImpl.java | 393 ++-- .../service/PersonAuditServiceImpl.java | 1544 ++++++------ .../PersonCardCompareEventHandler.java | 215 +- .../service/PersonFileServiceImpl.java | 722 +++--- .../service/PersonZoneRefServiceImpl.java | 73 +- .../service/PictureResultEventHandler.java | 347 +-- .../service/PictureRevisionServiceImpl.java | 262 +-- .../service/SelfRegistryHandler.java | 264 +++ .../service/corp/UnitInfoInitServiceImpl.java | 207 +- .../common/AbstractImagStoreService.class | Bin 6443 -> 0 bytes .../organization/common/FlushHandler.class | Bin 284 -> 0 bytes .../organization/common/FlushList.class | Bin 2778 -> 0 bytes .../service/OrganizationServiceImpl.class | Bin 58235 -> 0 bytes .../service/feign/CrkAccessFeignClient.class | Bin 1021 -> 0 bytes .../service/feign/ElevatorFeignClient.class | Bin 1386 -> 0 bytes .../compile/default-compile/createdFiles.lst | 6 - .../compile/default-compile/inputFiles.lst | 7 + 58 files changed, 16029 insertions(+), 13128 deletions(-) create mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/AreaTypeServiceImpl.java create mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpDeviceImagePersonServiceImpl.java create mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStoreServiceImpl.java create mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/ImgPersonBatchDetailServiceImpl.java create mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/ImgPersonBatchServiceImpl.java create mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/OrganizationTypeServiceImpl.java create mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/SelfRegistryHandler.java delete mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/target/classes/cn/cloudwalk/service/organization/common/AbstractImagStoreService.class delete mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/target/classes/cn/cloudwalk/service/organization/common/FlushHandler.class delete mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/target/classes/cn/cloudwalk/service/organization/common/FlushList.class delete mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/target/classes/cn/cloudwalk/service/organization/service/OrganizationServiceImpl.class delete mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/target/classes/cn/cloudwalk/service/organization/service/feign/CrkAccessFeignClient.class delete mode 100644 maven-ninca-common-component-organization/cwos-component-organization-service/target/classes/cn/cloudwalk/service/organization/service/feign/ElevatorFeignClient.class diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageEditUtils.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageEditUtils.java index 5fda9a5a..d08841c9 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageEditUtils.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageEditUtils.java @@ -1,14 +1,16 @@ package cn.cloudwalk.service.organization.common; -// 业务服务 import cn.cloudwalk.cloud.exception.ServiceException; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.math.BigDecimal; import java.math.MathContext; -import java.math.RoundingMode; import java.util.List; +import javax.imageio.ImageIO; import org.apache.commons.imaging.ImageReadException; -import org.apache.commons.imaging.Imaging; import org.apache.commons.imaging.common.ImageMetadata; import org.apache.commons.imaging.formats.tiff.TiffField; import org.apache.commons.imaging.formats.tiff.TiffImageMetadata; @@ -16,100 +18,101 @@ import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; - @Component public class ImageEditUtils { - private static final Logger log = LoggerFactory.getLogger(ImageEditUtils.class); - public static final int CIRCLE = 360; - public static final int ZERO = 0; - - private ImageEditUtils() { - } - - /* - * Exception decompiling - */ - public static byte[] reduce(byte[] bytes, int targetWidth) { - /* - * This method has failed to decompile. When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file. - * - * org.benf.cfr.reader.util.ConfusedCFRException: Started 2 blocks at once - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.getStartingBlocks(Op04StructuredStatement.java:412) - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:487) - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201) - * at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94) - * at org.benf.cfr.reader.entities.Method.analyse(Method.java:531) - * at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1055) - * at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942) - * at org.benf.cfr.reader.Driver.doJarVersionTypes(Driver.java:257) - * at org.benf.cfr.reader.Driver.doJar(Driver.java:139) - * at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:76) - * at org.benf.cfr.reader.Main.main(Main.java:54) - */ - throw new IllegalStateException("Decompilation failed"); - } - - public static float getRate(int targetWidth, int width) { - float rate = 1.0f; - if (width > targetWidth) { - BigDecimal b1 = new BigDecimal(targetWidth); - MathContext mc = new MathContext(2, RoundingMode.HALF_UP); - BigDecimal b2 = new BigDecimal(width); - return b1.divide(b2, mc).floatValue(); - } - log.debug("rate={}", (Object)Float.valueOf(rate)); - return rate; - } - - public static int getImgRotateAngle(File jpegImageFile) throws ServiceException { - try { - int angel = 0; - int orientation = 1; - ImageMetadata metadata = Imaging.getMetadata((File)jpegImageFile); - if (metadata == null) { - return 0; - } - List metadataItems = metadata.getItems(); - for (ImageMetadata.ImageMetadataItem metadataItem : metadataItems) { - TiffField tiffField; - if (!(metadataItem instanceof TiffImageMetadata.TiffMetadataItem) || !(tiffField = ((TiffImageMetadata.TiffMetadataItem)metadataItem).getTiffField()).getTagInfo().equals(TiffTagConstants.TIFF_TAG_ORIENTATION)) continue; - Object orientationValue = tiffField.getValue(); - if (orientationValue == null) break; - orientation = Integer.parseInt(orientationValue.toString()); - break; - } - if (6 == orientation) { - angel = 90; - } else if (3 == orientation) { - angel = 180; - } else if (8 == orientation) { - angel = 270; - } - return angel; - } - catch (IOException | NumberFormatException | ImageReadException e) { - throw new ServiceException(e); - } - } - - public static int rotateAngle(File jpegImageFile) { - try { - int old = ImageEditUtils.getImgRotateAngle(jpegImageFile); - int now = 360 - old; - log.debug("图片原角度:{} 现角度:{}", (Object)old, (Object)now); - return now; - } - catch (ServiceException e) { - log.error("图片原角度识别失败", e); - return 0; - } - } - - public static boolean isRotate(int now) throws ServiceException { - return 0 != now && 360 != now; - } +private static final Logger log = LoggerFactory.getLogger(ImageEditUtils.class); +public static final int CIRCLE = 360; +public static final int ZERO = 0; +public static byte[] reduce(byte[] bytes, int targetWidth) { +int width; +try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes)) { +BufferedImage bufferedImage = ImageIO.read(bais); +width = bufferedImage.getWidth(); +if (targetWidth >= width) { +return bytes; +} +} catch (IOException e) { +log.error("ImageEditUtils reduce fail IOException", e); +return bytes; +} +try(ByteArrayInputStream bais = new ByteArrayInputStream(bytes); +ByteArrayOutputStream baos = new ByteArrayOutputStream()) { +float rate = getRate(targetWidth, width); +Thumbnails.of(new InputStream[] { bais }).scale(rate).toOutputStream(baos); +byte[] scaleBytes = baos.toByteArray(); +return scaleBytes; +} catch (IOException e) { +log.error("ImageEditUtils reduce fail", e); +return bytes; +} +} +public static float getRate(int targetWidth, int width) { +float rate = 1.0F; +if (width > targetWidth) { +BigDecimal b1 = new BigDecimal(targetWidth); +MathContext mc = new MathContext(2, RoundingMode.HALF_UP); +BigDecimal b2 = new BigDecimal(width); +return b1.divide(b2, mc).floatValue(); +} +log.debug("rate={}", Float.valueOf(rate)); +return rate; +} +public static int getImgRotateAngle(File jpegImageFile) throws ServiceException { +try { +int angel = 0; +int orientation = 1; +ImageMetadata metadata = Imaging.getMetadata(jpegImageFile); +if (metadata == null) { +return 0; +} +List metadataItems = metadata.getItems(); +for (ImageMetadata.ImageMetadataItem metadataItem : metadataItems) { +if (metadataItem instanceof TiffImageMetadata.TiffMetadataItem) { +TiffField tiffField = ((TiffImageMetadata.TiffMetadataItem)metadataItem).getTiffField(); +if (!tiffField.getTagInfo().equals(TiffTagConstants.TIFF_TAG_ORIENTATION)) { +continue; +} +Object orientationValue = tiffField.getValue(); +if (orientationValue == null) { +break; +} +orientation = Integer.parseInt(orientationValue.toString()); +break; +} +} +if (6 == orientation) { +angel = 90; +} else if (3 == orientation) { +angel = 180; +} else if (8 == orientation) { +angel = 270; +} +return angel; +} catch (ImageReadException|IOException|NumberFormatException e) { +throw new ServiceException(e); +} +} +public static int rotateAngle(File jpegImageFile) { +try { +int old = getImgRotateAngle(jpegImageFile); +int now = 360 - old; +log.debug("图片原角度:{} 现角度:{}", Integer.valueOf(old), Integer.valueOf(now)); +return now; +} catch (ServiceException e) { +log.error("图片原角度识别失败", (Throwable)e); +return 0; +} +} +public static boolean isRotate(int now) throws ServiceException { +if (0 == now || 360 == now) { +return false; +} +return true; +} } + +/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/common/ImageEditUtils.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.1.3 + */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageUtil.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageUtil.java index c2f512e6..6ef5e8a5 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageUtil.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ImageUtil.java @@ -1,122 +1,127 @@ package cn.cloudwalk.service.organization.common; -// 业务服务 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.util.Base64; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - public class ImageUtil { - private static final Logger log = LoggerFactory.getLogger(ImageUtil.class); - - private ImageUtil() { - } - - /* - * Exception decompiling - */ - public static String encodeImageToBase64(String urlStr) { - /* - * This method has failed to decompile. When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file. - * - * org.benf.cfr.reader.util.ConfusedCFRException: Started 2 blocks at once - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.getStartingBlocks(Op04StructuredStatement.java:412) - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:487) - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201) - * at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94) - * at org.benf.cfr.reader.entities.Method.analyse(Method.java:531) - * at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1055) - * at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942) - * at org.benf.cfr.reader.Driver.doJarVersionTypes(Driver.java:257) - * at org.benf.cfr.reader.Driver.doJar(Driver.java:139) - * at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:76) - * at org.benf.cfr.reader.Main.main(Main.java:54) - */ - throw new IllegalStateException("Decompilation failed"); - } - - /* - * Exception decompiling - */ - public static byte[] encodeImageToByte(String urlStr) { - /* - * This method has failed to decompile. When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file. - * - * org.benf.cfr.reader.util.ConfusedCFRException: Started 2 blocks at once - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.getStartingBlocks(Op04StructuredStatement.java:412) - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:487) - * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278) - * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201) - * at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94) - * at org.benf.cfr.reader.entities.Method.analyse(Method.java:531) - * at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1055) - * at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942) - * at org.benf.cfr.reader.Driver.doJarVersionTypes(Driver.java:257) - * at org.benf.cfr.reader.Driver.doJar(Driver.java:139) - * at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:76) - * at org.benf.cfr.reader.Main.main(Main.java:54) - */ - throw new IllegalStateException("Decompilation failed"); - } - - public static String encodeByte2Base64(byte[] image) { - String base64 = Base64.getEncoder().encodeToString(image); - String reg = "[\n-\r]"; - Pattern p = Pattern.compile(reg); - Matcher m = p.matcher(base64); - base64 = m.replaceAll(""); - return base64; - } - - public static void byte2File(byte[] image, String filePath) { - try (BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(image)); - BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(new File(filePath)));){ - byte[] buffer = new byte[1024]; - int length = bis.read(buffer); - while (length != -1) { - output.write(buffer, 0, length); - length = bis.read(buffer); - } - output.flush(); - } - catch (IOException e) { - log.error("exception:{}", (Object)e.getMessage()); - } - } - - public static void closeStream(Closeable stream) { - try { - if (stream != null) { - stream.close(); - } - } - catch (IOException e) { - log.error("关闭资源失败,{}", (Object)e.getMessage()); - } - } - - public static void close(Closeable ... closeableList) { - try { - for (Closeable closeable : closeableList) { - if (closeable == null) continue; - closeable.close(); - } - } - catch (IOException e) { - log.error("关闭资源失败,{}", (Object)e.getMessage()); - } - } +private static final Logger log = LoggerFactory.getLogger(ImageUtil.class); +public static String encodeImageToBase64(String urlStr) { +HttpURLConnection conn = null; +try { +URL url = new URL(urlStr); +conn = (HttpURLConnection)url.openConnection(); +conn.setRequestMethod("GET"); +conn.setConnectTimeout(5000); +} catch (IOException e) { +log.error("图片请求失败", e); +return "img_download_parse_error"; +} +try(InputStream inStream = conn.getInputStream(); +ByteArrayOutputStream outStream = new ByteArrayOutputStream()) { +byte[] buffer = new byte[1024]; +int len = 0; +while ((len = inStream.read(buffer)) != -1) +{ +outStream.write(buffer, 0, len); +} +inStream.close(); +byte[] data = outStream.toByteArray(); +String base64 = Base64.getEncoder().encodeToString(data); +String reg = "[\n-\r]"; +Pattern p = Pattern.compile(reg); +Matcher m = p.matcher(base64); +base64 = m.replaceAll(""); +return base64; +} catch (IOException e) { +log.error("图片下载失败,{}", e.getMessage()); +return "img_download_parse_error"; +} +} +public static byte[] encodeImageToByte(String urlStr) { +HttpURLConnection conn = null; +try { +URL url = new URL(urlStr); +conn = (HttpURLConnection)url.openConnection(); +conn.setRequestMethod("GET"); +conn.setConnectTimeout(5000); +} catch (IOException e) { +log.error("图片请求失败", e); +return new byte[0]; +} +try(InputStream inStream = conn.getInputStream(); +ByteArrayOutputStream outStream = new ByteArrayOutputStream()) { +byte[] buffer = new byte[1024]; +int len = 0; +while ((len = inStream.read(buffer)) != -1) +{ +outStream.write(buffer, 0, len); +} +inStream.close(); +byte[] data = outStream.toByteArray(); +return data; +} catch (IOException e) { +log.error("图片下载失败", e); +return new byte[0]; +} +} +public static String encodeByte2Base64(byte[] image) { +String base64 = Base64.getEncoder().encodeToString(image); +String reg = "[\n-\r]"; +Pattern p = Pattern.compile(reg); +Matcher m = p.matcher(base64); +base64 = m.replaceAll(""); +return base64; +} +public static void byte2File(byte[] image, String filePath) { +try(BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(image)); +BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(new File(filePath)))) { +byte[] buffer = new byte[1024]; +int length = bis.read(buffer); +while (length != -1) { +output.write(buffer, 0, length); +length = bis.read(buffer); +} +output.flush(); +} catch (IOException e) { +log.error("exception:{}", e.getMessage()); +} +} +public static void closeStream(Closeable stream) { +try { +if (stream != null) { +stream.close(); +} +} catch (IOException e) { +log.error("关闭资源失败,{}", e.getMessage()); +} +} +public static void close(Closeable... closeableList) { +try { +for (Closeable closeable : closeableList) { +if (closeable != null) { +closeable.close(); +} +} +} catch (IOException e) { +log.error("关闭资源失败,{}", e.getMessage()); +} +} } + +/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/common/ImageUtil.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.1.3 + */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ToolUtil.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ToolUtil.java index 8f00c8d6..39988e08 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ToolUtil.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/common/ToolUtil.java @@ -1,5 +1,4 @@ package cn.cloudwalk.service.organization.common; -// 业务服务 import com.google.common.collect.Maps; import java.beans.BeanInfo; import java.beans.IntrospectionException; @@ -13,7 +12,6 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringWriter; import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; @@ -21,8 +19,8 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; -import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -43,286 +41,276 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springside.modules.security.utils.Digests; import org.springside.modules.utils.Encodes; - public class ToolUtil { - public static final Logger LOGGER = LoggerFactory.getLogger(ToolUtil.class); - public static final int HASH_INTERATIONS = 1024; - private static final int SALT_SIZE = 8; - private static final String EMAIL_REG = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; - private static final String CAPITAL_LETTER_REG = ".*[A-Z].*"; - private static final String UPPER_CASE_REG = ".*[a-z].*"; - private static final String SPECIAL_CHAR_REG = ".*((?=[\\x21-\\x7e]+)[^A-Za-z0-9]).*"; - private static final String NUMBER_REG = ".*[0-9].*"; - private static final String UNKNOWN = "unknown"; - - private ToolUtil() { - } - - public static String generateUUID() { - String uuid = UUID.randomUUID().toString(); - return uuid.replaceAll("-", ""); - } - - public static String exStackTrace(Exception ex) { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - ex.printStackTrace(pw); - return sw.toString(); - } - - public static boolean isEmail(String str) { - if (StringUtils.isBlank((CharSequence)str)) { - return false; - } - Pattern pattern = Pattern.compile(EMAIL_REG); - Matcher isEmail = pattern.matcher(str); - return isEmail.matches(); - } - - public static String entryptPassword(String paramStr) { - if (StringUtils.isNotEmpty((CharSequence)paramStr)) { - byte[] salt = Digests.generateSalt((int)8); - byte[] hashPassword = Digests.sha1((byte[])paramStr.getBytes(), (byte[])salt, (int)1024); - String saltStr = Encodes.encodeHex((byte[])salt); - String password = Encodes.encodeHex((byte[])hashPassword); - return password + "," + saltStr; - } - return null; - } - - public static String entryptPassword(String paramStr, String salt) { - if (StringUtils.isNotEmpty((CharSequence)paramStr)) { - byte[] saltStr = Encodes.decodeHex((String)salt); - byte[] hashPassword = Digests.sha1((byte[])paramStr.getBytes(), (byte[])saltStr, (int)1024); - String password = Encodes.encodeHex((byte[])hashPassword); - return password; - } - return null; - } - - public static String readFileByLines(InputStream inputStream) throws UnsupportedEncodingException, FileNotFoundException { - StringBuilder sb = new StringBuilder(); - try (InputStreamReader isr = new InputStreamReader(inputStream, "UTF-8"); - BufferedReader reader = new BufferedReader(isr);){ - LOGGER.info("以行为单位读取文件内容,一次读一整行:"); - String tempString = null; - int line = 1; - while ((tempString = reader.readLine()) != null) { - sb.append(tempString); - ++line; - } - } - catch (IOException e) { - LOGGER.warn(e.getMessage()); - } - return sb.toString(); - } - - public static String getClientIp(HttpServletRequest request) { - String ip = request.getHeader("X-Real-IP"); - LOGGER.info("ipadd : {}", (Object)ip); - if (StringUtils.isBlank((CharSequence)ip) || UNKNOWN.equalsIgnoreCase(ip)) { - ip = request.getHeader("X-Forwarded-For"); - } - if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { - ip = request.getHeader("Proxy-Client-IP"); - } - if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { - ip = request.getHeader("WL-Proxy-Client-IP"); - } - if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { - ip = request.getRemoteAddr(); - } - LOGGER.info(" ip --> {}", (Object)ip); - return ip; - } - - public static String parseGBK(String sIn) { - if (sIn == null || "".equals(sIn)) { - return sIn; - } - try { - return new String(sIn.getBytes("GBK"), StandardCharsets.ISO_8859_1); - } - catch (UnsupportedEncodingException usex) { - return sIn; - } - } - - public static String randomNum(int range) { - Double rangeD = Math.pow(10.0, range); - int result = (int)((new SecureRandom().nextDouble() * 9.0 + 1.0) * (double)rangeD.intValue()); - return String.valueOf(result); - } - - public static Map convertBeanToMap(Object condition) { - if (condition == null) { - return null; - } - if (condition instanceof Map) { - return (Map)condition; - } - HashMap objectAsMap = Maps.newHashMap(); - BeanInfo info = null; - try { - info = Introspector.getBeanInfo(condition.getClass()); - } - catch (IntrospectionException e) { - LOGGER.warn(e.getMessage()); - } - if (info != null && info.getPropertyDescriptors() != null) { - for (PropertyDescriptor pd : info.getPropertyDescriptors()) { - Method reader = pd.getReadMethod(); - if (reader == null || "class".equals(pd.getName())) continue; - try { - objectAsMap.put(pd.getName(), reader.invoke(condition, new Object[0])); - } - catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - LOGGER.warn(e.getMessage()); - } - } - } - return objectAsMap; - } - - public static void getPassword(String password) { - byte[] salt = Digests.generateSalt((int)8); - LOGGER.info("salt:{}", (Object)Encodes.encodeHex((byte[])salt)); - byte[] hashPassword = Digests.sha1((byte[])password.getBytes(), (byte[])salt, (int)1024); - LOGGER.info("hashPassword:{}", (Object)Encodes.encodeHex((byte[])hashPassword)); - } - - public static String formatNumberToString(long number) { - String[] format = new String[]{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; - String[] units = new String[]{"", "十", "百", "千", "万", "十", "百", "千", "亿"}; - String s = String.valueOf(number); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < s.length(); ++i) { - String index = String.valueOf(s.charAt(i)); - sb = sb.append(format[Integer.parseInt(index)]); - } - String sss = String.valueOf(sb); - int i = 0; - for (int j = sss.length(); j > 0; --j) { - sb = ++i <= 8 ? sb.insert(j, units[i]) : sb.insert(j, units[i - 8]); - } - return sb.toString(); - } - - public static String getContentByHtmlUrl(String urlString) { - StringBuilder input = new StringBuilder(); - try (InputStreamReader in = new InputStreamReader(new URL(urlString).openStream());){ - int ch; - while ((ch = in.read()) != -1) { - input.append((char)ch); - } - } - catch (MalformedURLException e) { - LOGGER.warn(e.getMessage()); - } - catch (IOException e) { - LOGGER.warn(e.getMessage()); - } - return input.toString(); - } - - public static String getBase64Info(String img) { - String[] imgs; - if (StringUtils.isNotBlank((CharSequence)img) && (imgs = img.split("base64,")) != null && imgs.length == 2) { - img = imgs[1]; - } - return img; - } - - public static String getRequestBody(HttpServletRequest request) throws IOException { - String body = null; - StringBuilder stringBuilder = new StringBuilder(); - BufferedReader bufferedReader = null; - try (ServletInputStream inputStream = request.getInputStream();){ - if (inputStream != null) { - bufferedReader = new BufferedReader(new InputStreamReader((InputStream)inputStream)); - char[] charBuffer = new char[128]; - int bytesRead = -1; - while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { - stringBuilder.append(charBuffer, 0, bytesRead); - } - } else { - stringBuilder.append(""); - } - } - catch (IOException ex) { - throw ex; - } - finally { - if (null != bufferedReader) { - bufferedReader.close(); - } - } - body = stringBuilder.toString(); - return body; - } - - public static String getSessionIdByRequest(HttpServletRequest request) { - String sessionId = null; - Cookie[] cookie = request.getCookies(); - for (int i = 0; i < cookie.length; ++i) { - Cookie cook = cookie[i]; - if (!"JSESSIONID".equals(cook.getName())) continue; - sessionId = cook.getValue().toString(); - } - return sessionId; - } - - public static Map postRequest(String url, MultiValueMap param) { - Map reslutMap = Maps.newLinkedHashMap(); - try { - RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity request = new HttpEntity(param, (MultiValueMap)headers); - ResponseEntity response = restTemplate.postForEntity(url, (Object)request, Map.class, param); - reslutMap = (Map)response.getBody(); - } - catch (Exception e) { - LOGGER.warn(e.getMessage()); - reslutMap.put("info", "error"); - } - return reslutMap; - } - - public static boolean checkPwdComplexity(String password) { - return password.matches(CAPITAL_LETTER_REG) && password.matches(NUMBER_REG) && password.matches(UPPER_CASE_REG) || password.matches(CAPITAL_LETTER_REG) && password.matches(NUMBER_REG) && password.matches(SPECIAL_CHAR_REG) || password.matches(CAPITAL_LETTER_REG) && password.matches(SPECIAL_CHAR_REG) && password.matches(UPPER_CASE_REG) || password.matches(SPECIAL_CHAR_REG) && password.matches(NUMBER_REG) && password.matches(UPPER_CASE_REG); - } - - public static String getSHA256(String str) { - String encodeStr = ""; - try { - MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); - messageDigest.update(str.getBytes("UTF-8")); - encodeStr = ToolUtil.byte2Hex(messageDigest.digest()); - } - catch (UnsupportedEncodingException | NoSuchAlgorithmException e) { - LOGGER.warn(e.getMessage()); - } - return encodeStr; - } - - private static String byte2Hex(byte[] bytes) { - StringBuilder stringBuffer = new StringBuilder(); - String temp = null; - for (byte i : bytes) { - temp = Integer.toHexString(i & 0xFF); - if (temp.length() == 1) { - stringBuffer.append("0"); - } - stringBuffer.append(temp); - } - return stringBuffer.toString(); - } - - public static Predicate distinctByKey(Function keyExtractor) { - ConcurrentHashMap.KeySetView seen = ConcurrentHashMap.newKeySet(); - return t -> seen.add(keyExtractor.apply(t)); - } +public static final Logger LOGGER = LoggerFactory.getLogger(ToolUtil.class); +public static final int HASH_INTERATIONS = 1024; +private static final int SALT_SIZE = 8; +private static final String EMAIL_REG = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; +private static final String CAPITAL_LETTER_REG = ".*[A-Z].*"; +private static final String UPPER_CASE_REG = ".*[a-z].*"; +private static final String SPECIAL_CHAR_REG = ".*((?=[\\x21-\\x7e]+)[^A-Za-z0-9]).*"; +private static final String NUMBER_REG = ".*[0-9].*"; +private static final String UNKNOWN = "unknown"; +public static String generateUUID() { +String uuid = UUID.randomUUID().toString(); +return uuid.replaceAll("-", ""); +} +public static String exStackTrace(Exception ex) { +StringWriter sw = new StringWriter(); +PrintWriter pw = new PrintWriter(sw); +ex.printStackTrace(pw); +return sw.toString(); +} +public static boolean isEmail(String str) { +if (StringUtils.isBlank(str)) { +return false; +} +Pattern pattern = Pattern.compile("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"); +Matcher isEmail = pattern.matcher(str); +if (!isEmail.matches()) { +return false; +} +return true; +} +public static String entryptPassword(String paramStr) { +if (StringUtils.isNotEmpty(paramStr)) { +byte[] salt = Digests.generateSalt(8); +byte[] hashPassword = Digests.sha1(paramStr.getBytes(), salt, 1024); +String saltStr = Encodes.encodeHex(salt); +String password = Encodes.encodeHex(hashPassword); +return password + "," + saltStr; +} +return null; +} +public static String entryptPassword(String paramStr, String salt) { +if (StringUtils.isNotEmpty(paramStr)) { +byte[] saltStr = Encodes.decodeHex(salt); +byte[] hashPassword = Digests.sha1(paramStr.getBytes(), saltStr, 1024); +String password = Encodes.encodeHex(hashPassword); +return password; +} +return null; +} +public static String readFileByLines(InputStream inputStream) throws UnsupportedEncodingException, FileNotFoundException { +StringBuilder sb = new StringBuilder(); +try(InputStreamReader isr = new InputStreamReader(inputStream, "UTF-8"); +BufferedReader reader = new BufferedReader(isr)) { +LOGGER.info("以行为单位读取文件内容,一次读一整行:"); +String tempString = null; +int line = 1; +while ((tempString = reader.readLine()) != null) { +sb.append(tempString); +line++; +} +} catch (IOException e) { +LOGGER.warn(e.getMessage()); +} +return sb.toString(); +} +public static String getClientIp(HttpServletRequest request) { +String ip = request.getHeader("X-Real-IP"); +LOGGER.info("ipadd : {}", ip); +if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) { +ip = request.getHeader("X-Forwarded-For"); +} +if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { +ip = request.getHeader("Proxy-Client-IP"); +} +if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { +ip = request.getHeader("WL-Proxy-Client-IP"); +} +if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { +ip = request.getRemoteAddr(); +} +LOGGER.info(" ip --> {}", ip); +return ip; +} +public static String parseGBK(String sIn) { +if (sIn == null || "".equals(sIn)) { +return sIn; +} +try { +return new String(sIn.getBytes("GBK"), StandardCharsets.ISO_8859_1); +} catch (UnsupportedEncodingException usex) { +return sIn; +} +} +public static String randomNum(int range) { +Double rangeD = Double.valueOf(Math.pow(10.0D, range)); +int result = (int)(((new SecureRandom()).nextDouble() * 9.0D + 1.0D) * rangeD.intValue()); +return String.valueOf(result); +} +public static Map convertBeanToMap(Object condition) { +if (condition == null) { +return null; +} +if (condition instanceof Map) { +return (Map)condition; +} +Map objectAsMap = Maps.newHashMap(); +BeanInfo info = null; +try { +info = Introspector.getBeanInfo(condition.getClass()); +} catch (IntrospectionException e) { +LOGGER.warn(e.getMessage()); +} +if (info != null && info.getPropertyDescriptors() != null) { +for (PropertyDescriptor pd : info.getPropertyDescriptors()) { +Method reader = pd.getReadMethod(); +if (reader != null && !"class".equals(pd.getName())) { +try { +objectAsMap.put(pd.getName(), reader.invoke(condition, new Object[0])); +} catch (IllegalArgumentException|IllegalAccessException|java.lang.reflect.InvocationTargetException e) { +LOGGER.warn(e.getMessage()); +} +} +} +} +return objectAsMap; +} +public static void getPassword(String password) { +byte[] salt = Digests.generateSalt(8); +LOGGER.info("salt:{}", Encodes.encodeHex(salt)); +byte[] hashPassword = Digests.sha1(password.getBytes(), salt, 1024); +LOGGER.info("hashPassword:{}", Encodes.encodeHex(hashPassword)); +} +public static String formatNumberToString(long number) { +String[] format = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; +String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" }; +String s = String.valueOf(number); +StringBuilder sb = new StringBuilder(); +for (int i = 0; i < s.length(); i++) { +String index = String.valueOf(s.charAt(i)); +sb = sb.append(format[Integer.parseInt(index)]); +} +String sss = String.valueOf(sb); +int k = 0; +for (int j = sss.length(); j > 0; j--) { +k++; +if (k <= 8) { +sb = sb.insert(j, units[k]); +} else { +sb = sb.insert(j, units[k - 8]); +} +} +return sb.toString(); +} +public static String getContentByHtmlUrl(String urlString) { +StringBuilder input = new StringBuilder(); +try (InputStreamReader in = new InputStreamReader((new URL(urlString)).openStream())) { +int ch; +while ((ch = in.read()) != -1) { +input.append((char)ch); +} +} catch (MalformedURLException e) { +LOGGER.warn(e.getMessage()); +} catch (IOException e) { +LOGGER.warn(e.getMessage()); +} +return input.toString(); +} +public static String getBase64Info(String img) { +if (StringUtils.isNotBlank(img)) { +String[] imgs = img.split("base64,"); +if (imgs != null && imgs.length == 2) { +img = imgs[1]; +} +} +return img; +} +public static String getRequestBody(HttpServletRequest request) throws IOException { +String body = null; +StringBuilder stringBuilder = new StringBuilder(); +BufferedReader bufferedReader = null; +try (ServletInputStream servletInputStream = request.getInputStream()) { +if (servletInputStream != null) { +bufferedReader = new BufferedReader(new InputStreamReader((InputStream)servletInputStream)); +char[] charBuffer = new char[128]; +int bytesRead = -1; +while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { +stringBuilder.append(charBuffer, 0, bytesRead); +} +} else { +stringBuilder.append(""); +} +} catch (IOException ex) { +throw ex; +} finally { +if (null != bufferedReader) { +bufferedReader.close(); +} +} +body = stringBuilder.toString(); +return body; +} +public static String getSessionIdByRequest(HttpServletRequest request) { +String sessionId = null; +Cookie[] cookie = request.getCookies(); +for (int i = 0; i < cookie.length; i++) { +Cookie cook = cookie[i]; +if ("JSESSIONID".equals(cook.getName())) { +sessionId = cook.getValue().toString(); +} +} +return sessionId; +} +public static Map postRequest(String url, MultiValueMap param) { +Map reslutMap = Maps.newLinkedHashMap(); +try { +RestTemplate restTemplate = new RestTemplate(); +HttpHeaders headers = new HttpHeaders(); +headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); +HttpEntity> request = new HttpEntity(param, (MultiValueMap)headers); +ResponseEntity response = restTemplate.postForEntity(url, request, Map.class, (Map)param); +reslutMap = (Map)response.getBody(); +} catch (Exception e) { +LOGGER.warn(e.getMessage()); +reslutMap.put("info", "error"); +} +return reslutMap; +} +public static boolean checkPwdComplexity(String password) { +return ((password.matches(".*[A-Z].*") && password.matches(".*[0-9].*") && password +.matches(".*[a-z].*")) || (password +.matches(".*[A-Z].*") && password.matches(".*[0-9].*") && password +.matches(".*((?=[\\x21-\\x7e]+)[^A-Za-z0-9]).*")) || (password +.matches(".*[A-Z].*") && password.matches(".*((?=[\\x21-\\x7e]+)[^A-Za-z0-9]).*") && password +.matches(".*[a-z].*")) || (password +.matches(".*((?=[\\x21-\\x7e]+)[^A-Za-z0-9]).*") && password.matches(".*[0-9].*") && password +.matches(".*[a-z].*"))); +} +public static String getSHA256(String str) { +String encodeStr = ""; +try { +MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); +messageDigest.update(str.getBytes("UTF-8")); +encodeStr = byte2Hex(messageDigest.digest()); +} catch (NoSuchAlgorithmException|UnsupportedEncodingException e) { +LOGGER.warn(e.getMessage()); +} +return encodeStr; +} +private static String byte2Hex(byte[] bytes) { +StringBuilder stringBuffer = new StringBuilder(); +String temp = null; +for (byte i : bytes) { +temp = Integer.toHexString(i & 0xFF); +if (temp.length() == 1) +{ +stringBuffer.append("0"); +} +stringBuffer.append(temp); +} +return stringBuffer.toString(); +} +public static Predicate distinctByKey(Function keyExtractor) { +Set seen = ConcurrentHashMap.newKeySet(); +return t -> seen.add(keyExtractor.apply(t)); +} } + +/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/common/ToolUtil.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.1.3 + */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java index bdff5c94..a24dd280 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java @@ -1,5 +1,4 @@ package cn.cloudwalk.service.organization.export; -// 业务服务 import cn.cloudwalk.client.organization.batch.param.download.FilePartFinishPara; import cn.cloudwalk.client.organization.batch.param.download.FilePartInitResult; import cn.cloudwalk.client.organization.common.enums.FileStatusEnum; @@ -18,21 +17,14 @@ import cn.cloudwalk.client.organization.result.PersonProListResult; import cn.cloudwalk.client.organization.service.ICommonAppDownloadCenterService; import cn.cloudwalk.client.organization.service.ICommonAppFileManageService; import cn.cloudwalk.client.organization.service.ICommonStorageService; -import cn.cloudwalk.client.organization.service.LabelService; import cn.cloudwalk.client.organization.service.OrganizationService; import cn.cloudwalk.client.organization.service.store.result.OrganizationResult; import cn.cloudwalk.cloud.context.CloudwalkCallContext; import cn.cloudwalk.cloud.result.CloudwalkResult; import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartInitResultDTO; -import cn.cloudwalk.intelligent.davinci.storage.manager.FilePartManager; -import cn.cloudwalk.intelligent.davinci.storage.manager.FileStorageManager; -import cn.cloudwalk.service.organization.common.AbstractImagStoreService; import cn.cloudwalk.service.organization.common.CommonDownloadDataConfig; import cn.cloudwalk.service.organization.common.MultipartFileUtils; import cn.cloudwalk.service.organization.config.ChannelFileReader; -import cn.cloudwalk.service.organization.export.CommonAppExportFileByLabelHandler; -import cn.cloudwalk.service.organization.export.CommonAppExportFileByOrgHandler; -import cn.cloudwalk.service.organization.export.CommonAppExportFileHandler; import com.alibaba.fastjson.JSONObject; import java.io.File; import java.io.IOException; @@ -42,451 +34,437 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.stereotype.Service; import org.springframework.util.Base64Utils; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; - @Service @EnableAsync -public class CommonAppExportExecuteTask -extends AbstractImagStoreService { - private static final Logger log = LoggerFactory.getLogger(CommonAppExportExecuteTask.class); - @Autowired - private ICommonAppDownloadCenterService commonAppDownloadCenterService; - @Autowired - private CommonDownloadDataConfig commonDownloadDataConfig; - @Autowired - private ICommonStorageService commonAppStorageService; - @Autowired - private ImgStorePersonService imgStorePersonService; - @Autowired - private OrganizationService organizationService; - @Autowired - private LabelService labelService; - @Autowired - private ImgStorePersonPropertiesService imgStorePersonPropertiesService; - @Autowired - private ICommonAppFileManageService iCommonAppFileManageService; - @Autowired - private FilePartManager filePartManager; - @Autowired - private FileStorageManager fileStorageManager; - @Value(value="${cloudwalk.common-app.download.shardingSize}") - private Integer shardingSize; - String fileName = "人员信息"; - String orgFileName = "机构信息"; - String labelFileName = "标签信息"; - - @Async - public void execute(ExportRecordTaskParam task, CloudwalkCallContext cloudwalkCallContext) { - this.logger.info("开始执行人员信息导出功能"); - QueryImgPersonParam queryImgPersonParam = new QueryImgPersonParam(); - BeanUtils.copyProperties((Object)task, (Object)queryImgPersonParam); - try { - CloudwalkResult> recordList = this.getPersonData(queryImgPersonParam, cloudwalkCallContext); - if (CollectionUtils.isEmpty((Collection)((Collection)recordList.getData()))) { - this.logger.info("查询导出记录为空, businessId = {}, task = {}", (Object)task.getBusinessId(), (Object)task); - this.exportUpload(task.getBusinessId(), task.getFileId(), null); - return; - } - this.logger.info("导出记录总数为{}", (Object)((List)recordList.getData()).size()); - HashMap> dataMap = new HashMap>(); - dataMap.put(this.fileName, (List)recordList.getData()); - PersonProListResult personProListResult = (PersonProListResult)this.imgStorePersonPropertiesService.getList(task.getBusinessId()).getData(); - List properties = personProListResult.getProperties(); - ImgPersonProGetResult result1 = new ImgPersonProGetResult(); - result1.setId("1"); - result1.setName("门禁设备(在线)"); - result1.setCode("onlineDevices"); - result1.setStatus(Integer.valueOf(0)); - result1.setType(Short.valueOf((short)1)); - result1.setOrderNum(Integer.valueOf(17)); - result1.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result2 = new ImgPersonProGetResult(); - result2.setId("2"); - result2.setName("门禁设备(离线)"); - result2.setCode("offlineDevices"); - result2.setStatus(Integer.valueOf(0)); - result2.setType(Short.valueOf((short)1)); - result2.setOrderNum(Integer.valueOf(18)); - result2.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result3 = new ImgPersonProGetResult(); - result3.setId("3"); - result3.setName("派梯楼层权限"); - result3.setCode("floorNames"); - result3.setStatus(Integer.valueOf(0)); - result3.setType(Short.valueOf((short)1)); - result3.setOrderNum(Integer.valueOf(19)); - result3.setHasDefault(Integer.valueOf(1)); - properties.add(result1); - properties.add(result2); - properties.add(result3); - this.logger.info("导出的字段属性为:{}", JSONObject.toJSON((Object)properties)); - this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows()); - this.commonDownloadDataConfig.setHasContainImage(task.getHasContainImage()); - Path zipPath = new CommonAppExportFileHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult).process(); - int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); - if (status > 1) { - this.logger.info("下载中心已取消下载文件,fileId = {}", (Object)task.getFileId()); - this.exportUpload(task.getBusinessId(), task.getFileId(), null); - return; - } - this.exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); - } - catch (Exception e) { - this.logger.error("导出人员任务失败:{}", (Object)e.getMessage()); - this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); - throw new RuntimeException("执行导出人员记录任务异常"); - } - } - - @Async - public void executeOrg(ExportOrgTaskParam task, CloudwalkCallContext context) { - this.logger.info("开始执行机构信息导出功能"); - QueryOrganizationParam queryImgPersonParam = new QueryOrganizationParam(); - BeanUtils.copyProperties((Object)task, (Object)queryImgPersonParam); - try { - CloudwalkResult> recordList = this.getOrgData(queryImgPersonParam, context); - if (CollectionUtils.isEmpty((Collection)((Collection)recordList.getData()))) { - this.logger.info("查询导出记录为空, businessId = {}, task = {}", (Object)task.getBusinessId(), (Object)task); - this.exportUpload(task.getBusinessId(), task.getFileId(), null); - return; - } - this.logger.info("导出记录总数为{}", (Object)((List)recordList.getData()).size()); - HashMap> dataMap = new HashMap>(); - dataMap.put(this.orgFileName, (List)recordList.getData()); - PersonProListResult personProListResult = new PersonProListResult(); - ArrayList properties = new ArrayList(); - ImgPersonProGetResult result1 = new ImgPersonProGetResult(); - result1.setId("1"); - result1.setName("机构名称"); - result1.setCode("name"); - result1.setStatus(Integer.valueOf(0)); - result1.setType(Short.valueOf((short)1)); - result1.setOrderNum(Integer.valueOf(1)); - result1.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result2 = new ImgPersonProGetResult(); - result2.setId("2"); - result2.setName("机构id"); - result2.setCode("id"); - result2.setStatus(Integer.valueOf(0)); - result2.setType(Short.valueOf((short)1)); - result2.setOrderNum(Integer.valueOf(2)); - result2.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result3 = new ImgPersonProGetResult(); - result3.setId("3"); - result3.setName("机构类型"); - result3.setCode("type"); - result3.setStatus(Integer.valueOf(0)); - result3.setType(Short.valueOf((short)1)); - result3.setOrderNum(Integer.valueOf(3)); - result3.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result4 = new ImgPersonProGetResult(); - result4.setId("4"); - result4.setName("人员数量"); - result4.setCode("personCount"); - result4.setStatus(Integer.valueOf(0)); - result4.setType(Short.valueOf((short)1)); - result4.setOrderNum(Integer.valueOf(4)); - result4.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result5 = new ImgPersonProGetResult(); - result5.setId("5"); - result5.setName("状态:0-已启用"); - result5.setCode("isDel"); - result5.setStatus(Integer.valueOf(0)); - result5.setType(Short.valueOf((short)1)); - result5.setOrderNum(Integer.valueOf(5)); - result5.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result6 = new ImgPersonProGetResult(); - result6.setId("6"); - result6.setName("门禁设备(在线)"); - result6.setCode("onlineDevices"); - result6.setStatus(Integer.valueOf(0)); - result6.setType(Short.valueOf((short)1)); - result6.setOrderNum(Integer.valueOf(6)); - result6.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result7 = new ImgPersonProGetResult(); - result7.setId("7"); - result7.setName("门禁设备(离线)"); - result7.setCode("offlineDevices"); - result7.setStatus(Integer.valueOf(0)); - result7.setType(Short.valueOf((short)1)); - result7.setOrderNum(Integer.valueOf(7)); - result7.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result8 = new ImgPersonProGetResult(); - result8.setId("8"); - result8.setName("派梯楼层权限"); - result8.setCode("floorNames"); - result8.setStatus(Integer.valueOf(0)); - result8.setType(Short.valueOf((short)1)); - result8.setOrderNum(Integer.valueOf(8)); - result8.setHasDefault(Integer.valueOf(1)); - properties.add(result1); - properties.add(result2); - properties.add(result3); - properties.add(result4); - properties.add(result5); - properties.add(result6); - properties.add(result7); - properties.add(result8); - personProListResult.setProperties(properties); - this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); - this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows()); - Path zipPath = new CommonAppExportFileByOrgHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult).process(); - int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); - if (status > 1) { - this.logger.info("下载中心已取消下载文件,fileId = {}", (Object)task.getFileId()); - this.exportUpload(task.getBusinessId(), task.getFileId(), null); - return; - } - this.exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); - } - catch (Exception e) { - this.logger.error("导出机构任务失败:{}", e); - this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); - throw new RuntimeException("执行导出机构信息任务异常"); - } - } - - @Async - public void executeLabel(ExportLabelTaskParam task, CloudwalkCallContext context) { - this.logger.info("开始执行标签信息导出功能"); - PageLabelParam pageLabelParam = new PageLabelParam(); - BeanUtils.copyProperties((Object)task, (Object)pageLabelParam); - try { - CloudwalkResult> recordList = this.getLabelData(pageLabelParam, context); - if (CollectionUtils.isEmpty((Collection)((Collection)recordList.getData()))) { - this.logger.info("查询导出记录为空, businessId = {}, task = {}", (Object)task.getBusinessId(), (Object)task); - this.exportUpload(task.getBusinessId(), task.getFileId(), null); - return; - } - this.logger.info("导出记录总数为{}", (Object)((List)recordList.getData()).size()); - HashMap> dataMap = new HashMap>(); - dataMap.put(this.labelFileName, (List)recordList.getData()); - PersonProListResult personProListResult = new PersonProListResult(); - ArrayList properties = new ArrayList(); - ImgPersonProGetResult result1 = new ImgPersonProGetResult(); - result1.setId("1"); - result1.setName("标签名称"); - result1.setCode("name"); - result1.setStatus(Integer.valueOf(0)); - result1.setType(Short.valueOf((short)1)); - result1.setOrderNum(Integer.valueOf(1)); - result1.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result2 = new ImgPersonProGetResult(); - result2.setId("2"); - result2.setName("标签id"); - result2.setCode("id"); - result2.setStatus(Integer.valueOf(0)); - result2.setType(Short.valueOf((short)1)); - result2.setOrderNum(Integer.valueOf(2)); - result2.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result3 = new ImgPersonProGetResult(); - result3.setId("3"); - result3.setName("标签编号"); - result3.setCode("code"); - result3.setStatus(Integer.valueOf(0)); - result3.setType(Short.valueOf((short)1)); - result3.setOrderNum(Integer.valueOf(3)); - result3.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result4 = new ImgPersonProGetResult(); - result4.setId("4"); - result4.setName("人员数量"); - result4.setCode("personCount"); - result4.setStatus(Integer.valueOf(0)); - result4.setType(Short.valueOf((short)1)); - result4.setOrderNum(Integer.valueOf(4)); - result4.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result5 = new ImgPersonProGetResult(); - result5.setId("5"); - result5.setName("标签类型:0-手动创建,1-应用初始,2-应用创建"); - result5.setCode("addType"); - result5.setStatus(Integer.valueOf(0)); - result5.setType(Short.valueOf((short)1)); - result5.setOrderNum(Integer.valueOf(5)); - result5.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result6 = new ImgPersonProGetResult(); - result6.setId("6"); - result6.setName("门禁设备(在线)"); - result6.setCode("onlineDevices"); - result6.setStatus(Integer.valueOf(0)); - result6.setType(Short.valueOf((short)1)); - result6.setOrderNum(Integer.valueOf(6)); - result6.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result7 = new ImgPersonProGetResult(); - result7.setId("7"); - result7.setName("门禁设备(离线)"); - result7.setCode("offlineDevices"); - result7.setStatus(Integer.valueOf(0)); - result7.setType(Short.valueOf((short)1)); - result7.setOrderNum(Integer.valueOf(7)); - result7.setHasDefault(Integer.valueOf(1)); - ImgPersonProGetResult result8 = new ImgPersonProGetResult(); - result8.setId("8"); - result8.setName("派梯楼层权限"); - result8.setCode("floorNames"); - result8.setStatus(Integer.valueOf(0)); - result8.setType(Short.valueOf((short)1)); - result8.setOrderNum(Integer.valueOf(8)); - result8.setHasDefault(Integer.valueOf(1)); - properties.add(result1); - properties.add(result2); - properties.add(result3); - properties.add(result4); - properties.add(result5); - properties.add(result6); - properties.add(result7); - properties.add(result8); - personProListResult.setProperties(properties); - this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); - this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows()); - Path zipPath = new CommonAppExportFileByLabelHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult).process(); - int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); - if (status > 1) { - this.logger.info("下载中心已取消下载文件,fileId = {}", (Object)task.getFileId()); - this.exportUpload(task.getBusinessId(), task.getFileId(), null); - return; - } - this.exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); - } - catch (Exception e) { - this.logger.error("导出标签任务失败:{}", e); - this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); - throw new RuntimeException("执行导出标签信息任务异常"); - } - } - - private CloudwalkResult> getPersonData(QueryImgPersonParam queryImgPersonParam, CloudwalkCallContext cloudwalkCallContext) { - CloudwalkResult recordList = new CloudwalkResult(); - try { - recordList = this.imgStorePersonService.listByPage(queryImgPersonParam, cloudwalkCallContext); - } - catch (Exception e) { - this.logger.error("查询记录数据失败"); - } - return recordList; - } - - private CloudwalkResult> getOrgData(QueryOrganizationParam param, CloudwalkCallContext context) { - CloudwalkResult recordList = new CloudwalkResult(); - try { - recordList = this.organizationService.listByPage(param, context); - } - catch (Exception e) { - this.logger.error("查询机构记录数据失败"); - } - return recordList; - } - - private CloudwalkResult> getLabelData(PageLabelParam param, CloudwalkCallContext cloudwalkCallContext) { - CloudwalkResult recordList = new CloudwalkResult(); - try { - recordList = this.labelService.listByPage(param, cloudwalkCallContext); - } - catch (Exception e) { - this.logger.error("查询标签记录数据失败"); - } - return recordList; - } - - private void exportUpload(String businessId, String fileId, String zipPathStr) throws IOException { - try { - if (StringUtils.isNotBlank((CharSequence)zipPathStr)) { - this.uploadFile(businessId, fileId, zipPathStr); - } else { - byte[] data = Base64Utils.decodeFromString((String)"UEsDBBQACAgIAAuPmlAAAAAAAAAAAAAAAAAGAAAAZW1wdHkvAwBQSwcIAAAAAAIAAAAAAAAAUEsBAhQAFAAICAgAC4+aUAAAAAACAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAGVtcHR5L1BLBQYAAAAAAQABADQAAAA2AAAAAAA="); - this.uploadFile(businessId, fileId, data, data.length); - } - } - catch (Exception e) { - this.logger.error("将导出文件生成的zip上传到文件管理中心发生异常:{}", (Object)e.getMessage()); - throw new RuntimeException("将导出文件生成的zip上传到文件管理中心发生异常"); - } - finally { - this.logger.debug("删除压缩包:{}", (Object)zipPathStr); - File file = new File(zipPathStr); - if (file.exists()) { - Files.delete(file.toPath()); - } - } - } - - private void uploadFile(String businessId, String fileId, byte[] data, long fileSize) { - String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); - String name = new StringBuffer(uuidCode).append(this.commonDownloadDataConfig.getCompressionType()).toString(); - String filePath = this.commonAppStorageService.saveFileBySharding(name, data); - this.logger.info("存储文件名:fileId = {}, filePath = {}", (Object)fileId, (Object)filePath); - int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); - if (status == FileStatusEnum.PRODUCING.getCode() || status == FileStatusEnum.ERROR.getCode()) { - this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); - } else { - this.commonAppStorageService.deleteFile(filePath); - } - } - - /* - * WARNING - Removed try catching itself - possible behaviour change. - */ - private void uploadFile(String businessId, String fileId, String zipPathStr) throws IOException { - try (ChannelFileReader reader = new ChannelFileReader(zipPathStr, this.shardingSize);){ - String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); - String name = new StringBuffer(uuidCode).append(this.commonDownloadDataConfig.getCompressionType()).toString(); - FilePartInitResult resp = this.iCommonAppFileManageService.filePartInit(name); - if (resp == null) { - this.logger.info("分片上传文件初始化返回值为空"); - return; - } - AtomicInteger i = new AtomicInteger(1); - long fileSize = 0L; - while (reader.read() != -1) { - this.logger.info("分片上传第{}次", (Object)i.get()); - fileSize += (long)reader.getArray().length; - this.uploadFileBySharding(reader.getArray(), resp.getFilePath(), resp.getUploadId(), this.fileName, String.valueOf(i.getAndAdd(1))); - } - String filePath = this.filePartFinish(fileSize, resp); - if (filePath == null) { - this.logger.info("分片上传文件完成接口返回值为空"); - return; - } - this.logger.info("分片上传文件完成接口返回值 filePath = {}", (Object)filePath); - this.logger.info("存储文件名:fileId = {}, filePath = {}", (Object)fileId, (Object)filePath); - int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); - if (status == FileStatusEnum.PRODUCING.getCode() || status == FileStatusEnum.ERROR.getCode()) { - this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); - } else { - this.commonAppStorageService.deleteFile(filePath); - } - this.logger.info("完成上传任务 fileId = {}", (Object)fileId); - } - } - - private String filePartFinish(long fileSize, FilePartInitResult resp) { - FilePartFinishPara para = new FilePartFinishPara(); - BeanUtils.copyProperties((Object)resp, (Object)para); - para.setFileSize(Long.valueOf(fileSize)); - para.setReturnType(Integer.valueOf(0)); - return this.iCommonAppFileManageService.filePartFinish(para); - } - - private void uploadFileBySharding(byte[] bytes, String filePath, String uploadId, String fileName, String partNumber) { - MultipartFile mfile = MultipartFileUtils.getMultipartFile(fileName, bytes); - try { - PartInitResultDTO partInitResultDTO = this.filePartManager.append(filePath, Integer.valueOf(partNumber), uploadId, mfile); - } - catch (Exception e) { - this.logger.error("分片更新文件错误{}:{}", (Object)e.getClass().getName(), (Object)e.getMessage()); - } - } +public class CommonAppExportExecuteTask extends AbstractImagStoreService { +private static final Logger log = LoggerFactory.getLogger(CommonAppExportExecuteTask.class); +@Autowired +private ICommonAppDownloadCenterService commonAppDownloadCenterService; +@Autowired +private CommonDownloadDataConfig commonDownloadDataConfig; +@Autowired +private ICommonStorageService commonAppStorageService; +@Autowired +private ImgStorePersonService imgStorePersonService; +@Autowired +private OrganizationService organizationService; +@Autowired +private LabelService labelService; +@Autowired +private ImgStorePersonPropertiesService imgStorePersonPropertiesService; +@Autowired +private ICommonAppFileManageService iCommonAppFileManageService; +@Autowired +private FilePartManager filePartManager; +@Autowired +private FileStorageManager fileStorageManager; +@Value("${cloudwalk.common-app.download.shardingSize}") +private Integer shardingSize; +String fileName = "人员信息"; +String orgFileName = "机构信息"; +String labelFileName = "标签信息"; +@Async +public void execute(ExportRecordTaskParam task, CloudwalkCallContext cloudwalkCallContext) { +this.logger.info("开始执行人员信息导出功能"); +QueryImgPersonParam queryImgPersonParam = new QueryImgPersonParam(); +BeanUtils.copyProperties(task, queryImgPersonParam); +try { +CloudwalkResult> recordList = getPersonData(queryImgPersonParam, cloudwalkCallContext); +if (CollectionUtils.isEmpty((Collection)recordList.getData())) { +this.logger.info("查询导出记录为空, businessId = {}, task = {}", task.getBusinessId(), task); +exportUpload(task.getBusinessId(), task.getFileId(), null); +return; +} +this.logger.info("导出记录总数为{}", Integer.valueOf(((List)recordList.getData()).size())); +Map> dataMap = new HashMap<>(); +dataMap.put(this.fileName, recordList.getData()); +PersonProListResult personProListResult = (PersonProListResult)this.imgStorePersonPropertiesService.getList(task.getBusinessId()).getData(); +List properties = personProListResult.getProperties(); +ImgPersonProGetResult result1 = new ImgPersonProGetResult(); +result1.setId("1"); +result1.setName("门禁设备(在线)"); +result1.setCode("onlineDevices"); +result1.setStatus(Integer.valueOf(0)); +result1.setType(Short.valueOf((short)1)); +result1.setOrderNum(Integer.valueOf(17)); +result1.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result2 = new ImgPersonProGetResult(); +result2.setId("2"); +result2.setName("门禁设备(离线)"); +result2.setCode("offlineDevices"); +result2.setStatus(Integer.valueOf(0)); +result2.setType(Short.valueOf((short)1)); +result2.setOrderNum(Integer.valueOf(18)); +result2.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result3 = new ImgPersonProGetResult(); +result3.setId("3"); +result3.setName("派梯楼层权限"); +result3.setCode("floorNames"); +result3.setStatus(Integer.valueOf(0)); +result3.setType(Short.valueOf((short)1)); +result3.setOrderNum(Integer.valueOf(19)); +result3.setHasDefault(Integer.valueOf(1)); +properties.add(result1); +properties.add(result2); +properties.add(result3); +this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); +this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows().intValue()); +this.commonDownloadDataConfig.setHasContainImage(task.getHasContainImage()); +Path zipPath = (new CommonAppExportFileHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult)).process(); +int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); +if (status > 1) { +this.logger.info("下载中心已取消下载文件,fileId = {}", task.getFileId()); +exportUpload(task.getBusinessId(), task.getFileId(), null); +return; +} +exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); +} +catch (Exception e) { +this.logger.error("导出人员任务失败:{}", e.getMessage()); +this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); +throw new RuntimeException("执行导出人员记录任务异常"); +} +} +@Async +public void executeOrg(ExportOrgTaskParam task, CloudwalkCallContext context) { +this.logger.info("开始执行机构信息导出功能"); +QueryOrganizationParam queryImgPersonParam = new QueryOrganizationParam(); +BeanUtils.copyProperties(task, queryImgPersonParam); +try { +CloudwalkResult> recordList = getOrgData(queryImgPersonParam, context); +if (CollectionUtils.isEmpty((Collection)recordList.getData())) { +this.logger.info("查询导出记录为空, businessId = {}, task = {}", task.getBusinessId(), task); +exportUpload(task.getBusinessId(), task.getFileId(), null); +return; +} +this.logger.info("导出记录总数为{}", Integer.valueOf(((List)recordList.getData()).size())); +Map> dataMap = new HashMap<>(); +dataMap.put(this.orgFileName, recordList.getData()); +PersonProListResult personProListResult = new PersonProListResult(); +List properties = new ArrayList<>(); +ImgPersonProGetResult result1 = new ImgPersonProGetResult(); +result1.setId("1"); +result1.setName("机构名称"); +result1.setCode("name"); +result1.setStatus(Integer.valueOf(0)); +result1.setType(Short.valueOf((short)1)); +result1.setOrderNum(Integer.valueOf(1)); +result1.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result2 = new ImgPersonProGetResult(); +result2.setId("2"); +result2.setName("机构id"); +result2.setCode("id"); +result2.setStatus(Integer.valueOf(0)); +result2.setType(Short.valueOf((short)1)); +result2.setOrderNum(Integer.valueOf(2)); +result2.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result3 = new ImgPersonProGetResult(); +result3.setId("3"); +result3.setName("机构类型"); +result3.setCode("type"); +result3.setStatus(Integer.valueOf(0)); +result3.setType(Short.valueOf((short)1)); +result3.setOrderNum(Integer.valueOf(3)); +result3.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result4 = new ImgPersonProGetResult(); +result4.setId("4"); +result4.setName("人员数量"); +result4.setCode("personCount"); +result4.setStatus(Integer.valueOf(0)); +result4.setType(Short.valueOf((short)1)); +result4.setOrderNum(Integer.valueOf(4)); +result4.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result5 = new ImgPersonProGetResult(); +result5.setId("5"); +result5.setName("状态:0-已启用"); +result5.setCode("isDel"); +result5.setStatus(Integer.valueOf(0)); +result5.setType(Short.valueOf((short)1)); +result5.setOrderNum(Integer.valueOf(5)); +result5.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result6 = new ImgPersonProGetResult(); +result6.setId("6"); +result6.setName("门禁设备(在线)"); +result6.setCode("onlineDevices"); +result6.setStatus(Integer.valueOf(0)); +result6.setType(Short.valueOf((short)1)); +result6.setOrderNum(Integer.valueOf(6)); +result6.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result7 = new ImgPersonProGetResult(); +result7.setId("7"); +result7.setName("门禁设备(离线)"); +result7.setCode("offlineDevices"); +result7.setStatus(Integer.valueOf(0)); +result7.setType(Short.valueOf((short)1)); +result7.setOrderNum(Integer.valueOf(7)); +result7.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result8 = new ImgPersonProGetResult(); +result8.setId("8"); +result8.setName("派梯楼层权限"); +result8.setCode("floorNames"); +result8.setStatus(Integer.valueOf(0)); +result8.setType(Short.valueOf((short)1)); +result8.setOrderNum(Integer.valueOf(8)); +result8.setHasDefault(Integer.valueOf(1)); +properties.add(result1); +properties.add(result2); +properties.add(result3); +properties.add(result4); +properties.add(result5); +properties.add(result6); +properties.add(result7); +properties.add(result8); +personProListResult.setProperties(properties); +this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); +this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows().intValue()); +Path zipPath = (new CommonAppExportFileByOrgHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult)).process(); +int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); +if (status > 1) { +this.logger.info("下载中心已取消下载文件,fileId = {}", task.getFileId()); +exportUpload(task.getBusinessId(), task.getFileId(), null); +return; +} +exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); +} +catch (Exception e) { +this.logger.error("导出机构任务失败:{}", e); +this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); +throw new RuntimeException("执行导出机构信息任务异常"); +} +} +@Async +public void executeLabel(ExportLabelTaskParam task, CloudwalkCallContext context) { +this.logger.info("开始执行标签信息导出功能"); +PageLabelParam pageLabelParam = new PageLabelParam(); +BeanUtils.copyProperties(task, pageLabelParam); +try { +CloudwalkResult> recordList = getLabelData(pageLabelParam, context); +if (CollectionUtils.isEmpty((Collection)recordList.getData())) { +this.logger.info("查询导出记录为空, businessId = {}, task = {}", task.getBusinessId(), task); +exportUpload(task.getBusinessId(), task.getFileId(), null); +return; +} +this.logger.info("导出记录总数为{}", Integer.valueOf(((List)recordList.getData()).size())); +Map> dataMap = new HashMap<>(); +dataMap.put(this.labelFileName, recordList.getData()); +PersonProListResult personProListResult = new PersonProListResult(); +List properties = new ArrayList<>(); +ImgPersonProGetResult result1 = new ImgPersonProGetResult(); +result1.setId("1"); +result1.setName("标签名称"); +result1.setCode("name"); +result1.setStatus(Integer.valueOf(0)); +result1.setType(Short.valueOf((short)1)); +result1.setOrderNum(Integer.valueOf(1)); +result1.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result2 = new ImgPersonProGetResult(); +result2.setId("2"); +result2.setName("标签id"); +result2.setCode("id"); +result2.setStatus(Integer.valueOf(0)); +result2.setType(Short.valueOf((short)1)); +result2.setOrderNum(Integer.valueOf(2)); +result2.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result3 = new ImgPersonProGetResult(); +result3.setId("3"); +result3.setName("标签编号"); +result3.setCode("code"); +result3.setStatus(Integer.valueOf(0)); +result3.setType(Short.valueOf((short)1)); +result3.setOrderNum(Integer.valueOf(3)); +result3.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result4 = new ImgPersonProGetResult(); +result4.setId("4"); +result4.setName("人员数量"); +result4.setCode("personCount"); +result4.setStatus(Integer.valueOf(0)); +result4.setType(Short.valueOf((short)1)); +result4.setOrderNum(Integer.valueOf(4)); +result4.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result5 = new ImgPersonProGetResult(); +result5.setId("5"); +result5.setName("标签类型:0-手动创建,1-应用初始,2-应用创建"); +result5.setCode("addType"); +result5.setStatus(Integer.valueOf(0)); +result5.setType(Short.valueOf((short)1)); +result5.setOrderNum(Integer.valueOf(5)); +result5.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result6 = new ImgPersonProGetResult(); +result6.setId("6"); +result6.setName("门禁设备(在线)"); +result6.setCode("onlineDevices"); +result6.setStatus(Integer.valueOf(0)); +result6.setType(Short.valueOf((short)1)); +result6.setOrderNum(Integer.valueOf(6)); +result6.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result7 = new ImgPersonProGetResult(); +result7.setId("7"); +result7.setName("门禁设备(离线)"); +result7.setCode("offlineDevices"); +result7.setStatus(Integer.valueOf(0)); +result7.setType(Short.valueOf((short)1)); +result7.setOrderNum(Integer.valueOf(7)); +result7.setHasDefault(Integer.valueOf(1)); +ImgPersonProGetResult result8 = new ImgPersonProGetResult(); +result8.setId("8"); +result8.setName("派梯楼层权限"); +result8.setCode("floorNames"); +result8.setStatus(Integer.valueOf(0)); +result8.setType(Short.valueOf((short)1)); +result8.setOrderNum(Integer.valueOf(8)); +result8.setHasDefault(Integer.valueOf(1)); +properties.add(result1); +properties.add(result2); +properties.add(result3); +properties.add(result4); +properties.add(result5); +properties.add(result6); +properties.add(result7); +properties.add(result8); +personProListResult.setProperties(properties); +this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); +this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows().intValue()); +Path zipPath = (new CommonAppExportFileByLabelHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult)).process(); +int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); +if (status > 1) { +this.logger.info("下载中心已取消下载文件,fileId = {}", task.getFileId()); +exportUpload(task.getBusinessId(), task.getFileId(), null); +return; +} +exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); +} +catch (Exception e) { +this.logger.error("导出标签任务失败:{}", e); +this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); +throw new RuntimeException("执行导出标签信息任务异常"); +} +} +private CloudwalkResult> getPersonData(QueryImgPersonParam queryImgPersonParam, CloudwalkCallContext cloudwalkCallContext) { +CloudwalkResult> recordList = new CloudwalkResult(); +try { +recordList = this.imgStorePersonService.listByPage(queryImgPersonParam, cloudwalkCallContext); +} catch (Exception e) { +this.logger.error("查询记录数据失败"); +} +return recordList; +} +private CloudwalkResult> getOrgData(QueryOrganizationParam param, CloudwalkCallContext context) { +CloudwalkResult> recordList = new CloudwalkResult(); +try { +recordList = this.organizationService.listByPage(param, context); +} catch (Exception e) { +this.logger.error("查询机构记录数据失败"); +} +return recordList; +} +private CloudwalkResult> getLabelData(PageLabelParam param, CloudwalkCallContext cloudwalkCallContext) { +CloudwalkResult> recordList = new CloudwalkResult(); +try { +recordList = this.labelService.listByPage(param, cloudwalkCallContext); +} catch (Exception e) { +this.logger.error("查询标签记录数据失败"); +} +return recordList; +} +private void exportUpload(String businessId, String fileId, String zipPathStr) throws IOException { +try { +if (StringUtils.isNotBlank(zipPathStr)) { +uploadFile(businessId, fileId, zipPathStr); +} else { +byte[] data = Base64Utils.decodeFromString("UEsDBBQACAgIAAuPmlAAAAAAAAAAAAAAAAAGAAAAZW1wdHkvAwBQSwcIAAAAAAIAAAAAAAAAUEsBAhQAFAAICAgAC4+aUAAAAAACAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAGVtcHR5L1BLBQYAAAAAAQABADQAAAA2AAAAAAA="); +uploadFile(businessId, fileId, data, data.length); +} +} catch (Exception e) { +this.logger.error("将导出文件生成的zip上传到文件管理中心发生异常:{}", e.getMessage()); +throw new RuntimeException("将导出文件生成的zip上传到文件管理中心发生异常"); +} finally { +this.logger.debug("删除压缩包:{}", zipPathStr); +File file = new File(zipPathStr); +if (file.exists()) { +Files.delete(file.toPath()); +} +} +} +private void uploadFile(String businessId, String fileId, byte[] data, long fileSize) { +String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); +String name = uuidCode + this.commonDownloadDataConfig.getCompressionType(); +String filePath = this.commonAppStorageService.saveFileBySharding(name, data); +this.logger.info("存储文件名:fileId = {}, filePath = {}", fileId, filePath); +int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); +if (status == FileStatusEnum.PRODUCING.getCode().intValue() || status == FileStatusEnum.ERROR.getCode().intValue()) { +this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); +} else { +this.commonAppStorageService.deleteFile(filePath); +} +} +private void uploadFile(String businessId, String fileId, String zipPathStr) throws IOException { +ChannelFileReader reader = new ChannelFileReader(zipPathStr, this.shardingSize.intValue()); +try { +String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); +String name = uuidCode + this.commonDownloadDataConfig.getCompressionType(); +FilePartInitResult resp = this.iCommonAppFileManageService.filePartInit(name); +if (resp == null) { +this.logger.info("分片上传文件初始化返回值为空"); +return; +} +AtomicInteger i = new AtomicInteger(1); +long fileSize = 0L; +while (reader.read() != -1) { +this.logger.info("分片上传第{}次", Integer.valueOf(i.get())); +fileSize += (reader.getArray()).length; +uploadFileBySharding(reader.getArray(), resp.getFilePath(), resp.getUploadId(), this.fileName, String.valueOf(i.getAndAdd(1))); +} +String filePath = filePartFinish(fileSize, resp); +if (filePath == null) { +this.logger.info("分片上传文件完成接口返回值为空"); +return; +} +this.logger.info("分片上传文件完成接口返回值 filePath = {}", filePath); +this.logger.info("存储文件名:fileId = {}, filePath = {}", fileId, filePath); +int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); +if (status == FileStatusEnum.PRODUCING.getCode().intValue() || status == FileStatusEnum.ERROR.getCode().intValue()) { +this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); +} else { +this.commonAppStorageService.deleteFile(filePath); +} +this.logger.info("完成上传任务 fileId = {}", fileId); +} catch (Exception e) { +this.logger.error("分片上传文件报错 {}: {}", e.getClass().getName(), e.getMessage()); +} finally { +reader.close(); +} +} +private String filePartFinish(long fileSize, FilePartInitResult resp) { +FilePartFinishPara para = new FilePartFinishPara(); +BeanUtils.copyProperties(resp, para); +para.setFileSize(Long.valueOf(fileSize)); +para.setReturnType(Integer.valueOf(0)); +return this.iCommonAppFileManageService.filePartFinish(para); +} +private void uploadFileBySharding(byte[] bytes, String filePath, String uploadId, String fileName, String partNumber) { +MultipartFile mfile = MultipartFileUtils.getMultipartFile(fileName, bytes); +try { +PartInitResultDTO partInitResultDTO = this.filePartManager.append(filePath, Integer.valueOf(partNumber), uploadId, mfile); +} catch (Exception e) { +this.logger.error("分片更新文件错误{}:{}", e.getClass().getName(), e.getMessage()); +} +} } + +/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.1.3 + */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonExRecordExcelCreater.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonExRecordExcelCreater.java index eba7b57b..ca763432 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonExRecordExcelCreater.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonExRecordExcelCreater.java @@ -1,21 +1,16 @@ package cn.cloudwalk.service.organization.export; -// 业务服务 import cn.cloudwalk.client.organization.common.enums.PropertyTypeEnum; import cn.cloudwalk.client.organization.personimg.result.ImgPersonProGetResult; import cn.cloudwalk.client.organization.personimg.result.ImgStorePersonGetResult; import cn.cloudwalk.client.organization.result.PersonProListResult; import cn.cloudwalk.intelligent.davinci.common.exception.DavinciServiceException; import cn.cloudwalk.intelligent.davinci.storage.manager.FileStorageManager; -import cn.cloudwalk.service.organization.export.CommonRecordExcelCreater; import java.io.File; -import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; -import java.nio.file.OpenOption; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.time.Instant; -import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -26,289 +21,247 @@ import org.apache.poi.xssf.usermodel.XSSFRow; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; - public class CommonExRecordExcelCreater -extends CommonRecordExcelCreater { - private static final Logger log = LoggerFactory.getLogger(CommonExRecordExcelCreater.class); - private short dateType; - private static final String IMAGE_SUFFIX = ".jpg"; - private Map personProMap = new HashMap(); - private FileStorageManager fileStorageManager; - - public CommonExRecordExcelCreater(List records, String filePath, int index, FileStorageManager fileStorageManager, PersonProListResult personProListResult, boolean hasContainImage) { - super(records, filePath, index); - this.fileStorageManager = fileStorageManager; - this.personProListResult = personProListResult; - this.hasContainImage = hasContainImage; - this.dateType = this.wb.getCreationHelper().createDataFormat().getFormat("yyy-mm-dd hh:mm:ss"); - } - - @Override - protected void createTitleRow() { - XSSFRow titleRow = this.sheet.createRow(2); - int columnNum = 0; - this.createHeadCell(titleRow, columnNum, "姓名"); - this.createHeadCell(titleRow, ++columnNum, "用户名"); - this.createHeadCell(titleRow, ++columnNum, "手机号"); - this.createHeadCell(titleRow, ++columnNum, "邮箱"); - this.createHeadCell(titleRow, ++columnNum, "工号"); - this.createHeadCell(titleRow, ++columnNum, "所属机构"); - this.createHeadCell(titleRow, ++columnNum, "所属标签"); - this.createHeadCell(titleRow, ++columnNum, "IC卡号"); - this.createHeadCell(titleRow, ++columnNum, "IC卡类型"); - this.createHeadCell(titleRow, ++columnNum, "识别照"); - this.createHeadCell(titleRow, ++columnNum, "欢迎语"); - this.createHeadCell(titleRow, ++columnNum, "展示照"); - this.createHeadCell(titleRow, ++columnNum, "门禁设备(在线)"); - this.createHeadCell(titleRow, ++columnNum, "门禁设备(离线)"); - this.createHeadCell(titleRow, ++columnNum, "派梯楼层权限"); - for (ImgPersonProGetResult imgPersonProGetResult : this.personProListResult.getProperties()) { - if (!imgPersonProGetResult.getCode().contains("ext")) continue; - this.createHeadCell(titleRow, ++columnNum, imgPersonProGetResult.getName()); - this.personProMap.put(columnNum, imgPersonProGetResult); - } - this.sheet.setColumnWidth(1, 5000); - this.sheet.setColumnWidth(3, 4000); - this.createInfoRow(columnNum); - } - - private void createInfoRow(int columnNum) { - XSSFRow row0 = this.sheet.createRow(0); - XSSFRow row1 = this.sheet.createRow(1); - this.createHeadCell(row0, 0, "default-人员批量导入模板"); - this.createHeadCell(row1, 0, "注:此表中的属性字段由用户在人员属性管理中配置按序生成"); - CellRangeAddress region0 = new CellRangeAddress(0, 0, 0, columnNum); - this.sheet.addMergedRegion(region0); - CellRangeAddress region1 = new CellRangeAddress(1, 1, 0, columnNum); - this.sheet.addMergedRegion(region1); - } - - @Override - protected void createBodyRows() { - if (CollectionUtils.isEmpty((Collection)this.records)) { - return; - } - long start = System.currentTimeMillis(); - for (int i = 0; i < this.records.size(); ++i) { - int rowNum = i + 3; - ImgStorePersonGetResult commonRecord = (ImgStorePersonGetResult)this.records.get(i); - XSSFRow row = this.sheet.createRow(rowNum); - row.setHeight((short)2000); - row.createCell(0).setCellValue(commonRecord.getName()); - row.createCell(1).setCellValue(commonRecord.getUserName()); - row.createCell(2).setCellValue(commonRecord.getPhone()); - row.createCell(3).setCellValue(commonRecord.getEmail()); - row.createCell(4).setCellValue(commonRecord.getPersonCode()); - row.createCell(5).setCellValue(StringUtils.join((Collection)commonRecord.getOrganizationNames(), (String)",")); - row.createCell(6).setCellValue(StringUtils.join((Collection)commonRecord.getLabelNames(), (String)",")); - row.createCell(7).setCellValue(commonRecord.getIcCardNo()); - row.createCell(8).setCellValue(commonRecord.getIcCardType()); - row.createCell(10).setCellValue(commonRecord.getWelcome()); - this.downloadImage(commonRecord.getComparePicture(), commonRecord.getName(), row, 9); - this.downloadImage(commonRecord.getShowPicture(), commonRecord.getName(), row, 11); - row.createCell(12).setCellValue(commonRecord.getOnlineDevices()); - row.createCell(13).setCellValue(commonRecord.getOfflineDevices()); - row.createCell(14).setCellValue(commonRecord.getFloorNames()); - if (CollectionUtils.isEmpty(this.personProMap)) continue; - for (Integer columnIndex : this.personProMap.keySet()) { - String getExt = ""; - switch (columnIndex - 11) { - case 1: { - getExt = commonRecord.getExt1(); - break; - } - case 2: { - getExt = commonRecord.getExt2(); - break; - } - case 3: { - getExt = commonRecord.getExt3(); - break; - } - case 4: { - getExt = commonRecord.getExt4(); - break; - } - case 5: { - getExt = commonRecord.getExt5(); - break; - } - case 6: { - getExt = commonRecord.getExt6(); - break; - } - case 7: { - getExt = commonRecord.getExt7(); - break; - } - case 8: { - getExt = commonRecord.getExt8(); - break; - } - case 9: { - getExt = commonRecord.getExt9(); - break; - } - case 10: { - getExt = commonRecord.getExt10(); - break; - } - case 11: { - getExt = commonRecord.getExt11(); - break; - } - case 12: { - getExt = commonRecord.getExt12(); - break; - } - case 13: { - getExt = commonRecord.getExt13(); - break; - } - case 14: { - getExt = commonRecord.getExt14(); - break; - } - case 15: { - getExt = commonRecord.getExt15(); - break; - } - case 16: { - getExt = commonRecord.getExt16(); - break; - } - case 17: { - getExt = commonRecord.getExt17(); - break; - } - case 18: { - getExt = commonRecord.getExt18(); - break; - } - case 19: { - getExt = commonRecord.getExt19(); - break; - } - case 20: { - getExt = commonRecord.getExt20(); - break; - } - case 21: { - getExt = commonRecord.getExt21(); - break; - } - case 22: { - getExt = commonRecord.getExt22(); - break; - } - case 23: { - getExt = commonRecord.getExt23(); - break; - } - case 24: { - getExt = commonRecord.getExt24(); - break; - } - case 25: { - getExt = commonRecord.getExt25(); - break; - } - case 26: { - getExt = commonRecord.getExt26(); - break; - } - case 27: { - getExt = commonRecord.getExt27(); - break; - } - case 28: { - getExt = commonRecord.getExt28(); - break; - } - case 29: { - getExt = commonRecord.getExt29(); - break; - } - case 30: { - getExt = commonRecord.getExt30(); - break; - } - case 31: { - getExt = commonRecord.getExt31(); - break; - } - case 32: { - getExt = commonRecord.getExt32(); - break; - } - case 33: { - getExt = commonRecord.getExt33(); - break; - } - case 34: { - getExt = commonRecord.getExt34(); - break; - } - case 35: { - getExt = commonRecord.getExt35(); - break; - } - case 36: { - getExt = commonRecord.getExt36(); - break; - } - case 37: { - getExt = commonRecord.getExt37(); - break; - } - case 38: { - getExt = commonRecord.getExt38(); - break; - } - case 39: { - getExt = commonRecord.getExt39(); - break; - } - case 40: { - getExt = commonRecord.getExt40(); - break; - } - } - if (this.personProMap.get(columnIndex).getType().shortValue() == PropertyTypeEnum.FILE.getValue()) { - this.downloadImage(getExt, commonRecord.getName(), row, columnIndex); - continue; - } - if (this.personProMap.get(columnIndex).getType().shortValue() == PropertyTypeEnum.TIME.getValue()) { - if (!StringUtils.isNotBlank((String)getExt)) continue; - Instant instant = Instant.ofEpochMilli(Long.valueOf(getExt)); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - row.createCell(columnIndex.intValue()).setCellValue(simpleDateFormat.format(Date.from(instant))); - continue; - } - row.createCell(columnIndex.intValue()).setCellValue(getExt); - } - } - long end = System.currentTimeMillis(); - this.logger.info("导出excel及图片总耗时:{}", (Object)(end - start)); - } - - private void downloadImage(String picturePath, String name, XSSFRow row, int columnIndex) { - if (!this.hasContainImage) { - return; - } - if (StringUtils.isNotBlank((String)picturePath)) { - String imageName = System.currentTimeMillis() + "_" + name + IMAGE_SUFFIX; - row.createCell(columnIndex).setCellValue(imageName); - try (OutputStream out = Files.newOutputStream(Paths.get(this.dirPath + File.separator + imageName, new String[0]), new OpenOption[0]);){ - byte[] downloadByte = this.fileStorageManager.fileDownload(picturePath); - if (null != downloadByte) { - out.write(downloadByte); - } - } - catch (DavinciServiceException | IOException e) { - this.logger.error("人员导出图片,执行报错 {}: {}", (Object)e.getClass().getName(), (Object)e.getMessage()); - } - } - } +extends CommonRecordExcelCreater +{ +private static final Logger log = LoggerFactory.getLogger(CommonExRecordExcelCreater.class); +private short dateType; +private static final String IMAGE_SUFFIX = ".jpg"; +private Map personProMap = new HashMap<>(); +private FileStorageManager fileStorageManager; +public CommonExRecordExcelCreater(List records, String filePath, int index, FileStorageManager fileStorageManager, PersonProListResult personProListResult, boolean hasContainImage) { +super((List)records, filePath, index); +this.fileStorageManager = fileStorageManager; +this.personProListResult = personProListResult; +this.hasContainImage = hasContainImage; +this.dateType = this.wb.getCreationHelper().createDataFormat().getFormat("yyy-mm-dd hh:mm:ss"); +} +protected void createTitleRow() { +XSSFRow titleRow = this.sheet.createRow(2); +int columnNum = 0; +createHeadCell(titleRow, columnNum, "姓名"); +createHeadCell(titleRow, ++columnNum, "用户名"); +createHeadCell(titleRow, ++columnNum, "手机号"); +createHeadCell(titleRow, ++columnNum, "邮箱"); +createHeadCell(titleRow, ++columnNum, "工号"); +createHeadCell(titleRow, ++columnNum, "所属机构"); +createHeadCell(titleRow, ++columnNum, "所属标签"); +createHeadCell(titleRow, ++columnNum, "IC卡号"); +createHeadCell(titleRow, ++columnNum, "IC卡类型"); +createHeadCell(titleRow, ++columnNum, "识别照"); +createHeadCell(titleRow, ++columnNum, "欢迎语"); +createHeadCell(titleRow, ++columnNum, "展示照"); +createHeadCell(titleRow, ++columnNum, "门禁设备(在线)"); +createHeadCell(titleRow, ++columnNum, "门禁设备(离线)"); +createHeadCell(titleRow, ++columnNum, "派梯楼层权限"); +for (ImgPersonProGetResult imgPersonProGetResult : this.personProListResult.getProperties()) { +if (imgPersonProGetResult.getCode().contains("ext")) { +createHeadCell(titleRow, ++columnNum, imgPersonProGetResult.getName()); +this.personProMap.put(Integer.valueOf(columnNum), imgPersonProGetResult); +} +} +this.sheet.setColumnWidth(1, 5000); +this.sheet.setColumnWidth(3, 4000); +createInfoRow(columnNum); +} +private void createInfoRow(int columnNum) { +XSSFRow row0 = this.sheet.createRow(0); +XSSFRow row1 = this.sheet.createRow(1); +createHeadCell(row0, 0, "default-人员批量导入模板"); +createHeadCell(row1, 0, "注:此表中的属性字段由用户在人员属性管理中配置按序生成"); +CellRangeAddress region0 = new CellRangeAddress(0, 0, 0, columnNum); +this.sheet.addMergedRegion(region0); +CellRangeAddress region1 = new CellRangeAddress(1, 1, 0, columnNum); +this.sheet.addMergedRegion(region1); +} +protected void createBodyRows() { +if (CollectionUtils.isEmpty(this.records)) { +return; +} +long start = System.currentTimeMillis(); +for (int i = 0; i < this.records.size(); i++) { +int rowNum = i + 3; +ImgStorePersonGetResult commonRecord = (ImgStorePersonGetResult)this.records.get(i); +XSSFRow row = this.sheet.createRow(rowNum); +row.setHeight((short)2000); +row.createCell(0).setCellValue(commonRecord.getName()); +row.createCell(1).setCellValue(commonRecord.getUserName()); +row.createCell(2).setCellValue(commonRecord.getPhone()); +row.createCell(3).setCellValue(commonRecord.getEmail()); +row.createCell(4).setCellValue(commonRecord.getPersonCode()); +row.createCell(5).setCellValue(StringUtils.join(commonRecord.getOrganizationNames(), ",")); +row.createCell(6).setCellValue(StringUtils.join(commonRecord.getLabelNames(), ",")); +row.createCell(7).setCellValue(commonRecord.getIcCardNo()); +row.createCell(8).setCellValue(commonRecord.getIcCardType()); +row.createCell(10).setCellValue(commonRecord.getWelcome()); +downloadImage(commonRecord.getComparePicture(), commonRecord.getName(), row, 9); +downloadImage(commonRecord.getShowPicture(), commonRecord.getName(), row, 11); +row.createCell(12).setCellValue(commonRecord.getOnlineDevices()); +row.createCell(13).setCellValue(commonRecord.getOfflineDevices()); +row.createCell(14).setCellValue(commonRecord.getFloorNames()); +if (!CollectionUtils.isEmpty(this.personProMap)) { +for (Integer columnIndex : this.personProMap.keySet()) { +String getExt = ""; +switch (columnIndex.intValue() - 11) { +case 1: +getExt = commonRecord.getExt1(); +break; +case 2: +getExt = commonRecord.getExt2(); +break; +case 3: +getExt = commonRecord.getExt3(); +break; +case 4: +getExt = commonRecord.getExt4(); +break; +case 5: +getExt = commonRecord.getExt5(); +break; +case 6: +getExt = commonRecord.getExt6(); +break; +case 7: +getExt = commonRecord.getExt7(); +break; +case 8: +getExt = commonRecord.getExt8(); +break; +case 9: +getExt = commonRecord.getExt9(); +break; +case 10: +getExt = commonRecord.getExt10(); +break; +case 11: +getExt = commonRecord.getExt11(); +break; +case 12: +getExt = commonRecord.getExt12(); +break; +case 13: +getExt = commonRecord.getExt13(); +break; +case 14: +getExt = commonRecord.getExt14(); +break; +case 15: +getExt = commonRecord.getExt15(); +break; +case 16: +getExt = commonRecord.getExt16(); +break; +case 17: +getExt = commonRecord.getExt17(); +break; +case 18: +getExt = commonRecord.getExt18(); +break; +case 19: +getExt = commonRecord.getExt19(); +break; +case 20: +getExt = commonRecord.getExt20(); +break; +case 21: +getExt = commonRecord.getExt21(); +break; +case 22: +getExt = commonRecord.getExt22(); +break; +case 23: +getExt = commonRecord.getExt23(); +break; +case 24: +getExt = commonRecord.getExt24(); +break; +case 25: +getExt = commonRecord.getExt25(); +break; +case 26: +getExt = commonRecord.getExt26(); +break; +case 27: +getExt = commonRecord.getExt27(); +break; +case 28: +getExt = commonRecord.getExt28(); +break; +case 29: +getExt = commonRecord.getExt29(); +break; +case 30: +getExt = commonRecord.getExt30(); +break; +case 31: +getExt = commonRecord.getExt31(); +break; +case 32: +getExt = commonRecord.getExt32(); +break; +case 33: +getExt = commonRecord.getExt33(); +break; +case 34: +getExt = commonRecord.getExt34(); +break; +case 35: +getExt = commonRecord.getExt35(); +break; +case 36: +getExt = commonRecord.getExt36(); +break; +case 37: +getExt = commonRecord.getExt37(); +break; +case 38: +getExt = commonRecord.getExt38(); +break; +case 39: +getExt = commonRecord.getExt39(); +break; +case 40: +getExt = commonRecord.getExt40(); +break; +} +if (((ImgPersonProGetResult)this.personProMap.get(columnIndex)).getType().shortValue() == PropertyTypeEnum.FILE.getValue()) { +downloadImage(getExt, commonRecord.getName(), row, columnIndex.intValue()); continue; +} if (((ImgPersonProGetResult)this.personProMap.get(columnIndex)).getType().shortValue() == PropertyTypeEnum.TIME.getValue()) { +if (StringUtils.isNotBlank(getExt)) { +Instant instant = Instant.ofEpochMilli(Long.valueOf(getExt).longValue()); +SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +row.createCell(columnIndex.intValue()).setCellValue(simpleDateFormat.format(Date.from(instant))); +} continue; +} +row.createCell(columnIndex.intValue()).setCellValue(getExt); +} +} +} +long end = System.currentTimeMillis(); +this.logger.info("导出excel及图片总耗时:{}", Long.valueOf(end - start)); +} +private void downloadImage(String picturePath, String name, XSSFRow row, int columnIndex) { +if (!this.hasContainImage) { +return; +} +if (StringUtils.isNotBlank(picturePath)) { +String imageName = System.currentTimeMillis() + "_" + name + ".jpg"; +row.createCell(columnIndex).setCellValue(imageName); +try (OutputStream out = Files.newOutputStream( +Paths.get(this.dirPath + File.separator + imageName, new String[0]), new java.nio.file.OpenOption[0])) { +byte[] downloadByte = this.fileStorageManager.fileDownload(picturePath); +if (null != downloadByte) { +out.write(downloadByte); +} +} catch (DavinciServiceException|java.io.IOException e) { +this.logger.error("人员导出图片,执行报错 {}: {}", e.getClass().getName(), e.getMessage()); +} +} +} } + +/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/export/CommonExRecordExcelCreater.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.1.3 + */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/listener/ComponentOrganizationEventListener.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/listener/ComponentOrganizationEventListener.java index 1c4d6853..87b839df 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/listener/ComponentOrganizationEventListener.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/listener/ComponentOrganizationEventListener.java @@ -1,5 +1,4 @@ package cn.cloudwalk.service.organization.listener; -// 业务服务 import cn.cloudwalk.cloud.utils.ApplicationContextUtils; import cn.cloudwalk.cwos.client.event.event.BaseEvent; import cn.cloudwalk.cwos.client.event.event.DeviceGroupRefChangeEvent; @@ -13,31 +12,35 @@ import cn.cloudwalk.service.organization.service.PictureResultEventHandler; import cn.cloudwalk.service.organization.service.corp.handler.EnterpriseChangeHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - public class ComponentOrganizationEventListener -implements EventListener { - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - - public void messageListener(BaseEvent baseEvent) throws RuntimeException { - if (baseEvent instanceof PersonCardCompareEvent) { - PersonCardCompareEvent personCardCompareEvent = (PersonCardCompareEvent)baseEvent; - this.logger.debug("receive personCardCompareEvent kafka message {}", (Object)personCardCompareEvent); - ((PersonCardCompareEventHandler)ApplicationContextUtils.getBean(PersonCardCompareEventHandler.class)).handler(personCardCompareEvent); - } else if (baseEvent instanceof PictureResultEvent) { - PictureResultEvent pictureResultEvent = (PictureResultEvent)baseEvent; - this.logger.debug("receive pictureResultEvent kafka message {}", (Object)pictureResultEvent); - ((PictureResultEventHandler)ApplicationContextUtils.getBean(PictureResultEventHandler.class)).handler(pictureResultEvent); - } else if (baseEvent instanceof DeviceGroupRefChangeEvent) { - DeviceGroupRefChangeEvent deviceGroupRefChangeEvent = (DeviceGroupRefChangeEvent)baseEvent; - this.logger.debug("receive deviceGroupRefChangeEvent kafka message {}", (Object)deviceGroupRefChangeEvent); - ((DeviceGroupRefChangeEventHandler)ApplicationContextUtils.getBean(DeviceGroupRefChangeEventHandler.class)).handler(deviceGroupRefChangeEvent); - } else if (baseEvent instanceof EnterpriseChangeEvent) { - EnterpriseChangeEvent enterpriseChangeEvent = (EnterpriseChangeEvent)baseEvent; - this.logger.debug("receive enterpriseChangeEvent kafka message {}", (Object)enterpriseChangeEvent); - ((EnterpriseChangeHandler)ApplicationContextUtils.getBean(EnterpriseChangeHandler.class)).handler(enterpriseChangeEvent); - } else { - this.logger.info("不能识别的baseEvent:{}", (Object)baseEvent); - } - } +implements EventListener +{ +protected final Logger logger = LoggerFactory.getLogger(getClass()); +public void messageListener(BaseEvent baseEvent) throws RuntimeException { +if (baseEvent instanceof PersonCardCompareEvent) { +PersonCardCompareEvent personCardCompareEvent = (PersonCardCompareEvent)baseEvent; +this.logger.debug("receive personCardCompareEvent kafka message {}", personCardCompareEvent); +((PersonCardCompareEventHandler)ApplicationContextUtils.getBean(PersonCardCompareEventHandler.class)).handler(personCardCompareEvent); +} else if (baseEvent instanceof PictureResultEvent) { +PictureResultEvent pictureResultEvent = (PictureResultEvent)baseEvent; +this.logger.debug("receive pictureResultEvent kafka message {}", pictureResultEvent); +((PictureResultEventHandler)ApplicationContextUtils.getBean(PictureResultEventHandler.class)).handler(pictureResultEvent); +} else if (baseEvent instanceof DeviceGroupRefChangeEvent) { +DeviceGroupRefChangeEvent deviceGroupRefChangeEvent = (DeviceGroupRefChangeEvent)baseEvent; +this.logger.debug("receive deviceGroupRefChangeEvent kafka message {}", deviceGroupRefChangeEvent); +((DeviceGroupRefChangeEventHandler)ApplicationContextUtils.getBean(DeviceGroupRefChangeEventHandler.class)).handler(deviceGroupRefChangeEvent); +} else if (baseEvent instanceof EnterpriseChangeEvent) { +EnterpriseChangeEvent enterpriseChangeEvent = (EnterpriseChangeEvent)baseEvent; +this.logger.debug("receive enterpriseChangeEvent kafka message {}", enterpriseChangeEvent); +((EnterpriseChangeHandler)ApplicationContextUtils.getBean(EnterpriseChangeHandler.class)).handler(enterpriseChangeEvent); +} else { +this.logger.info("不能识别的baseEvent:{}", baseEvent); +} +} } + +/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/listener/ComponentOrganizationEventListener.class + * Java compiler version: 8 (52.0) + * JD-Core Version: 1.1.3 + */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java index a994f9ee..6788a80d 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java @@ -1,5 +1,5 @@ package cn.cloudwalk.service.organization.schedule; -// 业务服务 +// 调度服务 import cn.cloudwalk.client.organization.batch.service.ImgPersonBatchService; import cn.cloudwalk.client.organization.common.exception.ImageStoreException; import cn.cloudwalk.client.organization.param.QueryZoneForm; @@ -13,6 +13,8 @@ import cn.cloudwalk.cloud.utils.CloudwalkDateUtils; import cn.cloudwalk.data.organization.dto.GetsLabelDTO; import cn.cloudwalk.data.organization.entity.BatchImport; import cn.cloudwalk.data.organization.entity.ImgStorePersonProperties; +import cn.cloudwalk.data.organization.entity.Label; +import cn.cloudwalk.data.organization.entity.Organization; import cn.cloudwalk.data.organization.mapper.ImgStoreLabelMapper; import cn.cloudwalk.data.organization.mapper.ImgStoreOrganizationMapper; import cn.cloudwalk.data.organization.mapper.ImgStorePersonPropertiesMapper; @@ -21,7 +23,6 @@ import cn.cloudwalk.service.organization.common.ExcelUtils; import cn.cloudwalk.service.organization.common.FileUtil; import cn.cloudwalk.service.organization.common.PathUtils; import cn.cloudwalk.service.organization.common.ZipUtil; -import cn.cloudwalk.service.organization.schedule.BatchImportContext; import cn.cloudwalk.service.organization.service.feign.ZoneFeignClient; import cn.cloudwalk.task.sdk.starter.job.AbstractJob; import com.alibaba.fastjson.JSON; @@ -35,16 +36,15 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.Semaphore; import javax.annotation.Resource; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -61,455 +61,406 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; - @DisallowConcurrentExecution public class PersonBatchImportTask -extends AbstractJob { - private static final Logger logger = LoggerFactory.getLogger(PersonBatchImportTask.class); - @Autowired - private PersonBatchImportMapper personBatchImportMapper; - @Autowired - private MessageSource messageSource; - @Autowired - @Qualifier(value="personImportExecutor") - private ThreadPoolTaskExecutor taskExecutor; - @Autowired - private PersonFileService personFileService; - @Value(value="${cloudwalk.person.import.filePath:/data/cwos/file/temp}") - private String tempPath; - @Value(value="${cloudwalk.person.import.batch.size: 1000}") - private Integer batchSize; - @Autowired - private CloudwalkSessionContextHolder sessionContextHolder; - @Autowired - private ImgStorePersonPropertiesMapper propertiesMapper; - @Autowired - private ImgStoreOrganizationMapper organizationMapper; - @Autowired - private ImgStoreLabelMapper labelMapper; - @Resource - private ZoneFeignClient zoneFeignClient; - private static final int BATCH_WIDTH = 3; - private static final Semaphore BATCH_SEMAPHORE = new Semaphore(3, true); - @Autowired - private ImgPersonBatchService imgPersonBatchService; - - private void process(BatchImportContext processContext) throws ImageStoreException, InterruptedException { - List excelFiles = processContext.getExcelFiles(); - for (File excel : excelFiles) { - this.readExcelFile2DB(excel, processContext); - } - while (BATCH_SEMAPHORE.availablePermits() != 3) { - Thread.sleep(1000L); - } - } - - private void readExcelFile2DB(File excelFile, BatchImportContext context) throws ImageStoreException { - List allOrg = this.organizationMapper.getAllOrg(context.getBatchImport().getBusinessId()); - context.setOrgMap(allOrg); - GetsLabelDTO getsLabelDTO = new GetsLabelDTO(); - getsLabelDTO.setBusinessId(context.getBatchImport().getBusinessId()); - List allLabels = this.labelMapper.getAllLabels(getsLabelDTO); - context.setLabelMap(allLabels); - QueryZoneForm queryZoneForm = new QueryZoneForm(); - queryZoneForm.setBusinessId(context.getBatchImport().getBusinessId()); - CloudwalkResult> zoneDetail = this.zoneFeignClient.findZonelist(queryZoneForm); - logger.info("当前楼层信息Task{}", (Object)JSON.toJSONString(zoneDetail)); - if ("00000000".equals(zoneDetail.getCode())) { - List data = (List)zoneDetail.getData(); - context.setZoneMap(data); - } - try (FileInputStream inputStream = new FileInputStream(excelFile); - Workbook workbook = WorkbookFactory.create((InputStream)inputStream);){ - Sheet sheet = workbook.getSheetAt(0); - Row titleRow = sheet.getRow(2); - int endIndex = titleRow.getLastCellNum(); - HashMap nameIndexMap = new HashMap(); - for (int i = 0; i < endIndex; ++i) { - Cell cell = titleRow.getCell(i); - String value = cell.getStringCellValue(); - if (value.contains("(")) { - value = value.split("(")[0]; - } - nameIndexMap.put(i, value); - } - context.setNameIndexMap(nameIndexMap); - ArrayList> batchRecordList = new ArrayList>(this.batchSize); - int totalCount = 0; - for (Row row : sheet) { - if (row.getRowNum() <= 2) continue; - ArrayList rowData = new ArrayList(); - boolean isEmptyRow = true; - for (int c = 0; c < endIndex; ++c) { - String cellStr; - Cell cell = row.getCell(c); - if (cell == null) { - cellStr = null; - } else { - cellStr = ExcelUtils.getCellStringValue(cell); - if (StringUtils.isNotBlank((CharSequence)cellStr)) { - isEmptyRow = false; - } - } - rowData.add(c, cellStr); - } - if (isEmptyRow) continue; - batchRecordList.add(rowData); - ++totalCount; - if (batchRecordList.size() != this.batchSize.intValue()) continue; - this.parallelBatchAdd(batchRecordList, context, excelFile.getParent()); - batchRecordList = new ArrayList(this.batchSize); - } - if (totalCount == 0) { - throw new ImageStoreException("53014040", this.getMessage("53014040")); - } - this.parallelBatchAdd(batchRecordList, context, excelFile.getParent()); - } - catch (IOException | InvalidFormatException e) { - logger.error("", e); - throw new ImageStoreException("53014036", this.getMessage("53014036")); - } - } - - private void parallelBatchAdd(final List> batchRecordList, final BatchImportContext context, final String filePath) { - try { - BATCH_SEMAPHORE.acquire(); - logger.info("person import task concurrent number :{}", (Object)(3 - BATCH_SEMAPHORE.availablePermits())); - } - catch (InterruptedException e) { - logger.error("", e); - Thread.currentThread().interrupt(); - } - this.taskExecutor.submit(new Runnable(){ - - @Override - public void run() { - try { - PersonBatchImportTask.this.imgPersonBatchService.handlerBatchPersonImport(batchRecordList, (Object)context, filePath); - BatchImport batchImport = context.getBatchImport(); - BatchImport updateObj = new BatchImport(); - updateObj.setId(batchImport.getId()); - updateObj.setCurrentCount(Long.valueOf(context.getFailCount().get() + context.getSuccessCount().get())); - PersonBatchImportTask.this.personBatchImportMapper.updateById(updateObj); - } - catch (Exception e) { - logger.error("", e); - } - finally { - BATCH_SEMAPHORE.release(); - } - } - }); - } - - private void cleanFiles(BatchImportContext context) { - try { - FileUtils.deleteDirectory((File)context.getUnzipFolder()); - this.personFileService.delete((List)Lists.newArrayList((Object[])new String[]{context.getBatchImport().getFilePath()})); - FileUtils.deleteQuietly((File)new File(this.tempPath, context.getBatchImport().getBatchNo() + ".zip")); - } - catch (Exception ex) { - logger.error("", ex); - } - } - - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - BatchImport batchImportRecord = null; - BatchImportContext batchImportContext = new BatchImportContext(); - String remark = null; - try { - logger.info("start handler import batch, query wait import task"); - batchImportRecord = this.getBatchImportQueryResult(); - batchImportContext.setBatchImport(batchImportRecord); - if (batchImportRecord == null) { - logger.info("start handler import batch, query wait import is empty"); - return; - } - logger.info("start handler import batch ,batchInfo:[{}]", (Object)JSONObject.toJSONString((Object)batchImportRecord)); - this.updateBatchImportRecord(ImportStatus.PROCESSING, "", batchImportRecord.getId(), 0L); - long unzipStartTime = System.currentTimeMillis(); - this.unzipFile(batchImportContext); - long unzipSpendTime = System.currentTimeMillis() - unzipStartTime; - this.checkFileExists(batchImportContext); - long startCalculateTime = System.currentTimeMillis(); - batchImportContext.setTotalCount(this.calculateRecordSize(batchImportContext)); - this.updateBatchImportRecord(batchImportContext.getTotalCount(), batchImportRecord.getId()); - long calculateSpendTime = System.currentTimeMillis() - startCalculateTime; - ImgStorePersonProperties condition = new ImgStorePersonProperties(); - condition.setBusinessId(batchImportContext.getBatchImport().getBusinessId()); - List personProperties = this.propertiesMapper.select(condition); - logger.debug("personProperties:[{}]", (Object)JSONObject.toJSONString((Object)personProperties)); - batchImportContext.setNameCodeMap(personProperties); - this.process(batchImportContext); - long cleanStartTime = System.currentTimeMillis(); - this.cleanFiles(batchImportContext); - long cleanSpendTime = System.currentTimeMillis() - cleanStartTime; - long processSpendTime = System.currentTimeMillis() - unzipStartTime; - remark = String.format("导入完成,导入成功[%s]条,失败[%s]条,总耗时[%s],解压耗时[%s], 统计总数耗时[%s],图片复制耗时[%s],数据插入耗时[%s], 清理文件耗时[%s]", batchImportContext.getSuccessCount(), batchImportContext.getFailCount(), PersonBatchImportTask.convertTime(processSpendTime), PersonBatchImportTask.convertTime(unzipSpendTime), PersonBatchImportTask.convertTime(calculateSpendTime), PersonBatchImportTask.convertTime(batchImportContext.getImageCopyTime().get() / (long)this.taskExecutor.getMaxPoolSize()), PersonBatchImportTask.convertTime(batchImportContext.getInsertTime().get() / (long)this.taskExecutor.getMaxPoolSize()), PersonBatchImportTask.convertTime(cleanSpendTime)); - BatchImport batchImport = this.personBatchImportMapper.selectById(batchImportRecord.getId()); - this.updateBatchImportRecord(ImportStatus.COMPLETE, remark, batchImportRecord.getId(), batchImport.getTotalCount()); - } - catch (ImageStoreException ex) { - if (batchImportRecord != null) { - remark = ex.getMessage(); - this.updateBatchImportRecord(ImportStatus.EXCEPTION, remark, batchImportRecord.getId(), null); - } - } - catch (InterruptedException e) { - if (batchImportRecord != null) { - this.updateBatchImportRecord(ImportStatus.EXCEPTION, "导入任务异常终止", batchImportRecord.getId(), null); - } - Thread.currentThread().interrupt(); - } - } - - private long calculateRecordSize(BatchImportContext context) { - List fileList = context.getExcelFiles(); - long totalCount = 0L; - for (File file : fileList) { - try { - FileInputStream inputStream = new FileInputStream(file); - Throwable throwable = null; - try { - Workbook workbook = WorkbookFactory.create((InputStream)inputStream); - Throwable throwable2 = null; - try { - Sheet sheet = workbook.getSheetAt(0); - totalCount += (long)(sheet.getPhysicalNumberOfRows() - 3); - } - catch (Throwable throwable3) { - throwable2 = throwable3; - throw throwable3; - } - finally { - if (workbook == null) continue; - if (throwable2 != null) { - try { - workbook.close(); - } - catch (Throwable throwable4) { - throwable2.addSuppressed(throwable4); - } - continue; - } - workbook.close(); - } - } - catch (Throwable throwable5) { - throwable = throwable5; - throw throwable5; - } - finally { - if (inputStream == null) continue; - if (throwable != null) { - try { - inputStream.close(); - } - catch (Throwable throwable6) { - throwable.addSuppressed(throwable6); - } - continue; - } - inputStream.close(); - } - } - catch (IOException | InvalidFormatException e) { - logger.warn("当前文件统计总记录数异常,文件名:{},文件路径:{}", (Object)file.getName(), (Object)file.getPath()); - } - } - return totalCount; - } - - private void checkFileExists(BatchImportContext context) throws ImageStoreException { - List fileList = null; - fileList = FileUtil.findExpecteFormatdFile(".+(\\.xls|\\.xlsx)$", context.getUnzipFolder(), null); - if (fileList.isEmpty()) { - throw new ImageStoreException("53014039", this.getMessage("53014039")); - } - context.setExcelFiles(fileList); - } - - private void unzipFile(BatchImportContext context) throws ImageStoreException { - File tempDir = new File(this.tempPath); - if (!tempDir.exists()) { - tempDir.mkdirs(); - } - File file = new File(this.tempPath, context.getBatchImport().getBatchNo() + ".zip"); - logger.info("download to local. sourcePath:[{}], localPath:[{}]", (Object)context.getBatchImport().getFilePath(), (Object)file.getAbsolutePath()); - CloudwalkResult downloadResult = this.personFileService.download(context.getBatchImport().getFilePath()); - if (!downloadResult.isSuccess()) { - throw new ImageStoreException(downloadResult.getCode(), downloadResult.getMessage()); - } - try (InputStream inputStream = (InputStream)downloadResult.getData();){ - FileUtils.copyInputStreamToFile((InputStream)inputStream, (File)file); - } - catch (Exception e) { - logger.error("download file from storage component exception", e); - throw new ImageStoreException("53014037", this.getMessage("53014037")); - } - if (!file.exists()) { - throw new ImageStoreException("53014037", this.getMessage("53014037")); - } - try { - File unzipFolder; - if (this.checkUnzip()) { - String line; - String unzipPath = PathUtils.joinPaths(this.tempPath, "temp", CloudwalkDateUtils.getUUID()); - unzipFolder = new File(unzipPath); - unzipFolder.mkdirs(); - logger.info("解压前文件路径:{},解压后文件路径:{},编码方式:{}", new Object[]{file.getPath(), unzipFolder.getPath(), "utf-8"}); - String commandLine = String.format("unzip -q -O %s %s -d %s", "GBK", file.getPath(), unzipFolder.getPath()); - ProcessBuilder processBuilder = new ProcessBuilder("/bin/sh", "-c", commandLine); - processBuilder.redirectErrorStream(true); - Process process = processBuilder.start(); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - while ((line = reader.readLine()) != null) { - logger.info(line); - } - int result = process.waitFor(); - if (result == 1 || result == 2) { - logger.warn("---unzip 进程退出码:{}", (Object)result); - } - if (result != 0 && result != 1 && result != 2) { - throw new ImageStoreException("53014038", this.getMessage("53014038")); - } - } else { - try { - unzipFolder = ZipUtil.unzipFile(file, "UTF-8"); - } - catch (IllegalArgumentException e) { - unzipFolder = ZipUtil.unzipFile(file, "GBK"); - } - } - context.setUnzipFolder(unzipFolder); - } - catch (Exception ex) { - logger.error(ex.getMessage(), ex); - throw new ImageStoreException("53014038", this.getMessage("53014038")); - } - } - - private boolean checkUnzip() { - try { - int length; - Process process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "unzip -help"}); - process.waitFor(); - InputStream inputStream = process.getInputStream(); - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - while ((length = inputStream.read(buffer)) != -1) { - byteArrayOutputStream.write(buffer, 0, length); - } - String outputResult = byteArrayOutputStream.toString("UTF-8"); - try { - inputStream.close(); - byteArrayOutputStream.close(); - } - catch (IOException ignored) { - logger.error("exception:{}", (Object)ignored.getMessage()); - } - if (outputResult.contains("-O")) { - logger.info("支持unzip解压,使用unzip进行解压"); - return true; - } - logger.warn("不支持unzip解压,请升级至最新unzip"); - } - catch (IOException | InterruptedException e) { - logger.error(e.getMessage()); - Thread.currentThread().interrupt(); - } - return false; - } - - private synchronized BatchImport getBatchImportQueryResult() { - Long fromTime = System.currentTimeMillis() - 86400000L; - List query = this.personBatchImportMapper.selectImportTask(fromTime); - BatchImport pendingImport = null; - if (CollectionUtils.isNotEmpty((Collection)query)) { - for (BatchImport q : query) { - if (ImportStatus.from((Integer)q.getStatus()) == ImportStatus.NONE && pendingImport == null) { - pendingImport = q; - continue; - } - if (ImportStatus.from((Integer)q.getStatus()) != ImportStatus.PROCESSING) continue; - q.setStatus(ImportStatus.EXCEPTION.value()); - q.setRemark(this.getMessage("53014036")); - this.personBatchImportMapper.updateById(q); - } - } - if (pendingImport == null) { - return null; - } - return (BatchImport)BeanCopyUtils.copyProperties(pendingImport, BatchImport.class); - } - - private static String convertTime(long executeTime) { - long ms = 1000L; - long minute = 60L * ms; - long hour = 60L * minute; - long day = 24L * hour; - long days = executeTime / day; - long hours = executeTime % day / hour; - long minutes = executeTime % hour / minute; - long seconds = executeTime % minute / ms; - long milliSeconds = executeTime % ms; - StringBuilder builder = new StringBuilder(); - if (days != 0L) { - builder.append(days).append("天"); - } - if (hours != 0L) { - builder.append(hours).append("小时"); - } - if (minutes != 0L) { - builder.append(minutes).append("分"); - } - if (seconds != 0L) { - builder.append(seconds).append("秒"); - } - if (builder.length() < 1) { - builder.append(milliSeconds).append("毫秒"); - } - return builder.toString(); - } - - private void updateBatchImportRecord(ImportStatus status, String remark, String id, Long currentCount) { - try { - logger.info("设置当前任务[{}]状态为[{}]", (Object)id, (Object)status); - BatchImport bi = new BatchImport(); - bi.setId(id); - bi.setStatus(status.value()); - bi.setCurrentCount(currentCount); - if (status == ImportStatus.COMPLETE || status == ImportStatus.EXCEPTION) { - bi.setFinishTime(Long.valueOf(System.currentTimeMillis())); - } - bi.setRemark(StringUtils.left((String)remark, (int)255)); - this.personBatchImportMapper.updateById(bi); - } - catch (Exception ex) { - logger.error("", ex); - } - } - - private void updateBatchImportRecord(Long totalCount, String id) { - try { - BatchImport bi = new BatchImport(); - bi.setId(id); - bi.setTotalCount(totalCount); - this.personBatchImportMapper.updateById(bi); - } - catch (Exception ex) { - logger.error("", ex); - } - } - - private String getMessage(String code) { - try { - return this.messageSource.getMessage(code, null, LocaleContextHolder.getLocale()); - } - catch (Exception ex) { - logger.warn("", ex); - return code; - } - } +extends AbstractJob +{ +private static final Logger logger = LoggerFactory.getLogger(PersonBatchImportTask.class); +@Autowired +private PersonBatchImportMapper personBatchImportMapper; +@Autowired +private MessageSource messageSource; +@Autowired +@Qualifier("personImportExecutor") +private ThreadPoolTaskExecutor taskExecutor; +@Autowired +private PersonFileService personFileService; +@Value("${cloudwalk.person.import.filePath:/data/cwos/file/temp}") +private String tempPath; +@Value("${cloudwalk.person.import.batch.size: 1000}") +private Integer batchSize; +@Autowired +private CloudwalkSessionContextHolder sessionContextHolder; +@Autowired +private ImgStorePersonPropertiesMapper propertiesMapper; +@Autowired +private ImgStoreOrganizationMapper organizationMapper; +@Autowired +private ImgStoreLabelMapper labelMapper; +@Resource +private ZoneFeignClient zoneFeignClient; +private static final int BATCH_WIDTH = 3; +private static final Semaphore BATCH_SEMAPHORE = new Semaphore(3, true); +@Autowired +private ImgPersonBatchService imgPersonBatchService; +private void process(BatchImportContext processContext) throws ImageStoreException, InterruptedException { +List excelFiles = processContext.getExcelFiles(); +for (File excel : excelFiles) { +readExcelFile2DB(excel, processContext); +} +while (BATCH_SEMAPHORE.availablePermits() != 3) +{ +Thread.sleep(1000L); +} +} +private void readExcelFile2DB(File excelFile, BatchImportContext context) throws ImageStoreException { +List allOrg = this.organizationMapper.getAllOrg(context.getBatchImport().getBusinessId()); +context.setOrgMap(allOrg); +GetsLabelDTO getsLabelDTO = new GetsLabelDTO(); +getsLabelDTO.setBusinessId(context.getBatchImport().getBusinessId()); +List