Commit 515f43ee authored by litengwei's avatar litengwei

Merge remote-tracking branch 'origin/develop_dl' into develop_dl

parents ef9c427d 2a0167a4
<component name="libraryTable">
<library name="Maven: cn.afterturn:easypoi-annotation:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-annotation/3.0.3/easypoi-annotation-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-annotation/3.0.3/easypoi-annotation-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-annotation/3.0.3/easypoi-annotation-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: cn.afterturn:easypoi-base:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-base/3.0.3/easypoi-base-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-base/3.0.3/easypoi-base-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-base/3.0.3/easypoi-base-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: cn.afterturn:easypoi-web:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-web/3.0.3/easypoi-web-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-web/3.0.3/easypoi-web-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/cn/afterturn/easypoi-web/3.0.3/easypoi-web-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.adobe.xmp:xmpcore:5.1.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/adobe/xmp/xmpcore/5.1.2/xmpcore-5.1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/adobe/xmp/xmpcore/5.1.2/xmpcore-5.1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/adobe/xmp/xmpcore/5.1.2/xmpcore-5.1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.beust:jcommander:1.48">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.48/jcommander-1.48.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.48/jcommander-1.48-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.48/jcommander-1.48-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.drewnoakes:metadata-extractor:2.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/drewnoakes/metadata-extractor/2.8.1/metadata-extractor-2.8.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/drewnoakes/metadata-extractor/2.8.1/metadata-extractor-2.8.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/drewnoakes/metadata-extractor/2.8.1/metadata-extractor-2.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.jai-imageio:jai-imageio-core:1.3.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/jai-imageio/jai-imageio-core/1.3.1/jai-imageio-core-1.3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/github/jai-imageio/jai-imageio-core/1.3.1/jai-imageio-core-1.3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/jai-imageio/jai-imageio-core/1.3.1/jai-imageio-core-1.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.jsqlparser:jsqlparser:2.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/jsqlparser/jsqlparser/2.1/jsqlparser-2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/github/jsqlparser/jsqlparser/2.1/jsqlparser-2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/jsqlparser/jsqlparser/2.1/jsqlparser-2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.junrar:junrar:0.7">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/junrar/junrar/0.7/junrar-0.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/github/junrar/junrar/0.7/junrar-0.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/junrar/junrar/0.7/junrar-0.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.tobato:fastdfs-client:1.26.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/tobato/fastdfs-client/1.26.6/fastdfs-client-1.26.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/github/tobato/fastdfs-client/1.26.6/fastdfs-client-1.26.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/tobato/fastdfs-client/1.26.6/fastdfs-client-1.26.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.virtuald:curvesapi:1.04">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/virtuald/curvesapi/1.04/curvesapi-1.04.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/github/virtuald/curvesapi/1.04/curvesapi-1.04-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/github/virtuald/curvesapi/1.04/curvesapi-1.04-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.zxing:javase:3.3.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/zxing/javase/3.3.0/javase-3.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/google/zxing/javase/3.3.0/javase-3.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/zxing/javase/3.3.0/javase-3.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.googlecode.json-simple:json-simple:1.1.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.googlecode.juniversalchardet:juniversalchardet:1.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.googlecode.mp4parser:isoparser:1.1.18">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/mp4parser/isoparser/1.1.18/isoparser-1.1.18.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/mp4parser/isoparser/1.1.18/isoparser-1.1.18-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/mp4parser/isoparser/1.1.18/isoparser-1.1.18-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.healthmarketscience.jackcess:jackcess:2.1.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/healthmarketscience/jackcess/jackcess/2.1.3/jackcess-2.1.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/healthmarketscience/jackcess/jackcess/2.1.3/jackcess-2.1.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/healthmarketscience/jackcess/jackcess/2.1.3/jackcess-2.1.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.healthmarketscience.jackcess:jackcess-encrypt:2.1.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/healthmarketscience/jackcess/jackcess-encrypt/2.1.1/jackcess-encrypt-2.1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/healthmarketscience/jackcess/jackcess-encrypt/2.1.1/jackcess-encrypt-2.1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/healthmarketscience/jackcess/jackcess-encrypt/2.1.1/jackcess-encrypt-2.1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.itextpdf:itextpdf:5.5.9">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/itextpdf/itextpdf/5.5.9/itextpdf-5.5.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/itextpdf/itextpdf/5.5.9/itextpdf-5.5.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/itextpdf/itextpdf/5.5.9/itextpdf-5.5.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.itextpdf.tool:xmlworker:5.5.9">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/itextpdf/tool/xmlworker/5.5.9/xmlworker-5.5.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/itextpdf/tool/xmlworker/5.5.9/xmlworker-5.5.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/itextpdf/tool/xmlworker/5.5.9/xmlworker-5.5.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.mchange:mchange-commons-java:0.2.15">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/mchange/mchange-commons-java/0.2.15/mchange-commons-java-0.2.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/mchange/mchange-commons-java/0.2.15/mchange-commons-java-0.2.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/mchange/mchange-commons-java/0.2.15/mchange-commons-java-0.2.15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.pff:java-libpst:0.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/pff/java-libpst/0.8.1/java-libpst-0.8.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/pff/java-libpst/0.8.1/java-libpst-0.8.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/pff/java-libpst/0.8.1/java-libpst-0.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.rometools:rome:1.5.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/rometools/rome/1.5.1/rome-1.5.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/rometools/rome/1.5.1/rome-1.5.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/rometools/rome/1.5.1/rome-1.5.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.rometools:rome-utils:1.5.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/rometools/rome-utils/1.5.1/rome-utils-1.5.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/rometools/rome-utils/1.5.1/rome-utils-1.5.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/rometools/rome-utils/1.5.1/rome-utils-1.5.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.thedeanda:lorem:2.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/thedeanda/lorem/2.1/lorem-2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/thedeanda/lorem/2.1/lorem-2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/thedeanda/lorem/2.1/lorem-2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.yeejoin:amos-component-feign:1.1.0-SNAPSHOT">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/yeejoin/amos-component-feign/1.1.0-SNAPSHOT/amos-component-feign-1.1.0-20200619.022144-19.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/yeejoin/amos-component-feign/1.1.0-SNAPSHOT/amos-component-feign-1.1.0-20200619.022144-19-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/yeejoin/amos-component-feign/1.1.0-SNAPSHOT/amos-component-feign-1.1.0-20200619.022144-19-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-beanutils:commons-beanutils:1.9.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-io:commons-io:2.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.4/commons-io-2.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.4/commons-io-2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.4/commons-io-2.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-logging:commons-logging-api:1.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: de.l3s.boilerpipe:boilerpipe:1.1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/de/l3s/boilerpipe/boilerpipe/1.1.0/boilerpipe-1.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/de/l3s/boilerpipe/boilerpipe/1.1.0/boilerpipe-1.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/de/l3s/boilerpipe/boilerpipe/1.1.0/boilerpipe-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: edu.ucar:cdm:4.5.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/cdm/4.5.5/cdm-4.5.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/cdm/4.5.5/cdm-4.5.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/cdm/4.5.5/cdm-4.5.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: edu.ucar:grib:4.5.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/grib/4.5.5/grib-4.5.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/grib/4.5.5/grib-4.5.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/grib/4.5.5/grib-4.5.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: edu.ucar:httpservices:4.5.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/httpservices/4.5.5/httpservices-4.5.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/httpservices/4.5.5/httpservices-4.5.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/httpservices/4.5.5/httpservices-4.5.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: edu.ucar:jj2000:5.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/jj2000/5.2/jj2000-5.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/jj2000/5.2/jj2000-5.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/jj2000/5.2/jj2000-5.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: edu.ucar:netcdf4:4.5.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/netcdf4/4.5.5/netcdf4-4.5.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/netcdf4/4.5.5/netcdf4-4.5.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/netcdf4/4.5.5/netcdf4-4.5.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: edu.ucar:udunits:4.5.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/udunits/4.5.5/udunits-4.5.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/udunits/4.5.5/udunits-4.5.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/edu/ucar/udunits/4.5.5/udunits-4.5.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.annotation:javax.annotation-api:1.3.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.measure:jsr-275:0.9.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/measure/jsr-275/0.9.3/jsr-275-0.9.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/measure/jsr-275/0.9.3/jsr-275-0.9.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/measure/jsr-275/0.9.3/jsr-275-0.9.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.ws.rs:javax.ws.rs-api:2.0.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/ws/rs/javax.ws.rs-api/2.0.1/javax.ws.rs-api-2.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.arnx:wmf2svg:0.9.8">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/arnx/wmf2svg/0.9.8/wmf2svg-0.9.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/arnx/wmf2svg/0.9.8/wmf2svg-0.9.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/arnx/wmf2svg/0.9.8/wmf2svg-0.9.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.coobird:thumbnailator:0.4.8">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/coobird/thumbnailator/0.4.8/thumbnailator-0.4.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/coobird/thumbnailator/0.4.8/thumbnailator-0.4.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/coobird/thumbnailator/0.4.8/thumbnailator-0.4.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.engio:mbassador:1.2.4.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/engio/mbassador/1.2.4.2/mbassador-1.2.4.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/engio/mbassador/1.2.4.2/mbassador-1.2.4.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/engio/mbassador/1.2.4.2/mbassador-1.2.4.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.jcip:jcip-annotations:1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.ehcache:ehcache-core:2.6.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/sf/ehcache/ehcache-core/2.6.2/ehcache-core-2.6.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/sf/ehcache/ehcache-core/2.6.2/ehcache-core-2.6.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/sf/ehcache/ehcache-core/2.6.2/ehcache-core-2.6.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.jwordnet:jwnl:1.3.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/sf/jwordnet/jwnl/1.3.3/jwnl-1.3.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/sf/jwordnet/jwnl/1.3.3/jwnl-1.3.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/sf/jwordnet/jwnl/1.3.3/jwnl-1.3.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sourceforge.jmatio:jmatio:1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/sourceforge/jmatio/jmatio/1.0/jmatio-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/sourceforge/jmatio/jmatio/1.0/jmatio-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/sourceforge/jmatio/jmatio/1.0/jmatio-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.antlr:antlr-runtime:3.5.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.avalon.framework:avalon-framework-api:4.3.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/avalon/framework/avalon-framework-api/4.3.1/avalon-framework-api-4.3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/avalon/framework/avalon-framework-api/4.3.1/avalon-framework-api-4.3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/avalon/framework/avalon-framework-api/4.3.1/avalon-framework-api-4.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.avalon.framework:avalon-framework-impl:4.3.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/avalon/framework/avalon-framework-impl/4.3.1/avalon-framework-impl-4.3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/avalon/framework/avalon-framework-impl/4.3.1/avalon-framework-impl-4.3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/avalon/framework/avalon-framework-impl/4.3.1/avalon-framework-impl-4.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-collections4:4.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.1/commons-collections4-4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-csv:1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-csv/1.0/commons-csv-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-csv/1.0/commons-csv-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-csv/1.0/commons-csv-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-exec:1.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-exec/1.3/commons-exec-1.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-exec/1.3/commons-exec-1.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-exec/1.3/commons-exec-1.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-vfs2:2.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-vfs2/2.0/commons-vfs2-2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-vfs2/2.0/commons-vfs2-2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-vfs2/2.0/commons-vfs2-2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.cxf:cxf-core:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-core/3.0.3/cxf-core-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-core/3.0.3/cxf-core-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-core/3.0.3/cxf-core-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.cxf:cxf-rt-frontend-jaxrs:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-frontend-jaxrs/3.0.3/cxf-rt-frontend-jaxrs-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-frontend-jaxrs/3.0.3/cxf-rt-frontend-jaxrs-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-frontend-jaxrs/3.0.3/cxf-rt-frontend-jaxrs-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.cxf:cxf-rt-rs-client:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-rs-client/3.0.3/cxf-rt-rs-client-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-rs-client/3.0.3/cxf-rt-rs-client-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-rs-client/3.0.3/cxf-rt-rs-client-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.cxf:cxf-rt-transports-http:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-transports-http/3.0.3/cxf-rt-transports-http-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-transports-http/3.0.3/cxf-rt-transports-http-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/cxf/cxf-rt-transports-http/3.0.3/cxf-rt-transports-http-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.james:apache-mime4j-core:0.7.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/james/apache-mime4j-core/0.7.2/apache-mime4j-core-0.7.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/james/apache-mime4j-core/0.7.2/apache-mime4j-core-0.7.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/james/apache-mime4j-core/0.7.2/apache-mime4j-core-0.7.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.james:apache-mime4j-dom:0.7.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/james/apache-mime4j-dom/0.7.2/apache-mime4j-dom-0.7.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/james/apache-mime4j-dom/0.7.2/apache-mime4j-dom-0.7.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/james/apache-mime4j-dom/0.7.2/apache-mime4j-dom-0.7.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.maven.scm:maven-scm-api:1.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-api/1.4/maven-scm-api-1.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-api/1.4/maven-scm-api-1.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-api/1.4/maven-scm-api-1.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.maven.scm:maven-scm-provider-svn-commons:1.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-provider-svn-commons/1.4/maven-scm-provider-svn-commons-1.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-provider-svn-commons/1.4/maven-scm-provider-svn-commons-1.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-provider-svn-commons/1.4/maven-scm-provider-svn-commons-1.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.maven.scm:maven-scm-provider-svnexe:1.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-provider-svnexe/1.4/maven-scm-provider-svnexe-1.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-provider-svnexe/1.4/maven-scm-provider-svnexe-1.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/maven/scm/maven-scm-provider-svnexe/1.4/maven-scm-provider-svnexe-1.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.opennlp:opennlp-maxent:3.0.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/opennlp/opennlp-maxent/3.0.3/opennlp-maxent-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/opennlp/opennlp-maxent/3.0.3/opennlp-maxent-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/opennlp/opennlp-maxent/3.0.3/opennlp-maxent-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.opennlp:opennlp-tools:1.5.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/opennlp/opennlp-tools/1.5.3/opennlp-tools-1.5.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/opennlp/opennlp-tools/1.5.3/opennlp-tools-1.5.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/opennlp/opennlp-tools/1.5.3/opennlp-tools-1.5.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.pdfbox:jempbox:1.8.12">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/pdfbox/jempbox/1.8.12/jempbox-1.8.12.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/pdfbox/jempbox/1.8.12/jempbox-1.8.12-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/pdfbox/jempbox/1.8.12/jempbox-1.8.12-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi:3.15">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/3.15/poi-3.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/3.15/poi-3.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi/3.15/poi-3.15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi-ooxml:3.15">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml/3.15/poi-ooxml-3.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml/3.15/poi-ooxml-3.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-ooxml/3.15/poi-ooxml-3.15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi-scratchpad:3.15">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-scratchpad/3.15/poi-scratchpad-3.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-scratchpad/3.15/poi-scratchpad-3.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/poi/poi-scratchpad/3.15/poi-scratchpad-3.15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.sis.core:sis-metadata:0.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-metadata/0.6/sis-metadata-0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-metadata/0.6/sis-metadata-0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-metadata/0.6/sis-metadata-0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.sis.core:sis-referencing:0.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-referencing/0.6/sis-referencing-0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-referencing/0.6/sis-referencing-0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-referencing/0.6/sis-referencing-0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.sis.core:sis-utility:0.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-utility/0.6/sis-utility-0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-utility/0.6/sis-utility-0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/core/sis-utility/0.6/sis-utility-0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.sis.storage:sis-netcdf:0.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/storage/sis-netcdf/0.6/sis-netcdf-0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/storage/sis-netcdf/0.6/sis-netcdf-0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/storage/sis-netcdf/0.6/sis-netcdf-0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.sis.storage:sis-storage:0.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/storage/sis-storage/0.6/sis-storage-0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/storage/sis-storage/0.6/sis-storage-0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/sis/storage/sis-storage/0.6/sis-storage-0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.tika:tika-core:1.13">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tika/tika-core/1.13/tika-core-1.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tika/tika-core/1.13/tika-core-1.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tika/tika-core/1.13/tika-core-1.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.tika:tika-parsers:1.13">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tika/tika-parsers/1.13/tika-parsers-1.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tika/tika-parsers/1.13/tika-parsers-1.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/tika/tika-parsers/1.13/tika-parsers-1.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.ws.xmlschema:xmlschema-core:2.1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/ws/xmlschema/xmlschema-core/2.1.0/xmlschema-core-2.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/ws/xmlschema/xmlschema-core/2.1.0/xmlschema-core-2.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/ws/xmlschema/xmlschema-core/2.1.0/xmlschema-core-2.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.xmlbeans:xmlbeans:2.3.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:2.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xmlgraphics/xmlgraphics-commons/2.3/xmlgraphics-commons-2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xmlgraphics/xmlgraphics-commons/2.3/xmlgraphics-commons-2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/xmlgraphics/xmlgraphics-commons/2.3/xmlgraphics-commons-2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.assertj:assertj-core:3.11.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.11.1/assertj-core-3.11.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.11.1/assertj-core-3.11.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/assertj/assertj-core/3.11.1/assertj-core-3.11.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.bouncycastle:bcmail-jdk15on:1.54">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcmail-jdk15on/1.54/bcmail-jdk15on-1.54.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcmail-jdk15on/1.54/bcmail-jdk15on-1.54-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcmail-jdk15on/1.54/bcmail-jdk15on-1.54-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.bouncycastle:bcpkix-jdk15on:1.54">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcpkix-jdk15on/1.54/bcpkix-jdk15on-1.54.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcpkix-jdk15on/1.54/bcpkix-jdk15on-1.54-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcpkix-jdk15on/1.54/bcpkix-jdk15on-1.54-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.bouncycastle:bcprov-jdk15on:1.54">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/bouncycastle/bcprov-jdk15on/1.54/bcprov-jdk15on-1.54-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.ccil.cowan.tagsoup:tagsoup:1.2.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/ccil/cowan/tagsoup/tagsoup/1.2.1/tagsoup-1.2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/ccil/cowan/tagsoup/tagsoup/1.2.1/tagsoup-1.2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/ccil/cowan/tagsoup/tagsoup/1.2.1/tagsoup-1.2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.woodstox:woodstox-core-asl:4.4.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/woodstox/woodstox-core-asl/4.4.1/woodstox-core-asl-4.4.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/woodstox/woodstox-core-asl/4.4.1/woodstox-core-asl-4.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/codehaus/woodstox/woodstox-core-asl/4.4.1/woodstox-core-asl-4.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codelibs:jhighlight:1.0.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/codelibs/jhighlight/1.0.2/jhighlight-1.0.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/codelibs/jhighlight/1.0.2/jhighlight-1.0.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/codelibs/jhighlight/1.0.2/jhighlight-1.0.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.docx4j:docx4j:6.0.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/docx4j/6.0.0/docx4j-6.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/docx4j/6.0.0/docx4j-6.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/docx4j/6.0.0/docx4j-6.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.docx4j:docx4j-ImportXHTML:6.0.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/docx4j-ImportXHTML/6.0.0/docx4j-ImportXHTML-6.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/docx4j-ImportXHTML/6.0.0/docx4j-ImportXHTML-6.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/docx4j-ImportXHTML/6.0.0/docx4j-ImportXHTML-6.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.docx4j:xhtmlrenderer:3.0.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/xhtmlrenderer/3.0.0/xhtmlrenderer-3.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/xhtmlrenderer/3.0.0/xhtmlrenderer-3.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/docx4j/xhtmlrenderer/3.0.0/xhtmlrenderer-3.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.gagravarr:vorbis-java-core:0.8">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/gagravarr/vorbis-java-core/0.8/vorbis-java-core-0.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/gagravarr/vorbis-java-core/0.8/vorbis-java-core-0.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/gagravarr/vorbis-java-core/0.8/vorbis-java-core-0.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.gagravarr:vorbis-java-tika:0.8">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/gagravarr/vorbis-java-tika/0.8/vorbis-java-tika-0.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/gagravarr/vorbis-java-tika/0.8/vorbis-java-tika-0.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/gagravarr/vorbis-java-tika/0.8/vorbis-java-tika-0.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.itadaki:bzip2:0.9.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/itadaki/bzip2/0.9.1/bzip2-0.9.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/itadaki/bzip2/0.9.1/bzip2-0.9.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/itadaki/bzip2/0.9.1/bzip2-0.9.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.jdom:jdom2:2.0.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/jdom/jdom2/2.0.6/jdom2-2.0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/jdom/jdom2/2.0.6/jdom2-2.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.json:json:20140107">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/json/json/20140107/json-20140107.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/json/json/20140107/json-20140107-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/json/json/20140107/json-20140107-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mybatis:mybatis-spring:2.0.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/2.0.2/mybatis-spring-2.0.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/2.0.2/mybatis-spring-2.0.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/mybatis/mybatis-spring/2.0.2/mybatis-spring-2.0.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.opengis:geoapi:3.0.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/opengis/geoapi/3.0.0/geoapi-3.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/opengis/geoapi/3.0.0/geoapi-3.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/opengis/geoapi/3.0.0/geoapi-3.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.plutext:jaxb-svg11:1.0.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/plutext/jaxb-svg11/1.0.2/jaxb-svg11-1.0.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/plutext/jaxb-svg11/1.0.2/jaxb-svg11-1.0.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/plutext/jaxb-svg11/1.0.2/jaxb-svg11-1.0.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.tukaani:xz:1.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/tukaani/xz/1.5/xz-1.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/tukaani/xz/1.5/xz-1.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/tukaani/xz/1.5/xz-1.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.typroject:tyboot-component-cache:1.1.20Ty-SNAPSHOT">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/typroject/tyboot-component-cache/1.1.20Ty-SNAPSHOT/tyboot-component-cache-1.1.20Ty-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/typroject/tyboot-component-cache/1.1.20Ty-SNAPSHOT/tyboot-component-cache-1.1.20Ty-SNAPSHOT-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/typroject/tyboot-component-cache/1.1.20Ty-SNAPSHOT/tyboot-component-cache-1.1.20Ty-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: regexp:regexp:1.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/regexp/regexp/1.3/regexp-1.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/regexp/regexp/1.3/regexp-1.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/regexp/regexp/1.3/regexp-1.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: xalan:serializer:2.7.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/xalan/serializer/2.7.2/serializer-2.7.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/xalan/serializer/2.7.2/serializer-2.7.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/xalan/serializer/2.7.2/serializer-2.7.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: xalan:xalan:2.7.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/xalan/xalan/2.7.2/xalan-2.7.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/xalan/xalan/2.7.2/xalan-2.7.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/xalan/xalan/2.7.2/xalan-2.7.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/amos-boot-biz-common/amos-boot-biz-common.iml" filepath="$PROJECT_DIR$/amos-boot-biz-common/amos-boot-biz-common.iml" />
<module fileurl="file://$PROJECT_DIR$/amos-boot-module/amos-boot-module-api/amos-boot-module-jcs-api/amos-boot-module-jcs-api.iml" filepath="$PROJECT_DIR$/amos-boot-module/amos-boot-module-api/amos-boot-module-jcs-api/amos-boot-module-jcs-api.iml" />
<module fileurl="file://$PROJECT_DIR$/amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/amos-boot-module-jcs-biz.iml" filepath="$PROJECT_DIR$/amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/amos-boot-module-jcs-biz.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="SonarLintModuleSettings">
<option name="uniqueId" value="7a05731a-6025-4af2-9526-300ce965342a" />
</component>
</module>
\ No newline at end of file
......@@ -53,6 +53,11 @@ public class RedisKey {
*/
public static final String EQUIP_INDEX_ADDRESS_KEY = "equip_index_address_key";
/**
* 韶山换流站指标Key
*/
public static final String EQUIP_INDEX_ADDRESS_KEY_STATION = "equip_index_address_key_station";
/** 驼峰转下划线(简单写法,效率低于 ) */
public static String humpToLine(String str) {
return str.replaceAll("[A-Z]", "_$0").toLowerCase();
......
......@@ -91,6 +91,9 @@
#{item}
</foreach>
</if>
<if test="map.personStatus != null and map.personStatus != ''">
AND u.person_status = #{map.personStatus}
</if>
GROUP BY
u.sequence_nbr ,
u.biz_org_name ,
......
......@@ -241,4 +241,8 @@ public class EquipmentSpecificAlarmLog extends BaseEntity {
@ApiModelProperty(value = "站编码")
@TableField(value = "station_code")
private String stationCode;
@ApiModelProperty(value = "批量确认")
@TableField(exist = false)
private String handleConfirm;
}
......@@ -75,6 +75,9 @@ public class EquipmentIndexVO {
@ApiModelProperty(value = "信号的索引键key,用于唯一索引信号")
private String indexAddress;
@ApiModelProperty(value = "信号的索引键pointId,用于唯一索引信号")
private String eventAddress;
@ApiModelProperty(value = "测点类型,analog/state")
private String dataType;
......
package com.yeejoin.equipmanage.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author keyong
* @title: HandleBatchConfirmEnum
* <pre>
* @description: TODO
* </pre>
* @date 2023/9/12 10:59
*/
@AllArgsConstructor
@Getter
public enum HandleBatchConfirmEnum {
SINGLE("isSingle", "当前一个设备"), ALL("isAll", "全部设备");
private String code;
private String name;
}
package com.yeejoin.equipmanage.common.enums;
/**
* @author LiuLin
* @date 2023年08月02日 11:02
*/
public interface MqttConstant {
String TRUE = "true";
String FALSE = "false";
String STATE = "state";
String DIS_CREATE = "discreate";
String ONE_1 = "1";
String ONE_1_0 = "1.0";
}
......@@ -3,7 +3,7 @@ package com.yeejoin.equipmanage.common.utils;
import java.util.List;
public class CommonPageInfoParam extends CommonPageable {
/**
* id
*/
......@@ -12,27 +12,27 @@ public class CommonPageInfoParam extends CommonPageable {
* 名称
*/
private String name;
/**
* 装备类型
*/
private String equipType;
/**
* 编号
*/
private String code;
/**
* 生产区域
*/
private String productArea;
/**
* 保护对象
*/
private String protectObj;
/**
* 装备分类
*/
......@@ -41,17 +41,17 @@ public class CommonPageInfoParam extends CommonPageable {
* 开始时间
*/
private String beginDate;
/**
* 结束时间
*/
private String endDate;
/**
* 评价模型id
*/
private Long evalModelId;
/**
* 风险点ID
*/
......@@ -123,6 +123,10 @@ public class CommonPageInfoParam extends CommonPageable {
* 所属建筑ids
*/
private List<String> buildIds;
/**
* 所属建筑名称
*/
private String buildingName;
private String status;
......@@ -261,8 +265,8 @@ public class CommonPageInfoParam extends CommonPageable {
public String getBizOrgCode() {
return bizOrgCode;
}
public String getProductArea() {
return productArea;
......@@ -405,4 +409,12 @@ public class CommonPageInfoParam extends CommonPageable {
public void setBuildIds(List<String> buildIds) {
this.buildIds = buildIds;
}
public String getBuildingName() {
return buildingName;
}
public void setBuildingName(String buildingName) {
this.buildingName = buildingName;
}
}
......@@ -76,29 +76,31 @@ public class CommonPageParamUtil {
param.setIndexTypeCode(toString(queryRequests.get(i).getValue()));
} else if ("alarmLogId".equals(name)) {
param.setAlarmLogId(toLong(queryRequests.get(i).getValue()));
} else if ("buildingName".equals(name)) {
param.setBuildingName(toString(queryRequests.get(i).getValue()));
}
}
if(commonPageable !=null){
param.setPageNumber(commonPageable.getPageNumber());
param.setPageSize(commonPageable.getPageSize());
param.setPageSize(commonPageable.getPageSize());
}
return param;
}
private static String toString(Object value) {
if(null ==value || value =="" || "null".equals(value.toString()) || "''".equals(value.toString())){
return null;
}else{
return value.toString();
}
}
}
private static Long toLong(Object value) {
if(null ==value || value ==""){
return null;
}else{
return Long.parseLong(value.toString());
}
}
}
......
package com.yeejoin.equipmanage.common.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* @author LiuLin
* @date 2023年08月02日 11:02
*/
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class SShanMessage {
private String eventTextL1;
private String pointId;
private String time;
private String deviceId;
}
package com.yeejoin.equipmanage.common.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.List;
/**
* @author LiuLin
* @date 2023年08月02日 11:02
*/
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class SShanStationMessage {
private String timestamp;
private List<SShanMessage> warns;
}
package com.yeejoin.equipmanage.common.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* 对接苏州,绍兴换流站Kafka数据
* @author LiuLin
* @date 2023年08月02日 11:02
*/
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class StationMessage {
private String dataType;
private String value;
private String timeStamp;
private String quality;
private String scadaId;
private String key;
private String disCreate;
private String name;
}
......@@ -8,9 +8,6 @@ import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.constants.CommonConstant;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.interceptors.PermissionInterceptorContext;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.core.framework.PersonIdentify;
import com.yeejoin.amos.boot.module.common.api.dto.*;
......@@ -26,7 +23,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
......@@ -43,7 +39,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author fengwang
......
......@@ -33,6 +33,7 @@ public class EquipmentIndexCacheRunner implements CommandLineRunner {
log.info(">>服务启动执行,执行预加载数据等操作");
redisUtils.del(RedisKey.EQUIP_INDEX_ADDRESS);
redisUtils.del(RedisKey.EQUIP_INDEX_ADDRESS_KEY);
redisUtils.del(RedisKey.EQUIP_INDEX_ADDRESS_KEY_STATION);
List<EquipmentIndexVO> equipSpecificIndexList = equipmentSpecificIndexMapper.getEquipSpecificIndexList(null);
Map<String, Object> equipmentIndexVOMap = equipSpecificIndexList.stream()
.filter(v -> v.getGatewayId() != null)
......@@ -40,8 +41,12 @@ public class EquipmentIndexCacheRunner implements CommandLineRunner {
Map<String, Object> equipmentIndexKeyMap = equipSpecificIndexList.stream()
.filter(v -> v.getIndexAddress() != null && v.getGatewayId() == null)
.collect(Collectors.toMap(EquipmentIndexVO::getIndexAddress, Function.identity(),(v1, v2) -> v1));
Map<String, Object> equipmentIndexEventMap = equipSpecificIndexList.stream()
.filter(v -> v.getEventAddress() != null)
.collect(Collectors.toMap(EquipmentIndexVO::getEventAddress, Function.identity(),(v1, v2) -> v1));
redisUtils.hmset(RedisKey.EQUIP_INDEX_ADDRESS, equipmentIndexVOMap);
redisUtils.hmset(RedisKey.EQUIP_INDEX_ADDRESS_KEY, equipmentIndexKeyMap);
redisUtils.hmset(RedisKey.EQUIP_INDEX_ADDRESS_KEY_STATION, equipmentIndexEventMap);
}
}
\ No newline at end of file
......@@ -135,6 +135,7 @@ public class EquipmentIotMqttReceiveConfig {
list.add("+/+/perspective"); // 添加交换站事件监听
list.add(riskMsgCenterEquipTopic);
list.add(riskMsgCenterPatrolTopic);
list.add("+/+/shaoshan"); // 添加换流站韶山监听事件
String[] arr = list.toArray(new String[list.size()]);
adapter = new MqttPahoMessageDrivenChannelAdapter(clientId + "_inbound", mqttPahoClientFactory(), arr);
adapter.setCompletionTimeout(completionTimeout);
......@@ -158,8 +159,10 @@ public class EquipmentIotMqttReceiveConfig {
mqttReceiveService.handlerMqttIncrementMessage(topic, msg);
} else if (dataType.equals("event") && StringUtil.isNotEmpty(msg)) {
mqttEventReceiveService.handlerMqttIncrementMessage(topic, msg);
} else if (dataType.equals("transmit") && StringUtil.isNotEmpty(msg)) {
mqttReceiveService.handlerMqttRomaMessage(topic, msg);
}else if (dataType.equals("transmit") && StringUtil.isNotEmpty(msg)){
mqttReceiveService.handlerMqttRomaMessage(topic,msg);
}else if (dataType.equals("shaoshan") && StringUtil.isNotEmpty(msg)){
mqttReceiveService.handlerMqttStationMessage(topic,msg);
}
}
};
......
......@@ -25,10 +25,8 @@ import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author keyong
......@@ -98,6 +96,7 @@ public class EquipmentAlarmController extends AbstractBaseController {
@RequestParam(value = "id", required = false) String id,
@RequestParam(value = "cleanStatus", required = false) String cleanStatus,
@RequestParam(value = "isRemoveShield", required = false) String isRemoveShield,
@RequestParam(value = "buildingName", required = false) String buildingName,
CommonPageable commonPageable) {
if (commonPageable.getPageNumber() == 0) {
commonPageable.setPageNumber(1);
......@@ -106,11 +105,17 @@ public class EquipmentAlarmController extends AbstractBaseController {
List<CommonRequest> queryRequests = new ArrayList<>();
CommonRequest request = new CommonRequest();
request.setName("beginDate");
request.setValue(StringUtil.isNotEmpty(beginDate) ? StringUtils.trimToNull(beginDate).substring(0, 10) + " 00:00:00" : null);
request.setValue(beginDate);
if (StringUtil.isNotEmpty(beginDate) && StringUtils.trimToNull(beginDate).length() == 10) {
request.setValue(StringUtils.trimToNull(beginDate).substring(0, 10) + " 00:00:00");
}
queryRequests.add(request);
CommonRequest request1 = new CommonRequest();
request1.setName("endDate");
request1.setValue(StringUtil.isNotEmpty(endDate) ? StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59" : null);
request1.setValue(endDate);
if (StringUtil.isNotEmpty(endDate) && StringUtils.trimToNull(endDate).length() == 10) {
request1.setValue(StringUtils.trimToNull(endDate).substring(0, 10) + " 23:59:59");
}
queryRequests.add(request1);
CommonRequest request2 = new CommonRequest();
request2.setName("warehouseStructureName");
......@@ -142,7 +147,11 @@ public class EquipmentAlarmController extends AbstractBaseController {
queryRequests.add(request8);
CommonRequest request9 = new CommonRequest();
request9.setName("buildIds");
request9.setValue(ObjectUtils.isEmpty(buildIds) ? null : buildIds);
buildIds = ObjectUtils.isEmpty(buildIds) ? null : buildIds.stream()
.map(v -> v.replace("[", "").replace("]", ""))
.filter(v -> !Objects.equals(v, "null"))
.collect(Collectors.toList());
request9.setValue(buildIds);
queryRequests.add(request9);
CommonRequest request10 = new CommonRequest();
request10.setName("id");
......@@ -160,6 +169,10 @@ public class EquipmentAlarmController extends AbstractBaseController {
request14.setName("systemCode");
request14.setValue(StringUtil.isNotEmpty(systemCode) ? StringUtils.trimToNull(systemCode) : null);
queryRequests.add(request14);
CommonRequest request15 = new CommonRequest();
request15.setName("buildingName");
request15.setValue(StringUtil.isNotEmpty(buildingName) ? StringUtils.trimToNull(buildingName) : null);
queryRequests.add(request15);
if (equioEnabled) {
if (!ValidationUtil.isEmpty(reginParams.getPersonIdentity())) {
CommonRequest request13 = new CommonRequest();
......@@ -402,28 +415,28 @@ public class EquipmentAlarmController extends AbstractBaseController {
request13.setName("isRemovedFire");
request13.setValue(StringUtil.isNotEmpty(isRemovedFire) ? StringUtils.trimToNull(isRemovedFire) : null);
queryRequests.add(request13);
CommonRequest request15 = new CommonRequest();
request15.setName("equipDetailCode");
request15.setValue(StringUtil.isNotEmpty(equipDetailCode) ? StringUtils.trimToNull(equipDetailCode) : null);
queryRequests.add(request15);
CommonRequest request16 = new CommonRequest();
request16.setName("specificIndexKey");
request16.setValue(StringUtil.isNotEmpty(specificIndexKey) ? StringUtils.trimToNull(specificIndexKey) : null);
queryRequests.add(request16);
CommonRequest request17 = new CommonRequest();
request17.setName("indexTypeCode");
request17.setValue(StringUtil.isNotEmpty(indexTypeCode) ? StringUtils.trimToNull(indexTypeCode) : null);
queryRequests.add(request17);
CommonRequest request18 = new CommonRequest();
request18.setName("equipmentCode");
request18.setValue(StringUtil.isNotEmpty(equipmentCode) ? StringUtils.trimToNull(equipmentCode) : null);
queryRequests.add(request18);
if (equioEnabled){
if (!ValidationUtil.isEmpty(reginParams.getPersonIdentity())){
CommonRequest request14 = new CommonRequest();
......
......@@ -114,5 +114,5 @@ public interface EquipmentSpecificIndexMapper extends BaseMapper<EquipmentSpecif
List<EquipmentSpecificIndex> getEquipIndexInIndex(@Param("list") List<String> listIndex);
EquipmentSpecificIndex getEquipmentSpeIndexByIndexAddress(String indexAddress,String gatewayId);
EquipmentSpecificIndex getEquipmentSpeIndexByAddress(String indexAddress, String eventAddress, String gatewayId);
}
......@@ -40,5 +40,5 @@ public interface IEquipmentSpecificIndexService extends IService<EquipmentSpecif
* @param indexAddress indexAddress
* @return EquipmentSpecificIndex
*/
EquipmentSpecificIndex getEquipmentSpeIndexByIndexAddress(String indexAddress,String gatewayId);
EquipmentSpecificIndex getEquipmentSpeIndexByAddress(String indexAddress, String eventAddress, String gatewayId);
}
......@@ -34,4 +34,6 @@ public interface MqttReceiveService {
* @param message
*/
void handleDataToRiskModel(String topic, String message);
void handlerMqttStationMessage(String topic, String message);
}
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yeejoin.amos.boot.module.jcs.api.dto.IotSystemAlarmRo;
......@@ -195,12 +196,15 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
ent.setConfirmUserName(userModel.getRealName());
EquipmentSpecificAlarmLog alarmLog = equipmentSpecificAlarmLogService.getById(ent.getId());
List<EquipmentSpecificAlarmLog> list = null;
String handleConfirm = ent.getHandleConfirm();
int isBatch = 0;
if (!ObjectUtils.isEmpty(alarmLog)) {
Long equipmentSpecificAlarmId = alarmLog.getEquipmentSpecificAlarmId();
ent.setEquipmentSpecificAlarmId(equipmentSpecificAlarmId);
ent.setEquipmentSpecificId(alarmLog.getEquipmentSpecificId());
ent.setEquipmentSpecificIndexKey(alarmLog.getEquipmentSpecificIndexKey());
ent.setEquipmentSpecificIndexName(alarmLog.getEquipmentSpecificIndexName());
Equipment equipment = equipmentSpecificMapper.getEquipmentBySpecificId(alarmLog.getEquipmentSpecificId());
if (!StringUtil.isNotEmpty(equipment.getCleanType())) {
// 若此装备未定义消除策略,默认设置为复位信号自动消除
......@@ -243,22 +247,22 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
// 警情处理确认后消除更新value 为false,否则灯还在闪
LambdaUpdateWrapper<EquipmentSpecificIndex> updateWrapper =new LambdaUpdateWrapper<EquipmentSpecificIndex>().
set(EquipmentSpecificIndex::getValue,"false").
set(EquipmentSpecificIndex::getUpdateDate,new Date()).
set(EquipmentSpecificIndex::getUpdateDate, new Date()).
eq(EquipmentSpecificIndex::getEquipmentSpecificId,alarm.getEquipmentSpecificId()).
eq(EquipmentSpecificIndex::getEquipmentIndexKey,alarm.getEquipmentSpecificIndexKey());
iEquipmentSpecificIndexSerivce.update(updateWrapper);
//指标图标显示根据 EquipmentSpecific 表中的 RealtimeIotIndexValue 判断 同步修改
//指标图标显示根据 EquipmentSpecific 表中的 RealtimeIotIndexValue 判断 同步修改
LambdaUpdateWrapper<EquipmentSpecific> wrapper =new LambdaUpdateWrapper<EquipmentSpecific>().
set(EquipmentSpecific::getRealtimeIotIndexValue,"false").
set(EquipmentSpecific::getRealtimeIotIndexUpdateDate,new Date()).
eq(EquipmentSpecific::getId,alarm.getEquipmentSpecificId());
equipmentSpecificSerivce.update(wrapper);
MqttReceiveServiceImpl.upAlarmLogStatus(alarmLog.getIotCode(), alarmLog.getEquipmentSpecificIndexKey(), null, equipmentSpecificAlarmLogService, true);
equipmentSpecificSerivce.update(wrapper);
MqttReceiveServiceImpl.upAlarmLogStatus(alarmLog.getIotCode(), alarmLog.getEquipmentSpecificIndexKey(), null, equipmentSpecificAlarmLogService, true, "");
}
// 如果是批量确警,先查询,再确警,用于批量消息推送
isBatch = ent.getIsBatch();
if (isBatch == 1) {
list = equipmentSpecificAlarmLogService.getIsConfirmByAlarmId(alarmLog.getEquipmentSpecificId(),alarmLog.getEquipmentSpecificIndexKey(), "0");
list = equipmentSpecificAlarmLogService.getIsConfirmByAlarmId(alarmLog.getEquipmentSpecificId(), alarmLog.getEquipmentSpecificIndexKey(), "0");
}
}
if (ent.getType() != null) {
......@@ -279,13 +283,85 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
ent.setResolveResult(dateString + " " + userModel.getRealName() + " 进行警情确认处理。");
}
if (ent.getIsBatch() == 0){
i = equipmentSpecificAlarmLogMapper.updateById(ent);
if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.SINGLE.getCode().equalsIgnoreCase(handleConfirm)) {
QueryWrapper<EquipmentSpecificAlarmLog> wrapper = new QueryWrapper<>();
wrapper.eq("equipment_specific_id", ent.getEquipmentSpecificId()).isNull("confirm_date");
List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogMapper.selectList(wrapper);
if (0 < logs.size()) {
for (EquipmentSpecificAlarmLog x : logs) {
x.setConfirmType(ent.getConfirmType());
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason());
}
equipmentSpecificAlarmLogService.updateBatchById(logs);
}
} else if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.ALL.getCode().equalsIgnoreCase(handleConfirm)) {
QueryWrapper<EquipmentSpecificAlarmLog> logQueryWrapper = new QueryWrapper<>();
logQueryWrapper.isNull("confirm_date");
List<EquipmentSpecificAlarmLog> logList = equipmentSpecificAlarmLogMapper.selectList(logQueryWrapper);
if (0 < logList.size()) {
for (EquipmentSpecificAlarmLog x : logList) {
x.setConfirmType(ent.getConfirmType());
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason());
}
equipmentSpecificAlarmLogService.updateBatchById(logList);
}
} else {
i = equipmentSpecificAlarmLogMapper.updateById(ent);
}
} else {
LambdaUpdateWrapper<EquipmentSpecificAlarmLog> updateWrapper = new LambdaUpdateWrapper<EquipmentSpecificAlarmLog>().
eq(EquipmentSpecificAlarmLog::getEquipmentSpecificId,ent.getEquipmentSpecificId()).
eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey,ent.getEquipmentSpecificIndexKey())
.isNull(EquipmentSpecificAlarmLog::getConfirmDate);
i = equipmentSpecificAlarmLogMapper.update(ent, updateWrapper);
if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.SINGLE.getCode().equalsIgnoreCase(handleConfirm)) {
QueryWrapper<EquipmentSpecificAlarmLog> wrapper = new QueryWrapper<>();
wrapper.eq("equipment_specific_id", ent.getEquipmentSpecificId()).isNull("confirm_date");
List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogMapper.selectList(wrapper);
if (0 < logs.size()) {
for (EquipmentSpecificAlarmLog x : logs) {
x.setConfirmType(ent.getConfirmType());
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason());
}
equipmentSpecificAlarmLogService.updateBatchById(logs);
}
} else if (StringUtils.isNotEmpty(handleConfirm) && HandleBatchConfirmEnum.ALL.getCode().equalsIgnoreCase(handleConfirm)) {
QueryWrapper<EquipmentSpecificAlarmLog> logQueryWrapper = new QueryWrapper<>();
logQueryWrapper.isNull("confirm_date");
List<EquipmentSpecificAlarmLog> logList = equipmentSpecificAlarmLogMapper.selectList(logQueryWrapper);
if (0 < logList.size()) {
for (EquipmentSpecificAlarmLog x : logList) {
x.setConfirmType(ent.getConfirmType());
x.setConfirmTypeName(ent.getConfirmTypeName());
x.setConfirmDate(new Date());
x.setConfirmUser(ent.getConfirmUser());
x.setConfirmUserName(ent.getConfirmUserName());
x.setType(ent.getType());
x.setResolveResult(ent.getResolveResult());
x.setAlarmReason(ent.getAlarmReason());
}
equipmentSpecificAlarmLogService.updateBatchById(logList);
}
} else {
LambdaUpdateWrapper<EquipmentSpecificAlarmLog> updateWrapper = new LambdaUpdateWrapper<EquipmentSpecificAlarmLog>().
eq(EquipmentSpecificAlarmLog::getEquipmentSpecificId, ent.getEquipmentSpecificId()).
eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey, ent.getEquipmentSpecificIndexKey())
.isNull(EquipmentSpecificAlarmLog::getConfirmDate);
i = equipmentSpecificAlarmLogMapper.update(ent, updateWrapper);
}
}
//int i = confirmAlarmMapper.confirmAlam(ent);
......
......@@ -30,7 +30,7 @@ public class EquipmentSpecificIndexServiceImpl extends ServiceImpl<EquipmentSpec
}
@Override
public EquipmentSpecificIndex getEquipmentSpeIndexByIndexAddress(String indexAddress,String gatewayId) {
return this.baseMapper.getEquipmentSpeIndexByIndexAddress(indexAddress,gatewayId);
public EquipmentSpecificIndex getEquipmentSpeIndexByAddress(String indexAddress,String eventAddress, String gatewayId) {
return this.baseMapper.getEquipmentSpeIndexByAddress(indexAddress, eventAddress, gatewayId);
}
}
......@@ -57,6 +57,8 @@ import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.yeejoin.equipmanage.common.enums.MqttConstant.*;
/**
* @author keyong
......@@ -70,47 +72,58 @@ import java.util.stream.Collectors;
@Slf4j
@Service
public class MqttReceiveServiceImpl implements MqttReceiveService {
private static String PUMP_JOB_GROUP_NAME = "EQUIP_PUMP_JOB_GROUP_NAME";
private static String PUMP_TRIGGER_NAME = "EQUIP_PUMP_TRIGGER_NAME";
private static String PUMP_TRIGGER_GROUP_NAME = "EQUIP_PUMP_TRIGGER_GROUP_NAME";
private static Map<String, TemperatureAlarmDto> temperatureMap = new HashMap<>();
/**
* 泡沫罐KEY
*/
private final static String CAFS_FoamTank_FoamTankLevel = "CAFS_FoamTank_FoamTankLevel";
/**
* 泡沫罐KEY
*/
private final static String FHS_PipePressureDetector_PipePressure = "FHS_PipePressureDetector_PipePressure";
/**
* 水池信息
*/
private final static String FHS_FirePoolDevice_WaterLevel = "FHS_FirePoolDevice_WaterLevel";
/**
* 水池信息
*/
private final static String FHS_WirelessliquidDetector_WaterLevel = "FHS_WirelessliquidDetector_WaterLevel";
/**
* 水箱液位
*/
private final static String CAFS_WaterTank_WaterTankLevel = "CAFS_WaterTank_WaterTankLevel";
private static final String PUMP_JOB_GROUP_NAME = "EQUIP_PUMP_JOB_GROUP_NAME";
private static final String PUMP_TRIGGER_NAME = "EQUIP_PUMP_TRIGGER_NAME";
private static final String PUMP_TRIGGER_GROUP_NAME = "EQUIP_PUMP_TRIGGER_GROUP_NAME";
private static final Map<String, TemperatureAlarmDto> temperatureMap = new HashMap<>();
static IEquipmentSpecificIndexService equipmentSpecificIndexService;
static EquipmentSpecificMapper equipmentSpecificMapper;
static IFireFightingSystemService fireFightingSystemService;
static MqttSendGateway mqttSendGateway;
private static RemoteSecurityService remoteSecurityService;
private static String canvasTopic;
private static Boolean jcsSwitch;
private static Boolean bool = Boolean.FALSE;
@Autowired
public void setEquipmentSpecificIndexService(IEquipmentSpecificIndexService equipmentSpecificIndexService) {
MqttReceiveServiceImpl.equipmentSpecificIndexService = equipmentSpecificIndexService;
}
protected EmqKeeper emqKeeper;
@Autowired
ICarPropertyService carPropertyService;
@Autowired
IEquipmentSpecificAlarmService equipmentSpecificAlarmService;
@Autowired
IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService;
@Autowired
EquipmentSpecificAlarmMapper equipmentSpecificAlarmMapper;
@Autowired
EquipQrcodeRecordMapper equipQrcodeRecordMapper;
@Autowired
EquipmentSpecificAlarmLogMapper equipmentSpecificAlarmLogMapper;
@Autowired
@Lazy
IEquipmentIndexService equipmentIndexService;
@Autowired
EquipmentSpecificIndexMapper equipmentSpecificIndexMapper;
@Autowired
private IotFeign iotFeign;
@Autowired
MarqueeDataMapper marqueeDataMapper;
//消防泵
......@@ -119,99 +132,34 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
//消防炮
@Value("${equipment.plan.monitor}")
String monitorCodes;
@Autowired
private InfluxDbConnection influxDbConnection;
@Autowired
private RuleTrigger ruleTrigger;
/**
* 泡沫罐KEY
*/
private final static String CAFS_FoamTank_FoamTankLevel = "CAFS_FoamTank_FoamTankLevel";
/**
* 泡沫罐KEY
*/
private final static String FHS_PipePressureDetector_PipePressure = "FHS_PipePressureDetector_PipePressure";
/**
* 水池信息
*/
private final static String FHS_FirePoolDevice_WaterLevel = "FHS_FirePoolDevice_WaterLevel";
/**
* 水池信息
*/
private final static String FHS_WirelessliquidDetector_WaterLevel = "FHS_WirelessliquidDetector_WaterLevel";
/**
* 水箱液位
*/
private final static String CAFS_WaterTank_WaterTankLevel = "CAFS_WaterTank_WaterTankLevel";
static EquipmentSpecificMapper equipmentSpecificMapper;
@Autowired
public void setEquipmentSpecificMapper(EquipmentSpecificMapper equipmentSpecificMapper) {
MqttReceiveServiceImpl.equipmentSpecificMapper = equipmentSpecificMapper;
}
CarMapper carMapper;
@Autowired
FireFightingSystemMapper FireFightingSystemMapper;
static IFireFightingSystemService fireFightingSystemService;
FireFightingSystemMapper fireFightingSystemMapper;
@Autowired
public void setFireFightingSystemService(IFireFightingSystemService fireFightingSystemService) {
MqttReceiveServiceImpl.fireFightingSystemService = fireFightingSystemService;
}
static MqttSendGateway mqttSendGateway;
IESeqService eSeqService;
@Autowired
public void setMqttSendGateway(MqttSendGateway mqttSendGateway) {
MqttReceiveServiceImpl.mqttSendGateway = mqttSendGateway;
}
private IotFeign iotFeign;
@Autowired
private RedisUtils redisUtils;
@Autowired
CarMapper carMapper;
@Autowired
private ISyncDataService syncDataService;
@Autowired
private IEquipmentAlarmReportDayService iEquipmentAlarmReportDayService;
@Autowired
private IEquipmentSpecificSerivce iEquipmentSpecificSerivce;
@Autowired
FireFightingSystemMapper fireFightingSystemMapper;
@Autowired
private SystemctlFeign systemctlFeign;
private static RemoteSecurityService remoteSecurityService;
@Autowired
public void setRemoteSecurityService(RemoteSecurityService remoteSecurityService) {
MqttReceiveServiceImpl.remoteSecurityService = remoteSecurityService;
}
@Autowired
private TopographyService topographyService;
@Autowired
IESeqService eSeqService;
@Autowired
private IEquipmentService equipmentService;
@Autowired
private IPressurePumpService pressurePumpService;
......@@ -223,16 +171,12 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
@Value("${equipManage.name}")
private String serverName;
@Value("${state.code:code}")
private String stationCode;
@Value("${system.type}")
private String system;
@Value("${state.name:name}")
private String stationName;
@Value("${mqtt.vehicle.topic}")
private String carTopic;
......@@ -245,58 +189,164 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
@Value("${equip.center.risk.topic}")
private String riskTopicCenter;
private static String canvasTopic;
@Value("${equip.point.equipmentdata.topic}")
public void setCanvasTopic(String canvasTopic) {
MqttReceiveServiceImpl.canvasTopic = canvasTopic;
}
@Value("${equip.index.topic}")
private String indexTopic;
@Value("${spring.redis.expire.time}")
private long redisExpireTime;
@Value("${systemctl.sync.switch}")
private Boolean syncSwitch;
@Value("${systemctl.amos.switch}")
private Boolean amosSwitch;
@Value("${isSendApp}")
private Boolean isSendApp;
@Value("${isSendIot:false}")
private Boolean isSendIot;
@Value("${is.open.telemetering:false}")
private Boolean isOpenTelemetering;
@Value("${equipment.pressurepump.start}")
private String pressurePumpStart;
@Value("${emergency.disposal.indicators}")
private String emergencyDisposalIndicators;
private static Boolean jcsSwitch;
@Value("${systemctl.jcs.switch}")
public void setJcsSwitch(Boolean jcsSwitch) {
MqttReceiveServiceImpl.jcsSwitch = jcsSwitch;
public static List<EquipmentSpecificAlarmLog> upAlarmLogStatus(String iotCode, String equipmentSpecificIndexKey,
String traceId, IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService,
boolean flag, String batchConfirm) {
// LambdaQueryWrapper<EquipmentSpecificAlarmLog> queryWrapper = new LambdaQueryWrapper<>();
// if (batchConfirm.equalsIgnoreCase(HandleBatchConfirmEnum.SINGLE.getCode())) {
// queryWrapper.eq(EquipmentSpecificAlarmLog::getIotCode, iotCode);
// queryWrapper.ne(EquipmentSpecificAlarmLog::getStatus, AlarmStatusEnum.HF.getCode());
// } else if (batchConfirm.equalsIgnoreCase(HandleBatchConfirmEnum.ALL.getCode())) {
// // 此处做了全库的设备告警消除原因有二:第一点 目前在警情确认的时候会把设备定义类型是确认消除的设备的同一类型告警全部消除,所以此处逻辑合理;
// // 第二点:现在做了一键做全库设备的确认操作,但是没有全库设备的消除操作功能,所以此处做如下逻辑符合功能操作的惯性。 ----2023年9月20日 柯勇
// queryWrapper.ne(EquipmentSpecificAlarmLog::getStatus, AlarmStatusEnum.HF.getCode());
// } else {
// queryWrapper.eq(EquipmentSpecificAlarmLog::getIotCode, iotCode);
// queryWrapper.eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey, equipmentSpecificIndexKey);
// queryWrapper.ne(EquipmentSpecificAlarmLog::getStatus, AlarmStatusEnum.HF.getCode());
// }
LambdaQueryWrapper<EquipmentSpecificAlarmLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EquipmentSpecificAlarmLog::getIotCode, iotCode);
queryWrapper.eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey, equipmentSpecificIndexKey);
queryWrapper.ne(EquipmentSpecificAlarmLog::getStatus, AlarmStatusEnum.HF.getCode());
List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogService.getBaseMapper().selectList(queryWrapper);
if (!logs.isEmpty()) {
EquipmentSpecificAlarmLog log = logs.get(0);
EquipmentSpecific specific = equipmentSpecificMapper.selectById(log.getEquipmentSpecificId());
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(date);
logs.forEach(x -> {
x.setCleanTime(new Date());
x.setStatus(AlarmStatusEnum.HF.getCode());
if (!flag) {
// 若已经被确警处理过,此处不再做处理
if (StringUtils.isEmpty(x.getConfirmType())) {
x.setConfirmType(x.getType());
x.setConfirmTypeName(ConfirmAlamEnum.getTypeByCode(x.getType()));
String equipmentName = StringUtil.isNotEmpty(specific.getCode()) ? specific.getName() + "(" + specific.getCode() + ")" : specific.getName();
if (x.getType().equals(AlarmTypeEnum.PB.getCode())) {
x.setAlarmReason(equipmentName + "频繁故障/误报,将设备报警信息屏蔽。");
} else {
x.setAlarmReason(equipmentName + "引起设备报警");
}
x.setResolveResult(dateString + "系统收到设备复归(已消除)信号,系统自动处理。");
x.setConfirmUser("");
x.setConfirmUserName("系统自动处理");
x.setConfirmDate(date);
}
}
x.setEquipmentSpecificIndexValue(TrueOrFalseEnum.fake.value);
if (!StringUtils.isEmpty(traceId)) {
x.setTraceId(traceId);
}
});
equipmentSpecificAlarmLogService.updateBatchById(logs);
}
if (flag) {
List<EquipmentSpecificIndex> indexList = equipmentSpecificIndexService.getEquipmentSpeIndexBySpeIotCode(iotCode);
publishDataToCanvas(indexList);
}
return logs;
}
/**
* 画布数据消息推送
*
* @param indexList
*/
public static void publishDataToCanvas(List<EquipmentSpecificIndex> indexList) {
if (!ObjectUtils.isEmpty(indexList)) {
EquipmentSpecificIndex index = indexList.stream().filter(x -> x.getUpdateDate() != null)
.sorted(Comparator.comparing(EquipmentSpecificIndex::getUpdateDate).reversed())
.collect(Collectors.toList()).get(0);
EquipmentStateVo equipmentStateVo = new EquipmentStateVo();
equipmentStateVo.setEquipName(index.getEquipmentSpecificName());
equipmentStateVo.setOrgCode(index.getOrgCode());
equipmentStateVo.setSpecificId(index.getEquipmentSpecificId());
equipmentStateVo.setEquipCode(index.getQrCode());
equipmentStateVo.setEquipIotCode(index.getIotCode());
equipmentStateVo.setStatus("");
equipmentStateVo.setColor(index.getEmergencyLevelColor());
// 添加性能指标项
//flag 无意义 getSpeIndex 方法其他地方共用 做了额外封装 为0时走原逻辑
int flag = 0;
equipmentStateVo.setSpeindexList(fireFightingSystemService.getSpeIndex(index.getEquipmentSpecificId(), flag));
Map<String, Object> topicObject = new HashMap<>();
topicObject.put("equipCode", equipmentStateVo.getEquipCode());
if (TrueOrFalseEnum.real.value.equalsIgnoreCase(index.getValue())) {
topicObject.put("color", equipmentStateVo.getColor());
} else {
topicObject.put("color", "");
}
Map<String, Object> map = JSON.parseObject(JSON.toJSONString(equipmentStateVo));
topicObject.put("uuid", UUID.randomUUID().toString());
map.put(canvasTopic, topicObject);
@Value("${equipment.pressurepump.start}")
private String pressurePumpStart;
// 发送数据至画布
mqttSendGateway.sendToMqtt(canvasTopic, JSON.toJSONString(map));
}
}
@Autowired
public void setEquipmentSpecificIndexService(IEquipmentSpecificIndexService equipmentSpecificIndexService) {
MqttReceiveServiceImpl.equipmentSpecificIndexService = equipmentSpecificIndexService;
}
@Value("${emergency.disposal.indicators}")
private String emergencyDisposalIndicators;
@Autowired
public void setEquipmentSpecificMapper(EquipmentSpecificMapper equipmentSpecificMapper) {
MqttReceiveServiceImpl.equipmentSpecificMapper = equipmentSpecificMapper;
}
@Value("${equip.message.create.topic}")
private String riskMsgCreateTopic;
private static Boolean bool = Boolean.FALSE;
@Autowired
public void setFireFightingSystemService(IFireFightingSystemService fireFightingSystemService) {
MqttReceiveServiceImpl.fireFightingSystemService = fireFightingSystemService;
}
private static Boolean isAlarm = Boolean.FALSE;
@Autowired
protected EmqKeeper emqKeeper;
public void setMqttSendGateway(MqttSendGateway mqttSendGateway) {
MqttReceiveServiceImpl.mqttSendGateway = mqttSendGateway;
}
@Autowired
public void setRemoteSecurityService(RemoteSecurityService remoteSecurityService) {
MqttReceiveServiceImpl.remoteSecurityService = remoteSecurityService;
}
@Value("${equip.point.equipmentdata.topic}")
public void setCanvasTopic(String canvasTopic) {
MqttReceiveServiceImpl.canvasTopic = canvasTopic;
}
@Value("${systemctl.jcs.switch}")
public void setJcsSwitch(Boolean jcsSwitch) {
MqttReceiveServiceImpl.jcsSwitch = jcsSwitch;
}
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -373,7 +423,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
@Async("equipAsyncExecutor")
@Transactional(rollbackFor = Exception.class)
public void handlerMqttRomaMessage(String topic, String message) {
log.info("接收到Mqtt消息: {}", message);
log.info("接收到换流站Kafka消息: {}", message);
TopicEntityVo topicEntity = new TopicEntityVo();
topicEntity.setTopic(topic);
topicEntity.setMessage(message);
......@@ -382,32 +432,30 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
List<EquipmentSpecificIndex> equipmentSpecificIndexList = new ArrayList<>();
List<EquipmentSpecificAlarm> equipmentSpecificAlarms = new ArrayList<>();
List<IndexStateVo> indexStateList = new ArrayList<>();
JSONObject jsonObject = JSONObject.parseObject(message);
String dataType = jsonObject.getString("datatype");
String indexAddress = null, value, timeStamp, quality = null;
//如果消息是遥信类型,进行指标转换
assert dataType != null;
if (dataType.equals("state")) {
indexAddress = jsonObject.getString("scadaid");
value = jsonObject.getInteger("value") == 1 ? "true" : "false";
timeStamp = jsonObject.getString("timestamp");
}else if (dataType.equals("discreate")){
indexAddress = jsonObject.getString("key");
value = jsonObject.getFloat("value") == 0.0 ? "false" : "true";
timeStamp = jsonObject.getString("time_stamp");
quality = jsonObject.getString("quality");
}else {
indexAddress = jsonObject.getString("key");
value = jsonObject.getFloat("value")+"";
timeStamp = jsonObject.getString("time_stamp");
quality = jsonObject.getString("quality");
StationMessage stationMessage = JSON.parseObject(String.valueOf(message), StationMessage.class);
String indexAddress = null, value = null, timeStamp = null, quality = null, dataType = null;
if (stationMessage != null) {
dataType = stationMessage.getDataType();
timeStamp = stationMessage.getTimeStamp();
quality = stationMessage.getQuality();
if (dataType.equals(STATE)) {
indexAddress = stationMessage.getScadaId();
value = ONE_1.equalsIgnoreCase(stationMessage.getValue()) ? TRUE : FALSE;
} else if (dataType.equals(DIS_CREATE)) {
indexAddress = stationMessage.getKey();
value = ONE_1_0.equalsIgnoreCase(stationMessage.getValue()) ? TRUE : FALSE;
} else {
indexAddress = stationMessage.getKey();
value = stationMessage.getValue();
}
}
Map<Object, Object> equipmentIndexKeyMap = redisUtils.hmget(RedisKey.EQUIP_INDEX_ADDRESS_KEY);
if (equipmentIndexKeyMap.get(indexAddress) != null) {
EquipmentSpecificIndex equipmentSpeIndex = equipmentSpecificIndexService.getEquipmentSpeIndexByIndexAddress(indexAddress, null);
EquipmentSpecificIndex equipmentSpeIndex = equipmentSpecificIndexService.getEquipmentSpeIndexByAddress(indexAddress, null, null);
equipmentSpeIndex.setValue(value);
equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpeIndex.getValueEnum()));
......@@ -470,22 +518,22 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
boolean alarmFlag = false;
Map<String, String> messageBodyMap = new HashMap<>();
//管网压力、泡沫罐信息、水箱液位告警处理
if (iotDataVO.getKey().toLowerCase().equals(CAFS_FoamTank_FoamTankLevel.toLowerCase()) ||
FHS_PipePressureDetector_PipePressure.toLowerCase().equals(iotDataVO.getKey().toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(CAFS_WaterTank_WaterTankLevel.toLowerCase())) {
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) ||
FHS_PipePressureDetector_PipePressure.equalsIgnoreCase(iotDataVO.getKey()) ||
iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel)) {
alarmFlag = doFoamTankLevel(iotDataVO, equipmentSpeIndex, messageBodyMap);
}
//消防水池液位处理
if (iotDataVO.getKey().toLowerCase().equals(FHS_FirePoolDevice_WaterLevel.toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(FHS_WirelessliquidDetector_WaterLevel.toLowerCase())) {
if (iotDataVO.getKey().equalsIgnoreCase(FHS_FirePoolDevice_WaterLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_WirelessliquidDetector_WaterLevel)) {
alarmFlag = doWaterPoolLevel(iotDataVO, equipmentSpeIndex, messageBodyMap);
}
// 遥测数据生成告警事件、日志处理
if (iotDataVO.getKey().toLowerCase().equals(CAFS_FoamTank_FoamTankLevel.toLowerCase()) ||
FHS_PipePressureDetector_PipePressure.toLowerCase().equals(iotDataVO.getKey().toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(CAFS_WaterTank_WaterTankLevel.toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(FHS_FirePoolDevice_WaterLevel.toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(FHS_WirelessliquidDetector_WaterLevel.toLowerCase())) {
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) ||
FHS_PipePressureDetector_PipePressure.equalsIgnoreCase(iotDataVO.getKey()) ||
iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_FirePoolDevice_WaterLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_WirelessliquidDetector_WaterLevel)) {
handlingAlarms(equipmentSpeIndex, alarmFlag);
}
......@@ -526,7 +574,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
jsonObjectData.put("measurementType", null == equipmentSpeIndex.getEquipmentIndexKey() ? "" : equipmentSpeIndex.getEquipmentIndexKey());
jsonObjectData.put("dateTime", date);
jsonObjectData.put("quality", "0"); // 量测质量码:0 有效,1 无效
List<JSONObject> jsonObjects = Arrays.asList(jsonObjectData);
List<JSONObject> jsonObjects = Collections.singletonList(jsonObjectData);
jsonObjectXf.put("data", jsonObjects);
......@@ -539,7 +587,6 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
log.info("遥测遥信数据推送云端kafka成功");
} catch (MqttException e) {
log.error("遥测遥信数据推送云端kafka失败=====>" + e.getMessage());
e.printStackTrace();
}
}
......@@ -562,7 +609,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
mqttSendGateway.sendToMqtt(TopicEnum.EQDQR.getTopic(), JSONArray.toJSON(action).toString());
} else {
alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(),
equipmentSpecificAlarmLogService, false));
equipmentSpecificAlarmLogService, false, ""));
mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE;
}
......@@ -629,7 +676,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
//消防水源
if (!flag) {
List<Map> lit = iEquipmentSpecificSerivce.getWater(equipmentSpecificVo.getId());
if (lit != null && lit.size() > 0) {
if (lit != null && !lit.isEmpty()) {
topicEntity.setType("xfsy");
mqttSendGateway.sendToMqtt(emergencyDisposalIndicators, JSONObject.toJSONString(topicEntity));
}
......@@ -640,6 +687,258 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
});
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void handlerMqttStationMessage(String topic, String message) {
log.info("接收到韶山Kafka消息: {}", message);
TopicEntityVo topicEntity = new TopicEntityVo();
topicEntity.setTopic(topic);
topicEntity.setMessage(message);
List<IotDataVO> iotDatalist = new ArrayList<>();
List<EquipmentSpecificIndex> equipmentSpecificIndexList = new ArrayList<>();
List<EquipmentSpecificAlarm> equipmentSpecificAlarms = new ArrayList<>();
List<IndexStateVo> indexStateList = new ArrayList<>();
SShanStationMessage sShanStationMessage = JSON.parseObject(String.valueOf(message), SShanStationMessage.class);
Map<Object, Object> equipmentIndexKeyMap = redisUtils.hmget(RedisKey.EQUIP_INDEX_ADDRESS_KEY_STATION);
sShanStationMessage.getWarns().forEach(m -> {
String value = m.getEventTextL1().contains("出现") ? TRUE : FALSE;
if (equipmentIndexKeyMap.get(m.getPointId()) != null) {
EquipmentSpecificIndex equipmentSpeIndex = equipmentSpecificIndexService.getEquipmentSpeIndexByAddress(null, m.getPointId(), null);
if (equipmentSpeIndex == null) {
return;
}
equipmentSpeIndex.setValue(value);
equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpeIndex.getValueEnum()));
equipmentSpeIndex.setEquipmentType(topicEntity.getType());
equipmentSpeIndex.setUpdateDate(new Date());
equipmentSpeIndex.setTimeStamp(sShanStationMessage.getTimestamp());
equipmentSpeIndex.setUUID(UUIDUtils.getUUID());
IotDataVO iotDataVO = new IotDataVO();
iotDataVO.setKey(equipmentSpeIndex.getNameKey());
iotDataVO.setValue(value);
iotDatalist.add(iotDataVO);
QueryWrapper<EquipmentSpecific> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", equipmentSpeIndex.getEquipmentSpecificId());
EquipmentSpecific equipmentSpecific = iEquipmentSpecificSerivce.getOne(queryWrapper);
if (equipmentSpecific == null) {
return;
}
String iotCode = equipmentSpecific.getIotCode();
StringBuilder endIndex = new StringBuilder(iotCode).insert(8, '/');
String iotTopic = "influxdb/" + endIndex;
JSONObject msg = new JSONObject();
msg.put(equipmentSpeIndex.getEquipmentIndexKey(), value);
mqttSendGateway.sendToMqtt(iotTopic, JSON.toJSONString(msg));
List<EquipmentSpecificVo> eqIotCodeList = iEquipmentSpecificSerivce.getEquipAndCarIotcodeByIotcode(iotCode);
if (eqIotCodeList.isEmpty()) {
log.info("该数据{}不存在!", iotCode);
return;
}
if (eqIotCodeList.size() > 1) {
log.info("有重复的{}数据!", iotCode);
}
EquipmentSpecificVo equipmentSpecificVo = eqIotCodeList.get(0);
topicEntity.setType(equipmentSpecificVo.getType());
topicEntity.setCode(equipmentSpecificVo.getCode());
//es存储数据
eSeqService.saveESEquiplistSpecificBySystemESVO(equipmentSpeIndex, String.valueOf(equipmentSpecificVo.getSystemId()), equipmentSpecificVo.getSystemName());
//更新装备性能指标
equipmentSpecificIndexService.updateById(equipmentSpeIndex);
// 更新设备表指标状态
iEquipmentSpecificSerivce.updateEquipmentSpecIndexRealtimeData(equipmentSpeIndex);
equipmentSpecificIndexList.add(equipmentSpeIndex);
indexStateList.add(createIndexStateVo(equipmentSpeIndex));
// 添加指标报告
saveEquipmentAlarmReportDay(equipmentSpeIndex);
// 火眼数据构造告警指标逻辑
equipmentSpeIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist);
boolean alarmFlag = false;
Map<String, String> messageBodyMap = new HashMap<>();
//管网压力、泡沫罐信息、水箱液位告警处理
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) ||
FHS_PipePressureDetector_PipePressure.equalsIgnoreCase(iotDataVO.getKey()) ||
iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel)) {
alarmFlag = doFoamTankLevel(iotDataVO, equipmentSpeIndex, messageBodyMap);
}
//消防水池液位处理
if (iotDataVO.getKey().equalsIgnoreCase(FHS_FirePoolDevice_WaterLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_WirelessliquidDetector_WaterLevel)) {
alarmFlag = doWaterPoolLevel(iotDataVO, equipmentSpeIndex, messageBodyMap);
}
// 遥测数据生成告警事件、日志处理
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) ||
FHS_PipePressureDetector_PipePressure.equalsIgnoreCase(iotDataVO.getKey()) ||
iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_FirePoolDevice_WaterLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_WirelessliquidDetector_WaterLevel)) {
handlingAlarms(equipmentSpeIndex, alarmFlag);
}
// 指标告警处理
if (equipmentSpeIndex.getIsAlarm() != null && 1 == equipmentSpeIndex.getIsAlarm()) {
equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpeIndex, messageBodyMap));
}
// 遥测遥信数据推送云端kafka
JSONObject jsonObjectXf = new JSONObject();
jsonObjectXf.put("data_class", "realdata");
if (equipmentSpeIndex.getIsTrend() == 1) {
jsonObjectXf.put("data_type", "analog");
} else {
jsonObjectXf.put("data_type", "state");
}
String date = DateUtils.date2LongStr(new Date());
jsonObjectXf.put("op_type", "subscribe_emergency");
JSONObject jsonObjectCondition = new JSONObject();
jsonObjectCondition.put("station_psr_id", stationCode);
jsonObjectCondition.put("station_name", stationName);
jsonObjectCondition.put("data_upload_time", date);
jsonObjectXf.put("condition", jsonObjectCondition);
JSONObject jsonObjectData = new JSONObject();
jsonObjectData.put("psrId", stationCode);
jsonObjectData.put("astId", equipmentSpeIndex.getSpecificCode());
jsonObjectData.put("equipType", equipmentSpeIndex.getEquipmentCode());
jsonObjectData.put("name", equipmentSpeIndex.getEquipmentSpecificName() + "-" + equipmentSpeIndex.getEquipmentSpecificIndexName());
if (value.equals("true")) {
jsonObjectData.put("value", "1");
} else {
jsonObjectData.put("value", "0");
}
jsonObjectData.put("measurementType", null == equipmentSpeIndex.getEquipmentIndexKey() ? "" : equipmentSpeIndex.getEquipmentIndexKey());
jsonObjectData.put("dateTime", date);
jsonObjectData.put("quality", "0"); // 量测质量码:0 有效,1 无效
List<JSONObject> jsonObjects = Collections.singletonList(jsonObjectData);
jsonObjectXf.put("data", jsonObjects);
// 遥测
if (!isOpenTelemetering && equipmentSpeIndex.getIsTrend() == 1) {
} else {
try {
emqKeeper.getMqttClient().publish("emq.xf.created", jsonObjectXf.toString().getBytes(), 1, false);
log.info("遥测遥信数据推送云端kafka成功");
} catch (MqttException e) {
log.error("遥测遥信数据推送云端kafka失败=====>" + e.getMessage());
e.printStackTrace();
}
}
// 报警数据保存
List<EquipmentSpecificAlarmLog> alarmLogs = new ArrayList<>();
if (!ObjectUtils.isEmpty(equipmentSpecificAlarms)) {
equipmentSpecificAlarmService.saveOrUpdateBatch(equipmentSpecificAlarms);
}
// 需要在事务提交之后,否则事务隔离查询不出数据
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
equipmentSpecificAlarms.forEach(action -> {
if (AlarmStatusEnum.BJ.getCode() == action.getStatus()) {
alarmLogs.add(addEquipAlarmLogRecord(action));
if (ValidationUtil.isEmpty(action.getAlamContent())) {
action.setAlamContent(action.getEquipmentSpecificName() + action.getEquipmentSpecificIndexName());
}
mqttSendGateway.sendToMqtt(TopicEnum.EQDQR.getTopic(), JSONArray.toJSON(action).toString());
} else {
alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(),
equipmentSpecificAlarmLogService, false, ""));
mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE;
}
});
// 直流中心消息推送刷新
publishDataToDCCenterPage(equipmentSpecificIndexList);
// 四横八纵遥测信号信息列表刷新
publishNormalIndexValueToPage(equipmentSpecificIndexList);
if ("zd".equals(system)) {
System.out.println("站端系统----------------");
// 向预控系统发送消息
sendEquipSpecIndexToAutosysTopic(equipmentSpecificIndexList);
// 首页性能指标数据订阅
mqttSendGateway.sendToMqtt(indexTopic, JSON.toJSONString(indexStateList));
// 组态大屏消息推送,设备表实时指标修改
intePageSysDataRefresh(equipmentSpecificIndexList, topicEntity);
// 数字换流站同步指标修改
syncSpecificIndexsToGS(equipmentSpecificIndexList);
// 则更新拓扑节点数据及告警状态
updateNodeDateByEquipId(equipmentSpecificIndexList);
// 向画布推送
publishDataToCanvas(equipmentSpecificIndexList);
// 向其他系统推送报警
equipmentAlarmLogsToOtherSystems(alarmLogs);
if (equipmentSpecificVo.getEcode() != null) {
String ecode = equipmentSpecificVo.getEcode();
boolean flag = false;
//消防泵
String[] strings = pumpCodes.split(",");
for (String string : strings) {
if (ecode.startsWith(string)) {
//通知>消防应急预案
topicEntity.setType("xfb");
mqttSendGateway.sendToMqtt(emergencyDisposalIndicators, JSONObject.toJSONString(topicEntity));
flag = true;
break;
}
}
// 消防炮
String[] stringxfp = monitorCodes.split(",");
if (!flag) {
for (String string1 : stringxfp) {
if (ecode.startsWith(string1)) {
//通知>消防应急预案
topicEntity.setType("xfp");
mqttSendGateway.sendToMqtt(emergencyDisposalIndicators, JSONObject.toJSONString(topicEntity));
flag = true;
break;
}
}
}
//消防水源
if (!flag) {
List<Map> lit = iEquipmentSpecificSerivce.getWater(equipmentSpecificVo.getId());
if (lit != null && !lit.isEmpty()) {
topicEntity.setType("xfsy");
mqttSendGateway.sendToMqtt(emergencyDisposalIndicators, JSONObject.toJSONString(topicEntity));
}
}
}
}
}
});
}
});
}
/**
* 物联数据处理
*
......@@ -686,7 +985,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
for (EquipmentSpecificIndex equipmentSpecificIndex : indexList) {
if (!ObjectUtils.isEmpty(equipmentSpecificIndex.getNameKey())
&& equipmentSpecificIndex.getNameKey().toLowerCase().equals(iotDataVO.getKey().toLowerCase())) {
&& equipmentSpecificIndex.getNameKey().equalsIgnoreCase(iotDataVO.getKey())) {
EquipmentSpecificIndex equipmentSpeIndex = new EquipmentSpecificIndex();
BeanUtils.copyProperties(equipmentSpecificIndex, equipmentSpeIndex);
String value = iotDataVO.getValue().toString();
......@@ -738,22 +1037,22 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
// 告警日志表消息内容
Map<String, String> messageBodyMap = new HashMap<>();
//管网压力、泡沫罐信息、水箱液位告警处理
if (iotDataVO.getKey().toLowerCase().equals(CAFS_FoamTank_FoamTankLevel.toLowerCase()) ||
FHS_PipePressureDetector_PipePressure.toLowerCase().equals(iotDataVO.getKey().toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(CAFS_WaterTank_WaterTankLevel.toLowerCase())) {
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) ||
FHS_PipePressureDetector_PipePressure.equalsIgnoreCase(iotDataVO.getKey()) ||
iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel)) {
alarmFlag = doFoamTankLevel(iotDataVO, equipmentSpecificIndex, messageBodyMap);
}
//消防水池液位处理
if (iotDataVO.getKey().toLowerCase().equals(FHS_FirePoolDevice_WaterLevel.toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(FHS_WirelessliquidDetector_WaterLevel.toLowerCase())) {
if (iotDataVO.getKey().equalsIgnoreCase(FHS_FirePoolDevice_WaterLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_WirelessliquidDetector_WaterLevel)) {
alarmFlag = doWaterPoolLevel(iotDataVO, equipmentSpecificIndex, messageBodyMap);
}
// 遥测数据生成告警事件、日志处理
if (iotDataVO.getKey().toLowerCase().equals(CAFS_FoamTank_FoamTankLevel.toLowerCase()) ||
FHS_PipePressureDetector_PipePressure.toLowerCase().equals(iotDataVO.getKey().toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(CAFS_WaterTank_WaterTankLevel.toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(FHS_FirePoolDevice_WaterLevel.toLowerCase()) ||
iotDataVO.getKey().toLowerCase().equals(FHS_WirelessliquidDetector_WaterLevel.toLowerCase())) {
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) ||
FHS_PipePressureDetector_PipePressure.equalsIgnoreCase(iotDataVO.getKey()) ||
iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_FirePoolDevice_WaterLevel) ||
iotDataVO.getKey().equalsIgnoreCase(FHS_WirelessliquidDetector_WaterLevel)) {
handlingAlarms(equipmentSpecificIndex, alarmFlag);
}
......@@ -794,7 +1093,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
jsonObjectData.put("measurementType", null == equipmentSpecificIndex.getEquipmentIndexKey() ? "" : equipmentSpecificIndex.getEquipmentIndexKey());
jsonObjectData.put("dateTime", date);
jsonObjectData.put("quality", "0"); // 量测质量码:0 有效,1 无效
List<JSONObject> jsonObjects = Arrays.asList(jsonObjectData);
List<JSONObject> jsonObjects = Collections.singletonList(jsonObjectData);
jsonObjectXf.put("data", jsonObjects);
......@@ -832,6 +1131,21 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
}
});
equipmentSpecificAlarms.forEach(action -> {
if (AlarmStatusEnum.BJ.getCode() == action.getStatus()) {
alarmLogs.add(addEquipAlarmLogRecord(action));
if (ValidationUtil.isEmpty(action.getAlamContent())) {
action.setAlamContent(action.getEquipmentSpecificName() + action.getEquipmentSpecificIndexName());
}
mqttSendGateway.sendToMqtt(TopicEnum.EQDQR.getTopic(), JSONArray.toJSON(action).toString());
} else {
alarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), action.getTraceId(),
equipmentSpecificAlarmLogService, false, ""));
mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE;
}
});
// 直流中心消息推送刷新
publishDataToDCCenterPage(equipmentSpecificIndexList);
......@@ -914,7 +1228,6 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
equipmentSpecificIndex.setValue(String.valueOf(alarmFlag));
}
/**
* 泡沫罐 或 者管网压力 消息发送
*
......@@ -925,7 +1238,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
boolean alarmFlag = false;
MessageModel model = new MessageModel();
Map<String, Object> map = new HashMap<>();
if (iotDataVO.getKey().toLowerCase().equals(CAFS_FoamTank_FoamTankLevel.toLowerCase()) || iotDataVO.getKey().toLowerCase().equals(CAFS_WaterTank_WaterTankLevel.toLowerCase())) {
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) || iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel)) {
map = fireFightingSystemMapper.getFoamTankLevel(equipmentSpecificIndex.getEquipmentSpecificId());
} else {
map = fireFightingSystemMapper.getPipeNetwork(equipmentSpecificIndex.getEquipmentSpecificId());
......@@ -959,7 +1272,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
model.setRelationId(equipmentSpecificIndex.getEquipmentSpecificId().toString());
model.setIsSendApp(false);
model.setTerminal("WEB");
model.setRecivers(Arrays.asList("system"));
model.setRecivers(Collections.singletonList("system"));
Map<String, String> ext = new HashMap<>();
ext.put("content", body);
ext.put("type", "模拟量超阈值提醒");
......@@ -995,7 +1308,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
String levelDeviceId = (String) map.get("levelDeviceId");
BigDecimal add = nowValue;
if (levelDeviceId.contains(",")) {
List<String> split = Arrays.asList(levelDeviceId.split(","));
String[] split = levelDeviceId.split(",");
int i = 1;
for (String s : split) {
if (!s.trim().equals(Long.toString(equipmentSpecificIndex.getEquipmentSpecificId()))) {
......@@ -1031,7 +1344,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
model.setRelationId(map.get("id").toString());
model.setIsSendApp(false);
model.setTerminal("WEB");
model.setRecivers(Arrays.asList("system"));
model.setRecivers(Collections.singletonList("system"));
Map<String, String> ext = new HashMap<>();
ext.put("content", body);
ext.put("type", "模拟量超阈值提醒");
......@@ -1056,10 +1369,10 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
if (!ObjectUtils.isEmpty(equipmentSpecificIndex) || !ObjectUtils.isEmpty(equipmentSpecificIndex.getUnit())) {
if (UnitEnum.MM.getKey().equalsIgnoreCase(equipmentSpecificIndex.getUnit()) || UnitEnum.MM.getName().equals(equipmentSpecificIndex.getUnit())) {
BigDecimal divide = new BigDecimal(1000);
nowValue = nowValue.divide(divide, 2, BigDecimal.ROUND_HALF_UP);
nowValue = nowValue.divide(divide, 2, RoundingMode.HALF_UP);
} else if (UnitEnum.CM.getKey().equalsIgnoreCase(equipmentSpecificIndex.getUnit()) || UnitEnum.CM.getName().equals(equipmentSpecificIndex.getUnit())) {
BigDecimal divide = new BigDecimal(100);
nowValue = nowValue.divide(divide, 2, BigDecimal.ROUND_HALF_UP);
nowValue = nowValue.divide(divide, 2, RoundingMode.HALF_UP);
}
}
return nowValue;
......@@ -1083,7 +1396,6 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
return val;
}
public void carRealTimeDate(List<IotDataVO> iotDatalist, List<CarProperty> carProperties, TopicEntityVo topicEntity) {
List<CarProperty> carIndexsList = new ArrayList<>();
iotDatalist.forEach(iotDataVO -> {
......@@ -1136,92 +1448,6 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
});
}
public static List<EquipmentSpecificAlarmLog> upAlarmLogStatus(String iotCode, String equipmentSpecificIndexKey,
String traceId, IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService,
boolean flag) {
LambdaQueryWrapper<EquipmentSpecificAlarmLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(EquipmentSpecificAlarmLog::getIotCode, iotCode);
queryWrapper.eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey, equipmentSpecificIndexKey);
queryWrapper.ne(EquipmentSpecificAlarmLog::getStatus, AlarmStatusEnum.HF.getCode());
List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogService.getBaseMapper().selectList(queryWrapper);
if (!logs.isEmpty()) {
EquipmentSpecificAlarmLog log = logs.get(0);
EquipmentSpecific specific = equipmentSpecificMapper.selectById(log.getEquipmentSpecificId());
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(date);
logs.forEach(x -> {
x.setCleanTime(new Date());
x.setStatus(AlarmStatusEnum.HF.getCode());
if (!flag) {
// 若已经被确警处理过,此处不再做处理
if (StringUtils.isEmpty(x.getConfirmType())) {
x.setConfirmType(x.getType());
x.setConfirmTypeName(ConfirmAlamEnum.getTypeByCode(x.getType()));
String equipmentName = StringUtil.isNotEmpty(specific.getCode()) ? specific.getName() + "(" + specific.getCode() + ")" : specific.getName();
if (x.getType().equals(AlarmTypeEnum.PB.getCode())) {
x.setAlarmReason(equipmentName + "频繁故障/误报,将设备报警信息屏蔽。");
} else {
x.setAlarmReason(equipmentName + "引起设备报警");
}
x.setResolveResult(dateString + "系统收到设备复归(已消除)信号,系统自动处理。");
x.setConfirmUser("");
x.setConfirmUserName("系统自动处理");
x.setConfirmDate(date);
}
}
x.setEquipmentSpecificIndexValue(TrueOrFalseEnum.fake.value);
if (!StringUtils.isEmpty(traceId)) {
x.setTraceId(traceId);
}
});
equipmentSpecificAlarmLogService.updateBatchById(logs);
}
if (flag) {
List<EquipmentSpecificIndex> indexList = equipmentSpecificIndexService.getEquipmentSpeIndexBySpeIotCode(iotCode);
publishDataToCanvas(indexList);
}
return logs;
}
/**
* 画布数据消息推送
*
* @param indexList
*/
public static void publishDataToCanvas(List<EquipmentSpecificIndex> indexList) {
if (!ObjectUtils.isEmpty(indexList)) {
EquipmentSpecificIndex index = indexList.stream().filter(x -> x.getUpdateDate() != null)
.sorted(Comparator.comparing(EquipmentSpecificIndex::getUpdateDate).reversed())
.collect(Collectors.toList()).get(0);
EquipmentStateVo equipmentStateVo = new EquipmentStateVo();
equipmentStateVo.setEquipName(index.getEquipmentSpecificName());
equipmentStateVo.setOrgCode(index.getOrgCode());
equipmentStateVo.setSpecificId(index.getEquipmentSpecificId());
equipmentStateVo.setEquipCode(index.getQrCode());
equipmentStateVo.setEquipIotCode(index.getIotCode());
equipmentStateVo.setStatus("");
equipmentStateVo.setColor(index.getEmergencyLevelColor());
// 添加性能指标项
//flag 无意义 getSpeIndex 方法其他地方共用 做了额外封装 为0时走原逻辑
int flag = 0;
equipmentStateVo.setSpeindexList(fireFightingSystemService.getSpeIndex(index.getEquipmentSpecificId(), flag));
Map<String, Object> topicObject = new HashMap<>();
topicObject.put("equipCode", equipmentStateVo.getEquipCode());
if (TrueOrFalseEnum.real.value.toUpperCase().equals(index.getValue().toUpperCase())) {
topicObject.put("color", equipmentStateVo.getColor());
} else {
topicObject.put("color", "");
}
Map<String, Object> map = JSON.parseObject(JSON.toJSONString(equipmentStateVo));
topicObject.put("uuid", UUID.randomUUID().toString());
map.put(canvasTopic, topicObject);
// 发送数据至画布
mqttSendGateway.sendToMqtt(canvasTopic, JSON.toJSONString(map));
}
}
/**
* 报警消息推送amos平台
*
......@@ -1505,13 +1731,10 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
private boolean temperatureMapIsEmpty(String traceId) {
TemperatureAlarmDto dto = temperatureMap.get(traceId);
if (!ValidationUtil.isEmpty(dto) && !ValidationUtil.isEmpty(dto.getAlarmLevel())
return !ValidationUtil.isEmpty(dto) && !ValidationUtil.isEmpty(dto.getAlarmLevel())
&& !ValidationUtil.isEmpty(dto.getAlarmType()) && !ValidationUtil.isEmpty(dto.getAlarmRule())
&& !ValidationUtil.isEmpty(dto.getRuleTemperature()) && !ValidationUtil.isEmpty(dto.getTemperature())
&& !ValidationUtil.isEmpty(dto.getThermometryUnit())) {
return true;
}
return false;
&& !ValidationUtil.isEmpty(dto.getThermometryUnit());
}
/**
......@@ -1533,8 +1756,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
equipmentSpecificIndex.getValue());
equipmentSpecificAlarm.setAlamReason(equipmentSpecificAlarm.getEquipmentSpecificIndexName().replace("NB_", "")
+ ":" + NBalarmEnum.getDescByKey(enumKey));
boolean flag = false;
if (!ValidationUtil.isEmpty(equipmentSpecificAlarm.getType())
boolean flag = !ValidationUtil.isEmpty(equipmentSpecificAlarm.getType())
&& !ValidationUtil.isEmpty(equipmentSpecificAlarm.getIotCode())
&& !ValidationUtil.isEmpty(equipmentSpecificAlarm.getEquipmentSpecificIndexKey())
&& (NBalarmEnum.NB_liquid_level_state_0.getKey().equals(enumKey)
......@@ -1543,9 +1765,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
|| NBalarmEnum.NB_hydraulic_state_0.getKey().equals(enumKey)
|| NBalarmEnum.NB_hydraulic_state_2.getKey().equals(enumKey)
|| NBalarmEnum.NB_hydraulic_state_4.getKey().equals(enumKey)
|| NBalarmEnum.NB_alarm_status_4.getKey().equals(enumKey))) {
flag = true;
}
|| NBalarmEnum.NB_alarm_status_4.getKey().equals(enumKey));
return flag;
}
......@@ -2009,7 +2229,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
private List<CarIndexGisVo> createCarIndexGisVo(List<CarProperty> carProperties) {
List<CarIndexGisVo> list = new ArrayList<>();
long id = 0l;
long id = 0L;
String iotCode = "";
for (CarProperty action : carProperties) {
CarIndexGisVo v = new CarIndexGisVo();
......
......@@ -41,6 +41,7 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
......@@ -1079,4 +1080,19 @@ public class PlanTaskController extends AbstractBaseController {
planTaskService.download(request, response, taskDetailId);
}
@TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
@ApiOperation(value = "idx消防巡查报表调用", notes = "idx消防巡查报表调用")
@RequestMapping(value = "/report/info", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
public ResponseModel getPlanTaskInfoList(@ApiParam(value = "站编码") @RequestParam(required = false) String bizOrgCode,
@ApiParam(value = "开始日期") @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
@ApiParam(value = "结束日期") @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
try {
Map<String, Object> map = planTaskService.queryPatrolInfoList(bizOrgCode, startDate, endDate);
return CommonPatrolResponseUtil.success(map);
} catch (Exception e) {
log.error(e.getMessage(), e);
return CommonPatrolResponseUtil.failure("远程查询巡检信息失败!");
}
}
}
......@@ -221,4 +221,7 @@ public interface PlanTaskMapper extends BaseMapper {
List<Map<String, Object>> getStatics(@Param("bizOrgCode") String bizOrgCode);
Map<String, Object> queryPatrolInfoList(@Param(value="bizOrgCode") String bizOrgCode, @Param(value="startDate") Date startDate, @Param(value="endDate") Date endDate);
Map<String, Object> queryPatrolEquipInfo(@Param(value="bizOrgCode") String bizOrgCode, @Param(value="startDate") Date startDate, @Param(value="endDate") Date endDate);
}
......@@ -1847,6 +1847,18 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
return resultMap;
}
@Override
public Map<String, Object> queryPatrolInfoList(String bizOrgCode, Date startDate, Date endDate) {
Map<String, Object> map = new HashMap<>();
map = planTaskMapper.queryPatrolInfoList(bizOrgCode, startDate, endDate);
Map<String, Object> map1 = new HashMap<>();
map1 = planTaskMapper.queryPatrolEquipInfo(bizOrgCode, startDate, endDate);
map.put("equipment_count", map1.get("equipment_count"));
map.put("checked_equipment_count", map1.get("checked_equipment_count"));
map.put("unchecked_equipment_count", map1.get("unchecked_equipment_count"));
return map;
}
@Override
public void download(HttpServletRequest request, HttpServletResponse response, String taskDetailId) throws UnsupportedEncodingException {
......
......@@ -15,6 +15,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -197,4 +198,6 @@ public interface IPlanTaskService {
Map<String, String> preview(String taskDetailId);
void download(HttpServletRequest request, HttpServletResponse response, String taskDetailId) throws UnsupportedEncodingException;
Map<String,Object> queryPatrolInfoList(String bizOrgCode, Date startDate, Date endDate);
}
package com.yeejoin.amos.patrol.business.util;
import org.springframework.http.HttpStatus;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
public class CommonPatrolResponseUtil
{
private CommonPatrolResponseUtil() {
}
public static ResponseModel success()
{
ResponseModel res = new ResponseModel<>();
res.setDevMessage(Constant.RESULT_SUCCESS);
res.setStatus(HttpStatus.OK.value());
return res;
}
public static ResponseModel success(Object obj)
{
ResponseModel<Object> res = new ResponseModel<>();
res.setResult(obj);
res.setDevMessage(Constant.RESULT_SUCCESS);
res.setStatus(HttpStatus.OK.value());
return res;
}
public static ResponseModel success(Object obj, String message)
{
ResponseModel res = new ResponseModel<>();
res.setResult(obj);
res.setDevMessage(message);
res.setStatus(HttpStatus.OK.value());
return res;
}
public static ResponseModel failure()
{
ResponseModel res = new ResponseModel<>();
res.setDevMessage(Constant.RESULT_FAILURE);
res.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
return res;
}
public static ResponseModel failure(String message)
{
ResponseModel res = new ResponseModel<>();
res.setDevMessage(Constant.RESULT_FAILURE);
res.setMessage(message);
res.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
return res;
}
public static ResponseModel failure(Object obj, String message)
{
ResponseModel res = new ResponseModel<>();
res.setResult(obj);
res.setMessage(message);
res.setDevMessage(Constant.RESULT_FAILURE);
res.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
return res;
}
}
package com.yeejoin.amos.patrol.business.util;
/**
* @Description: 常量类
* @Author: duanwei
* @Date: 2019/7/29
*/
public interface Constant {
String RESULT_SUCCESS = "SUCCESS";
String RESULT_FAILURE = "FAILURE";
/**
* 请求成功
*/
String SUCCESS = "200";
String NULL = "";
/**
* 数字换流站大小屏数据编码
* //fireResources(资源概率);fireCAFSSys(CAFS系统);fireAlarmSys(火灾报警系统);
* fireONLSys(排油系统);fireFoamSys(泡沫灭火系统);
* fireWaterSys(消防给水系统);fireFoamMistSys(细水雾涡扇炮系统)
*/
String threeBigTopicfireResources = "threeBigTopicfireResources";
String threeSmallTopicfireResources = "threeSmallTopicfireResources";
String fourBigTopicfireResources = "fourBigTopicfireResources";
String fourSmallTopicfireResources = "fourSmallTopicfireResources";
String threeBigTopicfireCAFSSys = "threeBigTopicfireCAFSSys";
String threeSmallTopicfireCAFSSys = "threeSmallTopicfireCAFSSys";
String fourSmallTopicfireCAFSSys = "fourSmallTopicfireCAFSSys";
String threeBigTopicfireAlarmSys = "threeBigTopicfireAlarmSys";
String threeSmallTopicfireAlarmSys = "threeSmallTopicfireAlarmSys";
String fourSmallTopicfireAlarmSys = "fourSmallTopicfireAlarmSys";
String threeBigTopicfireONLSys = "threeBigTopicfireONLSys";
String threeSmallTopicfireONLSys = "threeSmallTopicfireONLSys";
String fourSmallTopicfireONLSys = "fourSmallTopicfireONLSys";
String threeBigTopicfireFoamSys = "threeBigTopicfireFoamSys";
String threeSmallTopicfireFoamSys = "threeSmallTopicfireFoamSys";
String fourSmallTopicfireFoamSys = "fourSmallTopicfireFoamSys";
String threeBigTopicfireWaterSys = "threeBigTopicfireWaterSys";
String threeSmallTopicfireWaterSys = "threeSmallTopicfireWaterSys";
String fourSmallTopicfireWaterSys = "fourSmallTopicfireWaterSys";
String threeBigTopicfireFoamMistSys = "threeBigTopicfireFoamMistSys";
String threeSmallTopicfireFoamMistSys = "threeSmallTopicfireFoamMistSys";
String fourSmallTopicfireFoamMistSys = "fourSmallTopicfireFoamMistSys";
}
......@@ -328,7 +328,12 @@ public class JobService implements IJobService {
check.setRouteId(arg.getRouteId());
check.setCheckTime(arg.getEndTime());
check.setIsOk(CheckStatusEnum.OMISSION.getCode());
check = iCheckDao.saveAndFlush(check);
try {
check = iCheckDao.save(check);
} catch (InnerInvokException e) {
e.printStackTrace();
}
iCheckDao.flush();
checkList.add(check);
checkMap.put(arg.getPointId(), check);
checkIds.add(check.getId());
......
......@@ -95,6 +95,9 @@
<if test="bizOrgCode != null and bizOrgCode != ''">
AND biz_org_code like CONCAT(#{bizOrgCode},'%')
</if>
<if test="systemStatus != null and systemStatus != ''">
AND system_status = #{systemStatus}
</if>
<if test="companyCode != null and companyCode != ''">
AND biz_org_code = #{companyCode}
</if>
......
......@@ -215,6 +215,7 @@
wles.biz_org_name as bizOrgName
FROM wl_equipment_specific_alarm_log wlesal
LEFT JOIN wl_equipment_specific wles ON wlesal.equipment_specific_id = wles.id
LEFT JOIN wl_warehouse_structure wws ON wles.warehouse_structure_id = wws.id
LEFT JOIN wl_equipment_detail wled ON wles.equipment_detail_id = wled.id
LEFT JOIN wl_equipment we ON wled.equipment_id = we.id
<where>
......@@ -241,19 +242,18 @@
<if test="param.system != null and param.system != ''">
AND find_in_set(#{param.system},wles.system_id)
</if>
<if test="param.buildIds!=null">
-- AND wlesal.build_id IN
AND wles.warehouse_structure_id IN
<foreach item="item" collection="param.buildIds" separator=","
open="(" close=")" index="">#{item}
</foreach>
<if test="param.buildIds!=null and param.buildIds.size() > 0">
AND find_in_set(#{param.buildIds}, wles.warehouse_structure_id)
</if>
<if test="param.buildingName != null and param.buildingName != ''">
AND wws.full_name LIKE CONCAT('%', #{param.buildingName}, '%')
</if>
<if test="param.id!=null and param.id!=''">AND wlesal.equipment_specific_id = #{param.id}</if>
<if test="param.cleanStatus != null and param.cleanStatus != '' and param.cleanStatus == 1">AND
wlesal.clean_time IS NOT NULL
</if>
<if test="param.systemCode != null and param.systemCode != ''">AND
wlesal.system_codes = #{systemCode}
wlesal.system_codes = #{param.systemCode}
</if>
<if test="param.cleanStatus != null and param.cleanStatus != '' and param.cleanStatus == 2">AND
wlesal.clean_time IS NULL
......@@ -1511,7 +1511,7 @@
ORDER BY
`result`.`click_date`
</select>
<select id="pressureMessage" resultType="java.util.Map">
select
(
......@@ -1561,8 +1561,8 @@
and wes.biz_org_code like concat(#{orgCode}, "%")
</if>
) as startNum) as startNum
</select>
</select>
<select id="stationInfo" resultType="java.util.Map">
SELECT
a.`name`,
......
......@@ -522,7 +522,7 @@
</select>
<!-- 根据信号索引查询装备性能指标 -->
<select id="getEquipmentSpeIndexByIndexAddress"
<select id="getEquipmentSpeIndexByAddress"
resultType="com.yeejoin.equipmanage.common.entity.EquipmentSpecificIndex">
SELECT wesi.id AS id,
wei.name_key AS nameKey,
......@@ -561,10 +561,16 @@
LEFT JOIN wl_equipment_specific AS wes ON wes.id = wesi.equipment_specific_id
LEFT JOIN wl_equipment_detail ed ON ed.id = wes.equipment_detail_id
LEFT JOIN wl_equipment_index AS wei ON wei.id = wesi.equipment_index_id
WHERE
wesi.index_address = #{indexAddress}
<if test="gatewayId != null">
AND wesi.gateway_id = #{gatewayId}
</if>
<where>
<if test="indexAddress != null">
AND wesi.index_address = #{indexAddress}
</if>
<if test="eventAddress != null">
AND wesi.event_address = #{eventAddress}
</if>
<if test="gatewayId != null">
AND wesi.gateway_id = #{gatewayId}
</if>
</where>
</select>
</mapper>
\ No newline at end of file
......@@ -8,7 +8,7 @@
</parent>
<artifactId>amos-boot-system-patrol</artifactId>
<version>3.7.0.9</version>
<version>3.7.1.0</version>
<dependencies>
<dependency>
......
......@@ -1455,4 +1455,135 @@
</if>
</select>
<select id="queryPatrolInfoList" resultType="Map">
SELECT
IFNULL(COUNT(temp.plan_task_id), 0) AS task_count,
IFNULL(SUM(IF(finish_status=2, 1, 0)), 0) AS complete_task_count,
IFNULL(SUM(IF((finish_status=0 OR finish_status=1 OR finish_status=3), 1, 0)), 0) AS uncomplete_task_count,
temp.person_count AS person_count,
temp.certified_person_count AS certified_person_count,
IFNULL(SUM(temp.point_num), 0) AS checked_point_count
FROM
(
SELECT
pt.id AS task_id,
r.`name` route_name,
pt.route_id,
p.`name` plan_name,
pt.plan_id,
pt.id AS plan_task_id,
pt.begin_time,
pt.end_time,
pt.user_name,
pt.user_id,
IF
(
pt.user_id IS NOT NULL,(
LENGTH( pt.user_id ) - LENGTH(
REPLACE ( pt.user_id, ',', '' )) + 1
),
0
) AS person_count,
(
SELECT
IF
(
SUM( is_certificate ) IS NULL,
0,
SUM( is_certificate ))
FROM
`cb_org_usr`
WHERE
FIND_IN_SET( amos_org_id, pt.user_id ) > 0
) AS certified_person_count,
pt.point_num,
pt.finish_num,
pt.finish_status,
p.org_code,
p.biz_org_code AS biz_org_code,
p.biz_org_name AS biz_org_name,
pt.end_time AS `date`
FROM
`p_plan_task` pt
LEFT JOIN p_plan p ON p.id = pt.plan_id
LEFT JOIN p_route r ON r.id = pt.route_id
<where>
<if test="bizOrgCode != null">
p.biz_org_code LIKE CONCAT(#{bizOrgCode}, '%')
</if>
<if test="startDate != null">
AND DATE_FORMAT(pt.end_time, '%Y-%m-%d') &gt;= DATE_FORMAT(#{startDate}, '%Y-%m-%d')
</if>
<if test="endDate != null">
AND DATE_FORMAT(pt.end_time, '%Y-%m-%d') &lt;= DATE_FORMAT(#{endDate}, '%Y-%m-%d')
</if>
</where>
) temp
</select>
<select id="queryPatrolEquipInfo" resultType="Map">
SELECT
IFNULL(COUNT(temp.eq_id IS NOT NULL), 0) AS equipment_count,
IFNULL(SUM(IF((temp.check_status=2 OR temp.check_status=1 AND temp.eq_id IS NOT NULL), 1, 0)), 0) AS checked_equipment_count,
IFNULL(SUM(IF((temp.check_status=3 AND temp.eq_id IS NOT NULL), 1, 0)), 0) AS unchecked_equipment_count
FROM
(
SELECT
ci.id,
es.org_code,
pp.biz_org_code AS biz_org_code,
pp.biz_org_name AS biz_org_name,
c.point_id,
c.point_name,
ci.input_name,
ci.input_value,
c.check_time,
pt.end_time AS `date`,
c.plan_id,
c.plan_name,
c.route_id,
c.route_name,
ci.is_ok AS check_status,
c.user_id,
c.user_name,
c.dep_id,
c.dep_name,
es.id AS eq_id,
es.NAME eq_name,
es.`code` eq_code,
( SELECT GROUP_CONCAT( ffs.NAME ) FROM f_fire_fighting_system ffs WHERE find_in_set( ffs.id, es.system_id ) ) AS system_name,
CONCAT( pt.id, '' ) AS plan_task_id,
pt.end_time AS plan_completion_time,
c.id AS check_id,
p.point_no,
cou.`code` AS company_code,
es.equipment_code AS equipment_type_code,
pii.item_no AS input_code,
p.point_no AS pointCode,
wws.`code` AS buildCode,
wws.full_name AS buildName
FROM
p_check_input ci
LEFT JOIN p_input_item pii ON pii.id = ci.input_id
LEFT JOIN p_check c ON c.id = ci.check_id
LEFT JOIN p_plan_task pt ON pt.id = c.plan_task_id
left join p_plan pp on pp.id = pt.plan_id
LEFT JOIN p_point_classify pc ON pc.id = ci.point_classify_id
LEFT JOIN wl_equipment_specific es ON es.id = pc.equipment_id
LEFT JOIN p_point p ON c.point_id = p.id
LEFT JOIN wl_warehouse_structure wws ON wws.id = p.risk_source_id
left join cb_org_usr cou on cou.biz_org_code = pp.biz_org_code and cou.is_delete = 0
<where>
<if test="bizOrgCode != null">
pp.biz_org_code LIKE CONCAT(#{bizOrgCode}, '%')
</if>
<if test="startDate != null">
AND DATE_FORMAT(pt.end_time, '%Y-%m-%d') &gt;= DATE_FORMAT(#{startDate}, '%Y-%m-%d')
</if>
<if test="endDate != null">
AND DATE_FORMAT(pt.end_time, '%Y-%m-%d') &lt;= DATE_FORMAT(#{endDate}, '%Y-%m-%d')
</if>
</where>
) temp
</select>
</mapper>
\ No newline at end of file
......@@ -25,8 +25,9 @@ import static com.yeejoin.amos.message.kafka.Constant.*;
@Slf4j
@Service
public class KafkaConsumerService {
private static final String MQTT_TOPIC = "romaSite/data/transmit";
private static final String MQTT_TOPIC_SHAOSHAN = "romaSite/data/shaoshan";
private static final String PROVINCE_MQTT_TOPIC = "province/data/transport";
@Autowired
protected EmqKeeper emqKeeper;
......@@ -96,26 +97,66 @@ public class KafkaConsumerService {
}
/**
* 消费单条消息,topics 可以监听多个topic,如:topics = {"topic1", "topic2"}
*
* @param message 消息
*
*/
@KafkaListener(id = "consumerSingle", idIsGroup = false, topics = "#{'${kafka.topics}'.split(',')}", concurrency = "2")
public void consumerSingle(String message, Acknowledgment ack) {
JSONObject messageObj = JSONObject.fromObject(message);
try {
String topic = messageObj.getString("topic");
JSONObject data = messageObj.getJSONObject("data");
emqKeeper.getMqttClient().publish(topic, data.toString().getBytes(StandardCharsets.UTF_8), 0, false);
ack.acknowledge();
} catch (MqttException e) {
log.error("解析数据失败,{}", e.getMessage());
}
}
/**
* 转发苏州,绍兴换流站Kafka数据对emq
*
* @param record record
* @param ack ack
* 绍兴,苏州换流站对接Kafka数据
* @param record record
*/
@KafkaListener(id = "kafkaRoma", groupId = "kafkaRoma", topics = "#{'${queue.kafka.topics}'.split(',')}", containerFactory = "kafkaRomaContainerFactory")
public void kafkaListener(ConsumerRecord<?, String> record, Acknowledgment ack) {
try {
Optional<?> messages = Optional.ofNullable(record.value());
if (messages.isPresent()) {
JSONObject messageObj = JSONObject.fromObject(record.value());
if (messageObj.getJSONObject(BODY).isEmpty()) {
messageObj.put(DATA_TYPE, STATE);
try {
JSONObject messageObj = JSONObject.fromObject(record.value());
if (messageObj.getJSONObject(BODY).isEmpty()) {
messageObj.put(DATA_TYPE, STATE);
}
emqKeeper.getMqttClient().publish(MQTT_TOPIC, messageObj.toString().getBytes(StandardCharsets.UTF_8), 0, false);
} catch (MqttException e) {
log.error("解析数据失败,{}", e.getMessage());
} finally {
ack.acknowledge();
}
emqKeeper.getMqttClient().publish(MQTT_TOPIC, messageObj.toString().getBytes(StandardCharsets.UTF_8), 0, false);
}
} catch (MqttException e) {
log.error("换流站转发Kafka消息失败" + e.getMessage(), e);
} finally {
ack.acknowledge();
}
/**
* 韶山换流对接Kafka
* @param record record
* @param ack ack
*/
@KafkaListener(id = "kafkaConsumer", groupId = "kafkaConsumerGroup", topics = "#{'${queue.kafka.shaoshan.topics}'.split(',')}", containerFactory = "kafkaRomaContainerFactory")
public void kafkaConsumer(ConsumerRecord<?, String> record, Acknowledgment ack) {
Optional<?> message = Optional.ofNullable(record.value());
if (message.isPresent()) {
try {
JSONObject messageObj = JSONObject.fromObject(record.value());
JSONObject data = messageObj.getJSONObject("body");
emqKeeper.getMqttClient().publish(MQTT_TOPIC_SHAOSHAN, data.toString().getBytes(StandardCharsets.UTF_8), 0, false);
ack.acknowledge();
} catch (MqttException e) {
log.error("解析数据失败,{}", e.getMessage());
}
}
}
......@@ -212,7 +253,6 @@ public class KafkaConsumerService {
// }
//
//
//
//kafka的监听器,topic为"zhTest",消费者组为"zhTestGroup"
//@KafkaListener(topics = "test", groupId = "zhTestGroup")
//public void listenZhugeGroup(ConsumerRecord<String, String> record, Acknowledgment ack) {
......@@ -222,6 +262,14 @@ public class KafkaConsumerService {
// //手动提交offset
// ack.acknowledge();
//}
}
// //kafka的监听器,topic为"zhTest",消费者组为"zhTestGroup"
// @KafkaListener(topics = "test", groupId = "zhTestGroup")
// public void listenZhugeGroup(ConsumerRecord<String, String> record, Acknowledgment ack) {
// String value = record.value();
// System.out.println(value);
// System.out.println(record);
// //手动提交offset
// ack.acknowledge();
// }
}
......@@ -300,8 +300,8 @@
</dependencies>
</dependencyManagement>
<repositories>
<!--<repository> <id>Releases</id> <name>Releases</name> <url>http://4v059425e3.zicp.vip:13535/nexus/content/repositories/releases/</url>
</repository> <repository> <id>Snapshots</id> <name>Snapshots</name> <url>http://4v059425e3.zicp.vip:13535/nexus/content/repositories/snapshots/</url>
<!--<repository> <id>Releases</id> <name>Releases</name> <url>http://4v059425e3.zicp.vip:13535/nexus/content/repositories/releases/</url>
</repository> <repository> <id>Snapshots</id> <name>Snapshots</name> <url>http://4v059425e3.zicp.vip:13535/nexus/content/repositories/snapshots/</url>
</repository> -->
<repository>
<id>public</id>
......@@ -351,4 +351,16 @@
<module>amos-boot-system-tdc</module>
<module>amos-boot-system-kgd</module>
</modules>
<build>
<plugins>
<plugin><!--编译跳过测试文件检查的生命周期-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment