Jelajahi Sumber

Merge branch 'dev-1.13.0' of http://192.168.1.220:10080/EHR/svr-quota into dev-1.13.0

zhangjinjun 6 tahun lalu
induk
melakukan
57427136cc
100 mengubah file dengan 3608 tambahan dan 4686 penghapusan
  1. 124 0
      .idea/uiDesigner.xml
  2. 0 1159
      ehr-cloud/pom.xml
  3. 0 605
      ehr-ms-parent-pom/pom.xml
  4. 46 17
      pom.xml
  5. 19 3
      readme.MD
  6. 6 9
      src/main/java/com/yihu/quota/SvrQuotaApplication.java
  7. 10 3
      src/main/java/com/yihu/quota/config/AsyncConfig.java
  8. 20 0
      src/main/java/com/yihu/quota/contants/MicroServiceApi.java
  9. 389 394
      src/main/java/com/yihu/quota/controller/BaseController.java
  10. 97 0
      src/main/java/com/yihu/quota/controller/DataSourcesTableController.java
  11. 91 0
      src/main/java/com/yihu/quota/controller/DataSourcesTableFieldController.java
  12. 97 0
      src/main/java/com/yihu/quota/controller/DimensionController.java
  13. 82 0
      src/main/java/com/yihu/quota/controller/DimensionMemberController.java
  14. 86 88
      src/main/java/com/yihu/quota/controller/ElasticSearchController.java
  15. 10 7
      src/main/java/com/yihu/quota/controller/ElasticSearchEndPoint.java
  16. 4 9
      src/main/java/com/yihu/quota/controller/QuotaController.java
  17. 6 6
      src/main/java/com/yihu/quota/controller/QuotaReportController.java
  18. 12 10
      src/main/java/com/yihu/quota/controller/DiabetesController.java
  19. 4 2
      src/main/java/com/yihu/quota/controller/QuotaReportStatisticsController.java
  20. 4 5
      src/main/java/com/yihu/quota/controller/SingleDiseasesController.java
  21. 142 137
      src/main/java/com/yihu/quota/controller/SolrStatisticsEndPoint.java
  22. 2 3
      src/main/java/com/yihu/quota/dao/jpa/RsResourceQuotaDao.java
  23. 2 2
      src/main/java/com/yihu/quota/dao/jpa/TjQuotaDao.java
  24. 2 2
      src/main/java/com/yihu/quota/dao/jpa/TjQuotaGovProvisionDao.java
  25. 2 2
      src/main/java/com/yihu/quota/dao/jpa/TjQuotaLogDao.java
  26. 11 0
      src/main/java/com/yihu/quota/dao/cube/CubeDao.java
  27. 11 0
      src/main/java/com/yihu/quota/dao/cube/CubeMappingDao.java
  28. 11 0
      src/main/java/com/yihu/quota/dao/cube/CubeMemberMappingDao.java
  29. 2 2
      src/main/java/com/yihu/quota/dao/jpa/dict/SystemDictDao.java
  30. 2 2
      src/main/java/com/yihu/quota/dao/jpa/dict/SystemDictListDao.java
  31. 11 0
      src/main/java/com/yihu/quota/dao/dimension/DimensionDao.java
  32. 20 0
      src/main/java/com/yihu/quota/dao/dimension/DimensionMemberDao.java
  33. 2 2
      src/main/java/com/yihu/quota/dao/jpa/dimension/TjDimensionMainDao.java
  34. 2 2
      src/main/java/com/yihu/quota/dao/jpa/dimension/TjDimensionSlaveDao.java
  35. 2 2
      src/main/java/com/yihu/quota/dao/jpa/dimension/TjQuotaDimensionMainDao.java
  36. 2 2
      src/main/java/com/yihu/quota/dao/jpa/dimension/TjQuotaDimensionSlaveDao.java
  37. 2 2
      src/main/java/com/yihu/quota/dao/jpa/save/TjDataSaveDao.java
  38. 2 2
      src/main/java/com/yihu/quota/dao/jpa/save/TjQuotaDataSaveDao.java
  39. 12 0
      src/main/java/com/yihu/quota/dao/source/DataSourcesTableDao.java
  40. 21 0
      src/main/java/com/yihu/quota/dao/source/DataSourcesTableFieldDao.java
  41. 2 2
      src/main/java/com/yihu/quota/dao/jpa/source/TjDataSourceDao.java
  42. 2 2
      src/main/java/com/yihu/quota/dao/jpa/source/TjQuotaDataSourceDao.java
  43. 11 11
      src/main/java/com/yihu/quota/etl/Contant.java
  44. 10 26
      src/main/java/com/yihu/quota/etl/ExtractConverUtil.java
  45. 0 24
      src/main/java/com/yihu/quota/etl/conver/Convert.java
  46. 26 25
      src/main/java/com/yihu/quota/etl/conver/AgeConvert.java
  47. 24 0
      src/main/java/com/yihu/quota/etl/convert/Convert.java
  48. 6 4
      src/main/java/com/yihu/quota/etl/conver/ConvertHelper.java
  49. 33 34
      src/main/java/com/yihu/quota/etl/extract/ExtractHelper.java
  50. 97 102
      src/main/java/com/yihu/quota/etl/extract/ExtractPercentHelper.java
  51. 91 91
      src/main/java/com/yihu/quota/etl/extract/ExtractUtil.java
  52. 146 150
      src/main/java/com/yihu/quota/etl/extract/es/EsExtract.java
  53. 154 160
      src/main/java/com/yihu/quota/etl/extract/es/EsResultExtract.java
  54. 3 6
      src/main/java/com/yihu/quota/etl/extract/mysql/MysqlExtract.java
  55. 18 17
      src/main/java/com/yihu/quota/etl/extract/solr/SolrExtract.java
  56. 44 0
      src/main/java/com/yihu/quota/etl/formula/AgeGroup.java
  57. 29 0
      src/main/java/com/yihu/quota/etl/formula/DateFunc.java
  58. 25 0
      src/main/java/com/yihu/quota/etl/formula/Days.java
  59. 35 0
      src/main/java/com/yihu/quota/etl/formula/Division.java
  60. 8 0
      src/main/java/com/yihu/quota/etl/formula/Functioner.java
  61. 4 3
      src/main/java/com/yihu/quota/etl/model/DbConfig.java
  62. 0 1
      src/main/java/com/yihu/quota/etl/model/EsConfig.java
  63. 15 21
      src/main/java/com/yihu/quota/etl/save/ExtractDataWithRunnable.java
  64. 22 23
      src/main/java/com/yihu/quota/etl/save/LargDataWithRunnable.java
  65. 6 5
      src/main/java/com/yihu/quota/etl/save/SaveHelper.java
  66. 38 37
      src/main/java/com/yihu/quota/etl/save/es/ElastricSearchSave.java
  67. 0 67
      src/main/java/com/yihu/quota/etl/util/EsClientUtil.java
  68. 33 0
      src/main/java/com/yihu/quota/feign/RedisClient.java
  69. 30 0
      src/main/java/com/yihu/quota/feign/RsDictClient.java
  70. 18 0
      src/main/java/com/yihu/quota/kafka/ConsumerListener.java
  71. 87 0
      src/main/java/com/yihu/quota/kafka/KafkaConsumerConfig.java
  72. 2 2
      src/main/java/com/yihu/quota/model/jpa/RsResourceQuota.java
  73. 236 0
      src/main/java/com/yihu/quota/model/TjQuota.java
  74. 1 1
      src/main/java/com/yihu/quota/model/jpa/TjQuotaGovProvision.java
  75. 2 2
      src/main/java/com/yihu/quota/model/jpa/TjQuotaLog.java
  76. 73 0
      src/main/java/com/yihu/quota/model/cube/Cube.java
  77. 91 0
      src/main/java/com/yihu/quota/model/cube/CubeMapping.java
  78. 74 0
      src/main/java/com/yihu/quota/model/cube/CubeMemberMapping.java
  79. 120 0
      src/main/java/com/yihu/quota/model/dict/SystemDict.java
  80. 158 0
      src/main/java/com/yihu/quota/model/dict/SystemDictList.java
  81. 100 0
      src/main/java/com/yihu/quota/model/dimension/Dimension.java
  82. 90 0
      src/main/java/com/yihu/quota/model/dimension/DimensionMember.java
  83. 2 2
      src/main/java/com/yihu/quota/model/jpa/dimension/TjDimensionMain.java
  84. 179 0
      src/main/java/com/yihu/quota/model/dimension/TjDimensionSlave.java
  85. 86 0
      src/main/java/com/yihu/quota/model/dimension/TjQuotaDimensionMain.java
  86. 1 5
      src/main/java/com/yihu/quota/model/jpa/dimension/TjQuotaDimensionSlave.java
  87. 0 229
      src/main/java/com/yihu/quota/model/jpa/TjQuota.java
  88. 0 117
      src/main/java/com/yihu/quota/model/jpa/dict/SystemDict.java
  89. 0 152
      src/main/java/com/yihu/quota/model/jpa/dict/SystemDictList.java
  90. 0 172
      src/main/java/com/yihu/quota/model/jpa/dimension/TjDimensionSlave.java
  91. 0 84
      src/main/java/com/yihu/quota/model/jpa/dimension/TjQuotaDimensionMain.java
  92. 0 180
      src/main/java/com/yihu/quota/model/jpa/save/TjDataSave.java
  93. 0 76
      src/main/java/com/yihu/quota/model/jpa/save/TjQuotaDataSave.java
  94. 0 173
      src/main/java/com/yihu/quota/model/jpa/source/TjDataSource.java
  95. 0 83
      src/main/java/com/yihu/quota/model/jpa/source/TjQuotaDataSource.java
  96. 0 47
      src/main/java/com/yihu/quota/model/rest/HospitalComposeModel.java
  97. 0 30
      src/main/java/com/yihu/quota/model/rest/QuotaReport.java
  98. 0 39
      src/main/java/com/yihu/quota/model/rest/QuotaTreeModel.java
  99. 6 2
      src/main/java/com/yihu/quota/model/rest/ResultModel.java
  100. 0 0
      src/main/java/com/yihu/quota/model/save/TjDataSave.java

+ 124 - 0
.idea/uiDesigner.xml

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Palette2">
    <group name="Swing">
      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
      </item>
      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
      </item>
      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
        <initial-values>
          <property name="text" value="Button" />
        </initial-values>
      </item>
      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="RadioButton" />
        </initial-values>
      </item>
      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="CheckBox" />
        </initial-values>
      </item>
      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
        <initial-values>
          <property name="text" value="Label" />
        </initial-values>
      </item>
      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
          <preferred-size width="150" height="-1" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
          <preferred-size width="150" height="50" />
        </default-constraints>
      </item>
      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
          <preferred-size width="200" height="200" />
        </default-constraints>
      </item>
      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
          <preferred-size width="200" height="200" />
        </default-constraints>
      </item>
      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
      </item>
      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
      </item>
      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
      </item>
      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
          <preferred-size width="-1" height="20" />
        </default-constraints>
      </item>
      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
      </item>
      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
      </item>
    </group>
  </component>
</project>

+ 0 - 1159
ehr-cloud/pom.xml

@ -1,1159 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yihu.ehr</groupId>
    <artifactId>ehr-cloud</artifactId>
    <version>1.2.0</version>
    <packaging>pom</packaging>
    <name>ehr-cloud</name>
    <description>EHR parent pom for all</description>
    <url>http://ehr.yihu.com</url>
    <organization>
        <name>JKZL Software, Inc.</name>
        <url>http://www.yihu.com</url>
    </organization>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
        </license>
    </licenses>
    <developers>
        <developer>
            <id>sand</id>
            <name>Sand Wen</name>
            <email>sand.fj.wen@gmail.com</email>
            <organization>JKZL Software, Inc.</organization>
            <organizationUrl>http://www.yihu.com</organizationUrl>
            <roles>
                <role>Project lead</role>
                <role>Project designer</role>
                <role>Project programmer</role>
            </roles>
        </developer>
        <developer>
            <id>yzh</id>
            <name>叶泽华</name>
            <email>yzh@qq.com</email>
            <organization>JKZL Software, Inc.</organization>
            <organizationUrl>http://www.yihu.com</organizationUrl>
            <roles>
                <role>Project programmer</role>
            </roles>
        </developer>
        <developer>
            <id>cws</id>
            <name>陈维山</name>
            <email>hill9868@qq.com</email>
            <organization>JKZL Software, Inc.</organization>
            <organizationUrl>http://www.yihu.com</organizationUrl>
            <roles>
                <role>Project programmer</role>
            </roles>
        </developer>
        <developer>
            <id>hzy</id>
            <name>黄志勇</name>
            <email>hzy@qq.com</email>
            <organization>JKZL Software, Inc.</organization>
            <organizationUrl>http://www.yihu.com</organizationUrl>
            <roles>
                <role>Project programmer</role>
            </roles>
        </developer>
    </developers>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <version.spring-framework>4.3.13.RELEASE</version.spring-framework>
        <version.spring-boot>1.5.9.RELEASE</version.spring-boot>
        <version.spring-cloud-starter>1.3.2.RELEASE</version.spring-cloud-starter>
        <version.spring-cloud>1.4.2.RELEASE</version.spring-cloud>
        <version.spring-security>4.2.3.RELEASE</version.spring-security>
        <version.spring-oauth2>2.0.14.RELEASE</version.spring-oauth2>
        <version.spring-session>1.3.1.RELEASE</version.spring-session>
        <version.spring-session-hazelcast>2.0.1.RELEASE</version.spring-session-hazelcast>
        <version.spring-data-commons>1.13.9.RELEASE</version.spring-data-commons>
        <version.spring-data-hadoop>2.2.0.RELEASE</version.spring-data-hadoop>
        <version.spring-data-solr>2.1.3.RELEASE</version.spring-data-solr>
        <version.spring-data-redis>1.7.1.RELEASE</version.spring-data-redis>
        <version.spring-data-jpa>1.11.10.RELEASE</version.spring-data-jpa>
        <version.spring-kafka>1.0.5.RELEASE</version.spring-kafka>
        <version.commons-bean-utils>1.9.2</version.commons-bean-utils>
        <version.commons-codec>1.9</version.commons-codec>
        <version.commons-collections>3.2.1</version.commons-collections>
        <version.commons-compress>1.9</version.commons-compress>
        <version.commons-dbcp2>2.1.1</version.commons-dbcp2>
        <version.commons-dbutils>1.6</version.commons-dbutils>
        <version.commons-io>2.4</version.commons-io>
        <version.commons-lang3>3.2.1</version.commons-lang3>
        <version.commons-pool2>2.4.2</version.commons-pool2>
        <version.zookeeper>3.4.6</version.zookeeper>
        <version.hadoop-client>2.6.5</version.hadoop-client>
        <version.hbase-client>1.1.1</version.hbase-client>
        <version.solr>5.5.4</version.solr>
        <version.hibernate>4.3.11.Final</version.hibernate>
        <version.hibernate-validator>6.0.10.Final</version.hibernate-validator>
        <version.hibernate-jpa-api>1.0.0.Final</version.hibernate-jpa-api>
        <version.http-core>4.4.3</version.http-core>
        <version.http-client>4.5.1</version.http-client>
        <version.http-mime>4.5.1</version.http-mime>
        <version.io-dropwizard-metrics>3.1.2</version.io-dropwizard-metrics>
        <version.java>1.8</version.java>
        <version.jackson>2.6.6</version.jackson>
        <version.jedis>2.9.0</version.jedis>
        <version.jcl-over-slf4j>1.7.19</version.jcl-over-slf4j>
        <version.jul-over-slf4j>1.7.21</version.jul-over-slf4j>
        <version.joda-time>2.8.2</version.joda-time>
        <version.junit>4.12</version.junit>
        <version.logging>1.2</version.logging>
        <version.log4j>1.2.17</version.log4j>
        <version.log4j2>2.4.1</version.log4j2>
        <version.logback>1.1.7</version.logback>
        <version.mysql>5.1.45</version.mysql>
        <version.pinyin4j>2.5.0</version.pinyin4j>
        <version.quartz>2.2.3</version.quartz>
        <version.servlet-api>3.1.0</version.servlet-api>
        <version.slf4j>1.7.21</version.slf4j>
        <version.statsd-client>3.1.0</version.statsd-client>
        <version.swagger>2.7.0</version.swagger>
        <version.swagger-ui>2.7.0</version.swagger-ui>
        <version.thrift>0.9.1</version.thrift>
        <version.tomcat-embed>8.5.27</version.tomcat-embed>
        <version.websocket-api>1.1</version.websocket-api>
        <version.zip4j>1.3.2</version.zip4j>
        <version.poi>3.12</version.poi>
        <version.scala>2.10.6</version.scala>
        <version.elasticsearch>2.1.0</version.elasticsearch>
        <version.elasticsearch-sql>2.4.1.0</version.elasticsearch-sql>
        <version.jest>2.4.0</version.jest>
        <version.alibaba-druid>1.0.15</version.alibaba-druid>
        <version.feign>9.5.0</version.feign>
        <version.hystrix>1.5.10</version.hystrix>
        <version.archaius>0.7.5</version.archaius>
        <version.ehr>1.2.0</version.ehr>
        <version.eip>1.3.1</version.eip>
        <version.json>20160212</version.json>
        <version.json-lib>2.4</version.json-lib>
        <version.fastjson>1.2.17</version.fastjson>
        <version.commons-net>3.3</version.commons-net>
        <version.jxl>2.6</version.jxl>
        <version.fastdfs>1.27</version.fastdfs>
        <version.spring.boot.admin>1.5.7</version.spring.boot.admin>
        <version.jettison>1.3.7</version.jettison>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!--<dependency>-->
                <!--<groupId>org.springframework.boot</groupId>-->
                <!--<artifactId>spring-boot-dependencies</artifactId>-->
                <!--<version>1.5.9.RELEASE</version>-->
                <!--<type>pom</type>-->
                <!--<scope>import</scope>-->
            <!--</dependency>-->
            <!--<dependency>-->
                <!--<groupId>org.springframework.cloud</groupId>-->
                <!--<artifactId>spring-cloud-dependencies</artifactId>-->
                <!--<version>Finchley.M5</version>-->
                <!--<type>pom</type>-->
                <!--<scope>import</scope>-->
            <!--</dependency>-->
            <!-- Base library-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${version.servlet-api}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${version.junit}</version>
                <scope>test</scope>
            </dependency>
            <!-- Spring framework family -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-messaging</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-oxm</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${version.spring-framework}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework.kafka/spring-kafka -->
            <dependency>
                <groupId>org.springframework.kafka</groupId>
                <artifactId>spring-kafka</artifactId>
                <version>${version.spring-kafka}</version>
            </dependency>
            <!-- Spring boot family -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-actuator</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-batch</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${version.spring-boot}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
                <version>${version.spring-boot}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Spring cloud family -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter</artifactId>
                <version>${version.spring-cloud-starter}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-archaius</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-eureka</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zuul</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
                <version>${version.spring-cloud}</version>
            </dependency>
            <!-- Feign -->
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-core</artifactId>
                <version>${version.feign}</version>
            </dependency>
            <!-- Hystrix -->
            <dependency>
                <groupId>com.netflix.hystrix</groupId>
                <artifactId>hystrix-core</artifactId>
                <version>${version.hystrix}</version>
            </dependency>
            <!-- Archaius -->
            <dependency>
                <groupId>com.netflix.archaius</groupId>
                <artifactId>archaius-core</artifactId>
                <version>${version.archaius}</version>
            </dependency>
            <!-- Spring data family -->
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-commons</artifactId>
                <version>${version.spring-data-commons}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-hadoop-hbase</artifactId>
                <version>${version.spring-data-hadoop}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-solr</artifactId>
                <version>${version.spring-data-solr}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Spring session family-->
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-hazelcast</artifactId>
                <version>${version.spring-session-hazelcast}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session</artifactId>
                <version>${version.spring-session}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
                <version>${version.spring-session}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Spring Security -->
            <!--<dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
                <version>${version.spring-security}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-core</artifactId>
                <version>${version.spring-security}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-crypto</artifactId>
                <version>${version.spring-security}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
                <version>${version.spring-security}</version>
                <scope>${dependency.scope}</scope>
            </dependency>-->
            <!-- Oauth2 -->
            <dependency>
                <groupId>org.springframework.security.oauth</groupId>
                <artifactId>spring-security-oauth2</artifactId>
                <version>${version.spring-oauth2}</version>
                <scope>${dependency.scope}</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.security</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--Jackson library -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${version.jackson}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${version.jackson}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${version.jackson}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Http library -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>${version.http-core}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>${version.http-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpmime</artifactId>
                <version>${version.http-mime}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!--Apache commons library -->
            <dependency>
                <groupId>org.codehaus.woodstox</groupId>
                <artifactId>stax2-api</artifactId>
                <version>3.1.4</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.codehaus.woodstox</groupId>
                <artifactId>woodstox-core-asl</artifactId>
                <version>4.4.1</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.noggit</groupId>
                <artifactId>noggit</artifactId>
                <version>0.6</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${version.commons-lang3}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>${version.poi}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>${version.commons-bean-utils}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>${version.commons-pool2}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>commons-dbutils</groupId>
                <artifactId>commons-dbutils</artifactId>
                <version>${version.commons-dbutils}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>${version.commons-dbcp2}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${version.commons-io}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>${version.commons-collections}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${version.commons-codec}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>${version.commons-compress}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Mysql library -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${version.mysql}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Hibernate framework library -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${version.hibernate}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${version.hibernate-validator}</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>${version.hibernate}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.1-api</artifactId>
                <version>${version.hibernate-jpa-api}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Zookeeper library -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${version.zookeeper}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Hadoop library -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-annotations</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-auth</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-distcp</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-common</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-core</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-shuffle</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-streaming</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-yarn-api</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-yarn-client</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-yarn-common</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-yarn-server-common</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-yarn-server-nodemanager</artifactId>
                <version>${version.hadoop-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-client</artifactId>
                <version>${version.hbase-client}</version>
                <scope>${dependency.scope}</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-common</artifactId>
                <version>${version.hbase-client}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-protocol</artifactId>
                <version>${version.hbase-client}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- export library -->
            <dependency>
                <groupId>net.sourceforge.jexcelapi</groupId>
                <artifactId>jxl</artifactId>
                <version>${version.jxl}</version>
            </dependency>
            <!-- Google library -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>18.0</version>
            </dependency>
            <dependency>
                <groupId>com.google.code.findbugs</groupId>
                <artifactId>jsr305</artifactId>
                <version>3.0.1</version>
            </dependency>
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.6.2</version>
            </dependency>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>2.5.0</version>
            </dependency>
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>4.1.0</version>
            </dependency>
            <!-- Solr library -->
            <dependency>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-core</artifactId>
                <version>${version.solr}</version>
                <scope>${dependency.scope}</scope>
                <exclusions>
                    <exclusion>
                        <groupId>commons-lang</groupId>
                        <artifactId>commons-lang</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-solrj</artifactId>
                <version>${version.solr}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-lang</groupId>
                        <artifactId>commons-lang</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Elasticsearch -->
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>${version.elasticsearch}</version>
            </dependency>
            <dependency>
                <groupId>org.nlpcn</groupId>
                <artifactId>elasticsearch-sql</artifactId>
                <version>${version.elasticsearch-sql}</version>
            </dependency>
            <!-- Jest -->
            <dependency>
                <groupId>io.searchbox</groupId>
                <artifactId>jest</artifactId>
                <version>${version.jest}</version>
            </dependency>
            <!-- Redis library -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${version.jedis}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- FastDFS library -->
            <dependency>
                <groupId>org.csource</groupId>
                <artifactId>fastdfs-client-java</artifactId>
                <version>${version.fastdfs}</version>
            </dependency>
            <!-- Quartz library -->
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
                <version>${version.quartz}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz-jobs</artifactId>
                <version>${version.quartz}</version>
            </dependency>
            <!-- Zip library -->
            <dependency>
                <groupId>net.lingala.zip4j</groupId>
                <artifactId>zip4j</artifactId>
                <version>${version.zip4j}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Pinyin library -->
            <dependency>
                <groupId>com.belerweb</groupId>
                <artifactId>pinyin4j</artifactId>
                <version>${version.pinyin4j}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Swagger-ui library -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${version.swagger}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${version.swagger-ui}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- date Time util library -->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>${version.joda-time}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.thrift</groupId>
                <artifactId>libthrift</artifactId>
                <version>${version.thrift}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>com.timgroup</groupId>
                <artifactId>java-statsd-client</artifactId>
                <version>${version.statsd-client}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>io.dropwizard.metrics</groupId>
                <artifactId>metrics-core</artifactId>
                <version>${version.io-dropwizard-metrics}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Log framework library -->
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>${version.logging}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${version.log4j}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${version.slf4j}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${version.logback}</version>
                <scope>${dependency.scope}</scope>
            </dependency>
            <!-- Alibaba -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${version.alibaba-druid}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${version.fastjson}</version>
            </dependency>
            <!-- Spring Boot Admin -->
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-server</artifactId>
                <version>${version.spring.boot.admin}</version>
            </dependency>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-server-ui</artifactId>
                <version>${version.spring.boot.admin}</version>
            </dependency>
            <!-- Extend library-->
            <dependency>
                <groupId>org.codehaus.jettison</groupId>
                <artifactId>jettison</artifactId>
                <version>${version.jettison}</version>
            </dependency>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>${version.json}</version>
            </dependency>
            <dependency>
                <groupId>net.sf.json-lib</groupId>
                <artifactId>json-lib</artifactId>
                <version>${version.json-lib}</version>
            </dependency>
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>${version.commons-net}</version>
            </dependency>
            <!-- 个推相关 -->
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>gexin-rp-sdk-http</artifactId>
                <version>4.0.1.17</version>
            </dependency>
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>gexin-rp-fastjson</artifactId>
                <version>1.0.0.1</version>
            </dependency>
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>gexin-rp-sdk-base</artifactId>
                <version>4.0.0.22</version>
            </dependency>
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>gexin-rp-sdk-template</artifactId>
                <version>4.0.0.16</version>
            </dependency>
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>2.5.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <repositories>
        <repository>
            <id>public</id>
            <name>public</name>
            <url>http://172.19.103.43:8081/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>public</name>
            <url>http://172.19.103.43:8081/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
    <build>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-ssh</artifactId>
                <version>2.10</version>
            </extension>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-http-lightweight</artifactId>
                <version>2.10</version>
            </extension>
        </extensions>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArguments>
                        <verbose/>
                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
                <version>3.1</version>
            </plugin>
        </plugins>
    </build>
</project>

+ 0 - 605
ehr-ms-parent-pom/pom.xml

@ -1,605 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.yihu.ehr</groupId>
        <artifactId>ehr-cloud</artifactId>
        <version>1.2.0</version>
    </parent>
    <artifactId>ehr-ms-parent-pom</artifactId>
    <packaging>pom</packaging>
    <description>EHR micro service parent pom</description>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jooq</groupId>
                    <artifactId>jooq-codegen-maven</artifactId>
                    <version>${jooq.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.7</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.5.1</version>
                    <configuration>
                        <recompressZippedFiles>false</recompressZippedFiles>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>2.5</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.10</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <version>2.9</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.18</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-help-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.5</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>2.10.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.7</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.3</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.3</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.maven.doxia</groupId>
                            <artifactId>doxia-module-markdown</artifactId>
                            <version>1.5</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>2.4</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.18.1</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.5</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.9.1</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.3.2</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                    <version>2.1.11</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${version.spring-boot}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.17</version>
                <executions>
                    <execution>
                        <id>checkstyle-validation</id>
                        <phase>validate</phase>
                        <configuration>
                            <skip>true</skip>
                            <configLocation>src/checkstyle/checkstyle.xml</configLocation>
                            <suppressionsLocation>src/checkstyle/checkstyle-suppressions.xml</suppressionsLocation>
                            <headerLocation>src/checkstyle/checkstyle-header.txt</headerLocation>
                            <propertyExpansion>checkstyle.build.directory=${project.build.directory}</propertyExpansion>
                            <encoding>UTF-8</encoding>
                            <consoleOutput>true</consoleOutput>
                            <failsOnError>true</failsOnError>
                            <includeTestSourceDirectory>true</includeTestSourceDirectory>
                        </configuration>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${version.java}</source>
                    <target>${version.java}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <id>enforce-rules</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireJavaVersion>
                                    <version>[1.8,)</version>
                                </requireJavaVersion>
                                <!--<requireProperty>
                                    <property>main.basedir</property>
                                </requireProperty>-->
                                <!--<requireProperty>
                                    <property>project.organization.name</property>
                                </requireProperty>-->
                                <!--<requireProperty>
                                    <property>project.name</property>
                                </requireProperty>-->
                                <!--<requireProperty>
                                    <property>project.description</property>
                                </requireProperty>-->
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>**/*Tests.java</include>
                    </includes>
                    <excludes>
                        <exclude>**/Abstract*.java</exclude>
                    </excludes>
                    <!--<systemPropertyVariables>-->
                    <!--<java.security.egd>file:/dev/./urandom</java.security.egd>-->
                    <!--<java.awt.headless>true</java.awt.headless>-->
                    <!--</systemPropertyVariables>-->
                    <argLine>-Xmx1024m</argLine>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>animal-sniffer-maven-plugin</artifactId>
                <configuration>
                    <skip>${disable.checks}</skip>
                    <signature>
                        <groupId>org.codehaus.mojo.signature</groupId>
                        <artifactId>java16</artifactId>
                        <version>1.0</version>
                    </signature>
                    <annotations>
                        <annotation>org.springframework.lang.UsesJava8</annotation>
                        <annotation>org.springframework.lang.UsesJava7</annotation>
                        <annotation>org.springframework.boot.lang.UsesUnsafeJava</annotation>
                    </annotations>
                </configuration>
                <executions>
                    <execution>
                        <id>enforce-java-6</id>
                        <phase>test</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>-->
        </plugins>
    </build>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-admin-gateway-model</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-data-elasticsearch</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-data-fastdfs</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-data-hbase</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-data-mysql</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-data-query</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-data-redis</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-data-solr</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-ehr-constants</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-entity</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <!--<dependency>-->
            <!--<groupId>com.yihu.ehr</groupId>-->
            <!--<artifactId>commons-metrics</artifactId>-->
            <!--<version>${version.ehr}</version>-->
            <!--</dependency>-->
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-profile-core</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-redis-mq</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-rest-model</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.hos</groupId>
                <artifactId>common-rest-model</artifactId>
                <version>${version.eip}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-ui-swagger</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-util</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-web</artifactId>
                <version>${version.ehr}</version>
            </dependency>
            <!--<dependency>
                <groupId>com.yihu.ehr</groupId>
                <artifactId>commons-metrics</artifactId>
                <version>${version.ehr}</version>
            </dependency>-->
        </dependencies>
    </dependencyManagement>
    <!--
    profiles分为三种场景(dev,test,prod),三种部署模式(jar,war,docker).预计是9种模式,
    但目前仅使用到dev,test,prod的jar,test的war.若有需要可以组合配置这些部署模式.
    - dev的可执行jar包,在本机调试,不需要配置wagon参数。
    - test,prod的可执行jar包,需要在编译后传送到服务器上部署,故需配置wagon参数,参数可根据服务需要自行配置。
    - dev,test,prod的war包,编译后使用tomcat api部署,故需配置tomcat参数,参数可根据服务需要自行配置。
    -->
    <profiles>
        <profile>
            <id>dev-jar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <skipTests>true</skipTests>
                <packaging.type>jar</packaging.type>
                <dependency.scope>compile</dependency.scope>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </dependency>
                <!--<dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <scope>${dependency.scope}</scope>
                </dependency>-->
            </dependencies>
        </profile>
        <profile>
            <id>test-jar</id>
            <properties>
                <skipTests>true</skipTests>
                <packaging.type>jar</packaging.type>
                <dependency.scope>compile</dependency.scope>
                <wagonServerId/>
                <wagonUrl/>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>wagon-maven-plugin</artifactId>
                        <version>1.0</version>
                        <configuration>
                            <serverId>${wagonServerId}</serverId>
                            <fromFile>${project.build.directory}/${project.build.finalName}.jar</fromFile>
                            <url>${wagonUrl}</url>
                            <commands>
                                <command>pkill -f ${project.build.finalName}.jar</command>
                                <command>nohub java -Djava.security.egd=file:/dev/./urandom -jar
                                    ${project.build.finalName}.jar &amp;
                                </command>
                            </commands>
                            <displayCommandOutputs>true</displayCommandOutputs>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <exclusions>
                        <exclusion>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-starter-logging</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <scope>${dependency.scope}</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>test-war</id>
            <activation>
                <property>
                    <name>spring.profiles.active</name>
                    <value>default,test</value>
                </property>
            </activation>
            <properties>
                <skipTests>true</skipTests>
                <packaging.type>war</packaging.type>
                <dependency.scope>provided</dependency.scope>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <scope>${dependency.scope}</scope>
                    <exclusions>
                        <exclusion>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-starter-logging</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <scope>${dependency.scope}</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <scope>${dependency.scope}</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat7-maven-plugin</artifactId>
                        <version>2.2</version>
                        <configuration>
                            <url>http://localhost:8080/manager/text</url>
                            <server>tomcat8</server>
                            <username>deployer</username>
                            <password>jkzldeployer</password>
                            <path>/${project.artifactId}</path>
                            <update>true</update>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>prod-jar</id>
            <activation>
                <property>
                    <name>spring.profiles.active</name>
                    <value>default,prod</value>
                </property>
            </activation>
            <properties>
                <skipTests>true</skipTests>
                <packaging.type>war</packaging.type>
                <dependency.scope>compile</dependency.scope>
                <wagonServerId>11.1.2.21</wagonServerId>
                <wagonUrl>scp://user:password@11.1.2.21/home/root/ehr-release</wagonUrl>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <scope>${dependency.scope}</scope>
                    <exclusions>
                        <exclusion>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-starter-logging</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>prod-war</id>
            <properties>
                <skipTests>true</skipTests>
                <packaging.type>war</packaging.type>
                <dependency.scope>provided</dependency.scope>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <scope>${dependency.scope}</scope>
                    <exclusions>
                        <exclusion>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-starter-logging</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <scope>${dependency.scope}</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <scope>${dependency.scope}</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

+ 46 - 17
pom.xml

@ -3,27 +3,29 @@
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ehr-ms-parent-pom</artifactId>
        <groupId>com.yihu.ehr</groupId>
        <version>1.2.0</version>
        <relativePath>ehr-ms-parent-pom/pom.xml</relativePath>
        <artifactId>ehr-cloud-parent</artifactId>
        <version>1.13.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>svr-quota</artifactId>
    <packaging>${packaging.type}</packaging>
    <version>1.13.0</version>
    <packaging>jar</packaging>
    <dependencies>
        <!-- true1 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <scope>${dependency.scope}</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
@ -32,7 +34,6 @@
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <scope>${dependency.scope}</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
@ -42,7 +43,6 @@
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>${dependency.scope}</scope>
        </dependency>
        <dependency>
@ -95,37 +95,30 @@
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-data-hbase</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-profile-core</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-data-query</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-rest-model</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-ehr-constants</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-data-redis</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-util</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
@ -135,5 +128,41 @@
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-entity</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>kafka-clients</artifactId>
                    <groupId>org.apache.kafka</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-data-mysql</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

+ 19 - 3
readme.MD

@ -1,14 +1,30 @@
## 包结构
- config:配置
- controller:控制器
- dao.jpa:dao层
- dao:dao层
- etl:etl相关
- job:执行的job
- model.jpa:数据库的映射
- model:数据库的映射
- service:服务层
- util:工具类
- vo:modelvo
    
    
## 相关资料
powerdesign:https://192.168.1.103:888/svn/outwindow/基础开发部/doc/i健康2.0
power design: https://192.168.1.103:888/svn/outwindow/基础开发部/doc/i健康2.0
表结构有更新,建议直接用PNG图片放在工程目录下,对于理解已够用。
![]()
## 规范相关
- 代码中不要出现Application之外的main函数。这些main函数通常被用来做测试代码的入口。如果需要写测试代码就用Test的方式创建测试样例。
## 改造点说明
- dao, model下的jpa目录去除,我们只使用jpa的方式
- util目录做了部分统一,未完全整理
- service和controller目录下新增special目录,表示特例(special case),将一些特殊的查询,如单病种等,
- scheduler清理任务及新增special目录
- 合并ElasticsearchUtil和EsClientUtil。
增加util类很多时候就是为了去除面向对象的复制性,将类对象函数化,然调用过程更加方便。
如果在封装Util时有多个Util,实际上是增加了复杂度?为什么不用原生类呢?
- 

+ 6 - 9
src/main/java/com/yihu/quota/SvrQuotaApplication.java

@ -1,8 +1,6 @@
package com.yihu.quota;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@ -14,18 +12,17 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.web.config.EnableSpringDataWebSupport;
/**
 * Created by janseny on 2017/06/16.
 * @author janseny
 * @date 2017/06/16
 */
@Configuration
@EnableAutoConfiguration(exclude = {
        SecurityAutoConfiguration.class})
@ComponentScan(basePackages = { "com.yihu" })
@ComponentScan(basePackages = {"com.yihu"})
@EnableFeignClients
@EnableDiscoveryClient //服务注册到发现服务
@EnableDiscoveryClient
@EnableEurekaClient
@EnableSpringDataWebSupport
@EnableJpaRepositories(basePackages="com.yihu.quota.dao.jpa")
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.yihu.quota.dao")
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class SvrQuotaApplication {
    public static void main(String[] args) {

+ 10 - 3
src/main/java/com/yihu/quota/config/AsyncConfig.java

@ -15,12 +15,19 @@ import java.util.concurrent.Executor;
@Configuration
@EnableAsync
public class AsyncConfig {
    /** 如果池中的实际线程数小于corePoolSize,无论是否其中有空闲的线程,都会给新的任务产生新的线程 */
    /**
     * 如果池中的实际线程数小于corePoolSize,无论是否其中有空闲的线程,都会给新的任务产生新的线程
     */
    private int corePoolSize = 5;
    /** 如果池中的线程数=maximumPoolSize,则有空闲线程使用空闲线程,否则新任务放入queueCapacity. */
    /**
     * 如果池中的线程数=maximumPoolSize,则有空闲线程使用空闲线程,否则新任务放入queueCapacity.
     */
    private int maxPoolSize = 20;
    /** 缓冲队列. */
    /**
     * 缓冲队列.
     */
    private int queueCapacity = 10;
    @Bean
    public Executor dbExtractExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

+ 20 - 0
src/main/java/com/yihu/quota/contants/MicroServiceApi.java

@ -0,0 +1,20 @@
package com.yihu.quota.contants;
/**
 * @author l4qiang
 */
public interface MicroServiceApi {
    interface Service {
        String RESOURCE = "svr-resource";
        String REDIS = "svr-redis";
    }
    interface Resource {
        String DICT_ENTRY = "cache/dict-entry";
    }
    interface Redis {
        String ORG_NAME = "/redis/orgName";
        String ORG_AREA = "/redis/orgArea";
    }
}

+ 389 - 394
src/main/java/com/yihu/quota/controller/BaseController.java

@ -16,421 +16,416 @@ import java.util.Map;
public class BaseController {
	private static Logger logger = LoggerFactory.getLogger(BaseController.class);
    private static Logger logger = LoggerFactory.getLogger(BaseController.class);
	@Autowired
	protected HttpServletRequest request;
    @Autowired
    protected HttpServletRequest request;
	/**
	 * 獲取髮送請求用戶的uid
	 * @return
	 */
	public String getUID() {
		try {
			String userAgent = request.getHeader("userAgent");
			if(StringUtils.isEmpty(userAgent)){
				userAgent = request.getHeader("User-Agent");
			}
			JSONObject json = new JSONObject(userAgent);
			return json.getString("uid");
			
		} catch (Exception e) {
			return null;
		}
	}
    /**
     * 獲取髮送請求用戶的uid
     *
     * @return
     */
    public String getUID() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("uid");
	public String getOpenid() {
		try {
			String userAgent = request.getHeader("userAgent");
			if(StringUtils.isEmpty(userAgent)){
				userAgent = request.getHeader("User-Agent");
			}
			JSONObject json = new JSONObject(userAgent);
			return json.getString("openid");
			
		} catch (Exception e) {
			return null;
		}
	}
	
	/**
	 * 获取用户ID
	 * @return
	 */
	public long getId() {
		try {
			String userAgent = request.getHeader("userAgent");
			if(StringUtils.isEmpty(userAgent)){
				userAgent = request.getHeader("User-Agent");
			}
			JSONObject json = new JSONObject(userAgent);
			return json.getLong("id");
		} catch (Exception e) {
			return 0;
		}
	}
        } catch (Exception e) {
            return null;
        }
    }
	public String getIMEI() {
		try {
			String userAgent = request.getHeader("userAgent");
			if(StringUtils.isEmpty(userAgent)){
				userAgent = request.getHeader("User-Agent");
			}
			JSONObject json = new JSONObject(userAgent);
			return json.getString("imei");
		} catch (Exception e) {
			return null;
		}
	}
	
	public String getToken() {
		try {
			String userAgent = request.getHeader("userAgent");
			if(StringUtils.isEmpty(userAgent)){
				userAgent = request.getHeader("User-Agent");
			}
			JSONObject json = new JSONObject(userAgent);
			return json.getString("token");
		} catch (Exception e) {
			return null;
		}
	}
    public String getOpenid() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("openid");
	public void error(Exception e) {
		logger.error(getClass().getName() + ":", e.getMessage());
		e.printStackTrace();
	}
        } catch (Exception e) {
            return null;
        }
    }
	public void warn(Exception e) {
		logger.warn(getClass().getName() + ":", e.getMessage());
		e.printStackTrace();
	}
    /**
     * 获取用户ID
     *
     * @return
     */
    public long getId() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getLong("id");
        } catch (Exception e) {
            return 0;
        }
    }
	/**
	 * 返回接口处理结果
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @return
	 */
	public String error(int code, String msg) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", code);
			map.put("msg", msg);
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return null;
		}
	}
    public String getIMEI() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("imei");
        } catch (Exception e) {
            return null;
        }
    }
	/**
	 * 接口处理成功
	 * @param msg
	 * @return
	 */
	public String success(String msg) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", 200);
			map.put("msg", msg);
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return null;
		}
	}
    public String getToken() {
        try {
            String userAgent = request.getHeader("userAgent");
            if (StringUtils.isEmpty(userAgent)) {
                userAgent = request.getHeader("User-Agent");
            }
            JSONObject json = new JSONObject(userAgent);
            return json.getString("token");
        } catch (Exception e) {
            return null;
        }
    }
	public String write(int code, String msg) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", code);
			map.put("msg", msg);
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return null;
		}
	}
    public void error(Exception e) {
        logger.error(getClass().getName() + ":", e.getMessage());
        e.printStackTrace();
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @return
	 */
	public String write(int code, String msg, String key, List<?> list) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", code);
			map.put("msg", msg);
			map.put(key, list);
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    public void warn(Exception e) {
        logger.warn(getClass().getName() + ":", e.getMessage());
        e.printStackTrace();
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @param value 结果数据
	 * @return
	 */
	public String write(int code, String msg, String key, JSONObject value) {
		try {
			JSONObject json = new JSONObject();
			json.put("status", code);
			json.put("msg", msg);
			json.put(key, value);
			return json.toString();
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code 结果码,成功为200
     * @param msg  结果提示信息
     * @return
     */
    public String error(int code, String msg) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return null;
        }
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @param value 结果数据
	 * @return
	 */
	public String write(int code, String msg, String key, JSONArray value) {
		try {
			JSONObject json = new JSONObject();
			json.put("status", code);
			json.put("msg", msg);
			json.put(key, value);
			return json.toString();
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 接口处理成功
     *
     * @param msg
     * @return
     */
    public String success(String msg) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", 200);
            map.put("msg", msg);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return null;
        }
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @param total 总数
	 * @param value 结果数据
	 * @return
	 */
	public String write(int code, String msg, int total, String key, JSONArray value) {
		try {
			JSONObject json = new JSONObject();
			json.put("status", code);
			json.put("msg", msg);
			json.put("total", total);
			json.put(key, value);
			return json.toString();
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    public String write(int code, String msg) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return null;
        }
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @param value 结果数据
	 * @return
	 */
	public String write(int code, String msg, String key, Object value) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", code);
			map.put("msg", msg);
			map.put(key, value);
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code 结果码,成功为200
     * @param msg  结果提示信息
     * @return
     */
    public String write(int code, String msg, String key, List<?> list) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, list);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @return
	 */
	public String write(int code, String msg, String key, Page<?> list) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", code);
			map.put("msg", msg);
			// 是否为第一页
			map.put("isFirst", list.isFirst());
			// 是否为最后一页
			map.put("isLast", list.isLast());
			// 总条数
			map.put("total", list.getTotalElements());
			// 总页数
			map.put("totalPages", list.getTotalPages());
			map.put(key, list.getContent());
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, JSONObject value) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            json.put(key, value);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
	/**
	 * 返回接口处理结果
	 *
	 *
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @return
	 */
	public String write(int code, String msg, String key, Page<?> page, JSONArray array) {
		try {
			JSONObject json = new JSONObject();
			json.put("status", code);
			json.put("msg", msg);
			// 是否为第一页
			json.put("isFirst", page.isFirst());
			// 是否为最后一页
			json.put("isLast", page.isLast());
			// 总条数
			json.put("total", page.getTotalElements());
			// 总页数
			json.put("totalPages", page.getTotalPages());
			json.put(key, array);
			return json.toString();
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, JSONArray value) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            json.put(key, value);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @param value 结果数据
	 * @return
	 */
	public String write(int code, String msg, String key, Map<?, ?> value) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", code);
			map.put("msg", msg);
			map.put(key, value);
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param total 总数
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, int total, String key, JSONArray value) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            json.put("total", total);
            json.put(key, value);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
	/**
	* 返回接口处理结果
	*
	* @param code 结果码,成功为200
	* @param msg 结果提示信息
	* @param value 结果数据
	* @return
	*/
	public String write(int code, String msg, String key, String value) {
		try {
			Map<Object, Object> map = new HashMap<Object, Object>();
			ObjectMapper mapper = new ObjectMapper();
			map.put("status", code);
			map.put("msg", msg);
			map.put(key, value);
			return mapper.writeValueAsString(map);
		} catch (Exception e) {
			error(e);
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, Object value) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, value);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code 结果码,成功为200
     * @param msg  结果提示信息
     * @return
     */
    public String write(int code, String msg, String key, Page<?> list) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            // 是否为第一页
            map.put("isFirst", list.isFirst());
            // 是否为最后一页
            map.put("isLast", list.isLast());
            // 总条数
            map.put("total", list.getTotalElements());
            // 总页数
            map.put("totalPages", list.getTotalPages());
            map.put(key, list.getContent());
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
	/**
	 * 返回接口处理结果
	 * 
	 * 
	 * @param code 结果码,成功为200
	 * @param msg 结果提示信息
	 * @return
	 */
	public String write(int code, String msg, boolean isFirst, boolean isLast, long total, int totalPages, String key, Object values) {
		try {
			JSONObject json = new JSONObject();
			json.put("status", code);
			json.put("msg", msg);
			// 是否为第一页
			json.put("isFirst", isFirst);
			// 是否为最后一页
			json.put("isLast", isLast);
			// 总条数
			json.put("total", total);
			// 总页数
			json.put("totalPages", totalPages);
			json.put(key, values);
			return json.toString();
		} catch (Exception e) {
			logger.error("BaseController:", e.getMessage());
			return error(-1, "服务器异常,请稍候再试!");
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code 结果码,成功为200
     * @param msg  结果提示信息
     * @return
     */
    public String write(int code, String msg, String key, Page<?> page, JSONArray array) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            // 是否为第一页
            json.put("isFirst", page.isFirst());
            // 是否为最后一页
            json.put("isLast", page.isLast());
            // 总条数
            json.put("total", page.getTotalElements());
            // 总页数
            json.put("totalPages", page.getTotalPages());
            json.put(key, array);
            return json.toString();
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
	public String trimEnd(String param, String trimChars) {
		if (param.endsWith(trimChars)) {
			param = param.substring(0, param.length() - trimChars.length());
		}
		return param;
	}
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, Map<?, ?> value) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, value);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
	/**
	 * 无效用户消息返回
	 * @param e
	 * @param defaultCode
	 * @param defaultMsg
	 * @return
	 */
	public String invalidUserException(Exception e, int defaultCode, String defaultMsg) {
		try {
			// if (e instanceof UndeclaredThrowableException) {
			// UndeclaredThrowableException ute = (UndeclaredThrowableException) e;
			// InvalidUserException iue = (InvalidUserException) ute.getUndeclaredThrowable();
			// if (iue != null) {
			// return error(iue.getCode(), iue.getMsg());
			// }
			// }
			return error(defaultCode, defaultMsg);
		} catch (Exception e2) {
			return null;
		}
	}
    /**
     * 返回接口处理结果
     *
     * @param code  结果码,成功为200
     * @param msg   结果提示信息
     * @param value 结果数据
     * @return
     */
    public String write(int code, String msg, String key, String value) {
        try {
            Map<Object, Object> map = new HashMap<Object, Object>();
            ObjectMapper mapper = new ObjectMapper();
            map.put("status", code);
            map.put("msg", msg);
            map.put(key, value);
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            error(e);
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    /**
     * 返回接口处理结果
     *
     * @param code 结果码,成功为200
     * @param msg  结果提示信息
     * @return
     */
    public String write(int code, String msg, boolean isFirst, boolean isLast, long total, int totalPages, String key, Object values) {
        try {
            JSONObject json = new JSONObject();
            json.put("status", code);
            json.put("msg", msg);
            // 是否为第一页
            json.put("isFirst", isFirst);
            // 是否为最后一页
            json.put("isLast", isLast);
            // 总条数
            json.put("total", total);
            // 总页数
            json.put("totalPages", totalPages);
            json.put(key, values);
            return json.toString();
        } catch (Exception e) {
            logger.error("BaseController:", e.getMessage());
            return error(-1, "服务器异常,请稍候再试!");
        }
    }
    public String trimEnd(String param, String trimChars) {
        if (param.endsWith(trimChars)) {
            param = param.substring(0, param.length() - trimChars.length());
        }
        return param;
    }
    /**
     * 无效用户消息返回
     *
     * @param e
     * @param defaultCode
     * @param defaultMsg
     * @return
     */
    public String invalidUserException(Exception e, int defaultCode, String defaultMsg) {
        try {
            // if (e instanceof UndeclaredThrowableException) {
            // UndeclaredThrowableException ute = (UndeclaredThrowableException) e;
            // InvalidUserException iue = (InvalidUserException) ute.getUndeclaredThrowable();
            // if (iue != null) {
            // return error(iue.getCode(), iue.getMsg());
            // }
            // }
            return error(defaultCode, defaultMsg);
        } catch (Exception e2) {
            return null;
        }
    }
}

+ 97 - 0
src/main/java/com/yihu/quota/controller/DataSourcesTableController.java

@ -0,0 +1,97 @@
package com.yihu.quota.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.source.DataSourcesTable;
import com.yihu.quota.model.source.DataSourcesTableField;
import com.yihu.quota.service.source.DataSourcesTableFieldService;
import com.yihu.quota.service.source.DataSourcesTableService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.net.URLDecoder;
import java.util.List;
/**
 * Created by wxw on 2018/9/10.
 *
 * @author wxw.
 */
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(value = "DataSourcesTableController", description = "OLAP-数据源中表", tags = {"OLAP-数据源中表"})
public class DataSourcesTableController {
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private DataSourcesTableService dataSourcesService;
    @Autowired
    private DataSourcesTableFieldService dataSourcesFieldService;
    @RequestMapping(value = "/olap/searchDataSources", method = RequestMethod.GET)
    @ApiOperation(value = "根据查询条件查询,具有分页功能;filters='id=1'")
    public Envelop searchDataSources(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档", defaultValue = "+type")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page) throws Exception {
        Envelop envelop = new Envelop();
        List<DataSourcesTable> search = dataSourcesService.search(fields, filters, sorts, page, size);
        if (null != search && search.size() > 0) {
            for (DataSourcesTable table : search) {
                List<DataSourcesTableField> list = dataSourcesFieldService.search("tableId=" + table.getId());
                if (null != list && list.size() > 0) {
                    table.setDataSourcesTableFields(list);
                }
            }
        }
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(search);
        return envelop;
    }
    @RequestMapping(value = "/olap/saveOrUpdateDataSources", method = RequestMethod.POST)
    @ApiOperation(value = "添加或修改操作")
    public Envelop saveOrUpdateDataSources(
            @ApiParam(name = "model", value = "json数据模型", defaultValue = "")
            @RequestParam String model) throws Exception {
        Envelop envelop = new Envelop();
        DataSourcesTable dataSourcesTable = objectMapper.readValue(URLDecoder.decode(model, "UTF-8"), DataSourcesTable.class);
        if (null == dataSourcesTable.getId()) {
            // 新增
            dataSourcesService.save(dataSourcesTable);
        } else {
            // 修改
            dataSourcesService.save(dataSourcesTable);
        }
        envelop.setSuccessFlg(true);
        return envelop;
    }
    @RequestMapping(value = "/olap/deleteDataSourceById", method = RequestMethod.DELETE)
    @ApiOperation(value = "根据id删除")
    public Envelop deleteDataSourceById(
            @ApiParam(name = "id", value = "编号", defaultValue = "")
            @RequestParam(value = "id") Integer id) throws Exception {
        Envelop envelop = new Envelop();
        dataSourcesService.deleteById(id);
        envelop.setSuccessFlg(true);
        return envelop;
    }
}

+ 91 - 0
src/main/java/com/yihu/quota/controller/DataSourcesTableFieldController.java

@ -0,0 +1,91 @@
package com.yihu.quota.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.source.DataSourcesTableField;
import com.yihu.quota.service.source.DataSourcesTableFieldService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.net.URLDecoder;
import java.util.List;
/**
 * Created by wxw on 2018/9/10.
 *
 * @author wxw.
 */
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(value = "DataSourcesTableFieldController", description = "OLAP-数据源表字段对应表", tags = {"OLAP-数据源表字段对应表"})
public class DataSourcesTableFieldController {
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private DataSourcesTableFieldService dataSourcesFieldService;
    @RequestMapping(value = "/olap/searchDSField", method = RequestMethod.GET)
    @ApiOperation(value = "根据查询条件查询,具有分页功能;filters='id=1'")
    public Envelop searchDSField(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档", defaultValue = "+tableId")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page) throws Exception {
        Envelop envelop = new Envelop();
        List<DataSourcesTableField> search = dataSourcesFieldService.search(fields, filters, sorts, page, size);
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(search);
        return envelop;
    }
    @RequestMapping(value = "/olap/saveOrUpdateDSField", method = RequestMethod.POST)
    @ApiOperation(value = "添加或修改操作")
    public Envelop saveOrUpdateDSField(
            @ApiParam(name = "model", value = "json数据模型", defaultValue = "")
            @RequestParam String model) throws Exception {
        Envelop envelop = new Envelop();
        DataSourcesTableField dimensionMember = objectMapper.readValue(URLDecoder.decode(model, "UTF-8"), DataSourcesTableField.class);
        // 判断字段类型是否是允许的类型
        boolean allowType = dataSourcesFieldService.isAllowType(dimensionMember.getFieldType());
        if (!allowType) {
            // 不是允许的类型
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg("不被允许的字段类型");
            return envelop;
        }
        if (null == dimensionMember.getId()) {
            // 新增
            dataSourcesFieldService.save(dimensionMember);
        } else {
            dataSourcesFieldService.save(dimensionMember);
        }
        envelop.setSuccessFlg(true);
        return envelop;
    }
    @RequestMapping(value = "/olap/deleteDSFieldById", method = RequestMethod.DELETE)
    @ApiOperation(value = "根据id删除")
    public Envelop deleteOlapDMById(
            @ApiParam(name = "id", value = "编号", defaultValue = "")
            @RequestParam(value = "id") Integer id) throws Exception {
        Envelop envelop = new Envelop();
        dataSourcesFieldService.delete(id);
        envelop.setSuccessFlg(true);
        return envelop;
    }
}

+ 97 - 0
src/main/java/com/yihu/quota/controller/DimensionController.java

@ -0,0 +1,97 @@
package com.yihu.quota.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.dimension.Dimension;
import com.yihu.quota.model.dimension.DimensionMember;
import com.yihu.quota.service.dimension.DimensionMemberService;
import com.yihu.quota.service.dimension.DimensionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.net.URLDecoder;
import java.util.List;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(value = "DimensionController", description = "OLAP-维度表", tags = {"OLAP-维度表"})
public class DimensionController extends BaseController {
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private DimensionService dimensionService;
    @Autowired
    private DimensionMemberService dimensionMemberService;
    @RequestMapping(value = "/olap/searchDimension", method = RequestMethod.GET)
    @ApiOperation(value = "根据查询条件查询,具有分页功能;filters='id=1'")
    public Envelop searchDimension(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档", defaultValue = "+dict")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page) throws Exception {
        Envelop envelop = new Envelop();
        List<Dimension> search = dimensionService.search(fields, filters, sorts, page, size);
        if (null != search && search.size() > 0) {
            for (Dimension dimension : search) {
                List<DimensionMember> list = dimensionMemberService.search("dimensionId=" + dimension.getId());
                if (null != list && list.size() > 0) {
                    dimension.setDimensionMembers(list);
                }
            }
        }
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(search);
        return envelop;
    }
    @RequestMapping(value = "/olap/saveOrUpdateDimension", method = RequestMethod.POST)
    @ApiOperation(value = "添加或修改操作")
    public Envelop saveOrUpdateDimension(
            @ApiParam(name = "model", value = "json数据模型", defaultValue = "")
            @RequestParam String model) throws Exception {
        Envelop envelop = new Envelop();
        Dimension dimension = objectMapper.readValue(URLDecoder.decode(model, "UTF-8"), Dimension.class);
        if (null == dimension.getId()) {
            // 新增
            Integer id = dimensionService.saveDimension(dimension);
            if (null != id) {
                envelop.setSuccessFlg(true);
            }
        } else {
            dimensionService.save(dimension);
            envelop.setSuccessFlg(true);
        }
        return envelop;
    }
    @RequestMapping(value = "/olap/deleteDimensionById", method = RequestMethod.DELETE)
    @ApiOperation(value = "根据id删除")
    public Envelop deleteDimensionById(
            @ApiParam(name = "id", value = "编号", defaultValue = "")
            @RequestParam(value = "id") Integer id) throws Exception {
        Envelop envelop = new Envelop();
        dimensionService.deleteDimension(id);
        envelop.setSuccessFlg(true);
        return envelop;
    }
}

+ 82 - 0
src/main/java/com/yihu/quota/controller/DimensionMemberController.java

@ -0,0 +1,82 @@
package com.yihu.quota.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.dimension.DimensionMember;
import com.yihu.quota.service.dimension.DimensionMemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.net.URLDecoder;
import java.util.List;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(value = "DimensionMemberController", description = "OLAP-维度成员表", tags = {"OLAP-维度成员表"})
public class DimensionMemberController extends BaseController {
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private DimensionMemberService dimensionMemberService;
    @RequestMapping(value = "/olap/searchDimensionMenber", method = RequestMethod.GET)
    @ApiOperation(value = "根据查询条件查询,具有分页功能;filters='id=1'")
    public Envelop searchDimensionMenber(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档", defaultValue = "+level")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page) throws Exception {
        Envelop envelop = new Envelop();
        List<DimensionMember> search = dimensionMemberService.search(fields, filters, sorts, page, size);
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(search);
        return envelop;
    }
    @RequestMapping(value = "/olap/saveOrUpdateDimensionMember", method = RequestMethod.POST)
    @ApiOperation(value = "添加或修改操作")
    public Envelop saveDimension(
            @ApiParam(name = "model", value = "json数据模型", defaultValue = "")
            @RequestParam String model) throws Exception {
        Envelop envelop = new Envelop();
        DimensionMember dimensionMember = objectMapper.readValue(URLDecoder.decode(model, "UTF-8"), DimensionMember.class);
        if (null == dimensionMember.getId()) {
            // 新增
            dimensionMemberService.save(dimensionMember);
            envelop.setSuccessFlg(true);
        } else {
            dimensionMemberService.save(dimensionMember);
            envelop.setSuccessFlg(true);
        }
        return envelop;
    }
    @RequestMapping(value = "/olap/deleteDMById", method = RequestMethod.DELETE)
    @ApiOperation(value = "根据id删除")
    public Envelop deleteDMById(
            @ApiParam(name = "id", value = "编号", defaultValue = "")
            @RequestParam(value = "id") Integer id) throws Exception {
        Envelop envelop = new Envelop();
        dimensionMemberService.delete(id);
        envelop.setSuccessFlg(true);
        return envelop;
    }
}

+ 86 - 88
src/main/java/com/yihu/quota/controller/ElasticSearchController.java

@ -7,8 +7,7 @@ import com.yihu.ehr.elasticsearch.ElasticSearchUtil;
import com.yihu.ehr.elasticsearch.config.ElasticSearchConfig;
import com.yihu.ehr.query.services.SolrQuery;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.etl.util.ElasticsearchUtil;
import com.yihu.quota.etl.util.EsClientUtil;
import com.yihu.quota.util.ElasticsearchUtil;
import com.yihu.quota.vo.PersonalInfoModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -44,9 +43,9 @@ import java.util.Map;
public class ElasticSearchController extends BaseController {
    @Autowired
    private  ObjectMapper objectMapper;
    private ObjectMapper objectMapper;
    @Autowired
    private EsClientUtil esClientUtil;
    private ElasticsearchUtil esClientUtil;
    @Autowired
    private ElasticsearchUtil elasticsearchUtil;
    @Autowired
@ -111,45 +110,45 @@ public class ElasticSearchController extends BaseController {
            @ApiParam(value = "core 表名,如 HealthProfile")
            @RequestParam(value = "core", required = true) String core,
            @ApiParam(name = "q", value = "查询条件 多个用  AND 拼接")
            @RequestParam(name = "q",required = true) String q,
            @RequestParam(name = "q", required = true) String q,
            @ApiParam(name = "fl", value = "展示字段 多个用  , 拼接 如 org_area,org_code,EHR_000081")
            @RequestParam(name = "fl",required = true) String fl,HttpServletResponse response
    ){
            @RequestParam(name = "fl", required = true) String fl, HttpServletResponse response
    ) {
        long rows = 0;
        List<Map<String, Object>> list = new ArrayList<>();
        try {
            HSSFWorkbook workbook = new HSSFWorkbook();
            //建立新的sheet对象(excel的表单)
            HSSFSheet sheet = workbook.createSheet("solr 数据");
            if(StringUtils.isEmpty(fl)){
            if (StringUtils.isEmpty(fl)) {
                HSSFRow row0 = sheet.createRow(0);
                row0.createCell(0).setCellValue("展示字段 不能为空");
            }else {
            } else {
                fl += ",rowkey";
            }
            String [] fields = fl.split(",");
            rows = solrQuery.count(core,q,null);
            if(rows > 50000){
            String[] fields = fl.split(",");
            rows = solrQuery.count(core, q, null);
            if (rows > 50000) {
                HSSFRow row0 = sheet.createRow(0);
                row0.createCell(0).setCellValue("数据超过五万条,数据量过大");
            }else {
                list =  solrQuery.queryReturnFieldList(core, q, null, null, 0, rows,fields);
            } else {
                list = solrQuery.queryReturnFieldList(core, q, null, null, 0, rows, fields);
                HSSFRow row0 = sheet.createRow(0);
                for(int j = 0;j < fields.length ;j++){
                for (int j = 0; j < fields.length; j++) {
                    row0.createCell(j).setCellValue(fields[j]);
                }
                for(int i = 0;i < list.size() ;i++){
                for (int i = 0; i < list.size(); i++) {
                    Map<String, Object> map = list.get(i);
                    HSSFRow row = sheet.createRow(i+1);
                    for(int j = 0;j < fields.length ;j++){
                        if(map.get(fields[j]) != null){
                    HSSFRow row = sheet.createRow(i + 1);
                    for (int j = 0; j < fields.length; j++) {
                        if (map.get(fields[j]) != null) {
                            row.createCell(j).setCellValue(map.get(fields[j]).toString());
                        }
                    }
                }
            }
            OutputStream output=response.getOutputStream();
            OutputStream output = response.getOutputStream();
            response.reset();
            response.setHeader("Content-disposition", "attachment; filename=details.xls");
            response.setContentType("application/msexcel");
@ -167,52 +166,52 @@ public class ElasticSearchController extends BaseController {
            @ApiParam(value = "json串")
            @RequestParam(value = "jsonString", required = true) String jsonString,
            @ApiParam(name = "index", value = "索引名称")
            @RequestParam(name = "index",required = true) String index,
            @RequestParam(name = "index", required = true) String index,
            @ApiParam(name = "type", value = "类型(表)名称")
            @RequestParam(name = "type",required = true) String type
    ){
            @RequestParam(name = "type", required = true) String type
    ) {
        boolean f = false;
        try {
           String clusterName = elasticSearchConfig.getClusterName();
           String nodeStr = elasticSearchConfig.getClusterNodes();
            if(StringUtils.isNotEmpty(nodeStr)){
                String [] nodes = nodeStr.split(",");
                if(nodes.length > 1){
                    String ip = nodes[0].substring(0,nodes[0].indexOf(":")-1);
            String clusterName = elasticSearchConfig.getClusterName();
            String nodeStr = elasticSearchConfig.getClusterNodes();
            if (StringUtils.isNotEmpty(nodeStr)) {
                String[] nodes = nodeStr.split(",");
                if (nodes.length > 1) {
                    String ip = nodes[0].substring(0, nodes[0].indexOf(":") - 1);
                    Client client = esClientUtil.getClient(ip, 9300, clusterName);
                    f = elasticsearchUtil.save(client,index,type,jsonString);
                    f = elasticsearchUtil.save(client, index, type, jsonString);
                    client.close();
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return  String.valueOf(f);
        return String.valueOf(f);
    }
    @RequestMapping(value = "/impFileDocument", method = RequestMethod.POST)
    @ApiOperation("文件导入elasticsearch文档数据")
    public String fileImpDocument(
            @ApiParam(name = "file", value = "file文件")
            @RequestParam(name = "file",required = true) String file,
            @RequestParam(name = "file", required = true) String file,
            @ApiParam(name = "index", value = "索引名称")
            @RequestParam(name = "index",required = true) String index,
            @RequestParam(name = "index", required = true) String index,
            @ApiParam(name = "type", value = "类型(表)名称")
            @RequestParam(name = "type",required = true) String type
    )throws Exception {
            @RequestParam(name = "type", required = true) String type
    ) throws Exception {
        boolean f = false;
        try {
            Client client = null ;
            Client client = null;
            String clusterName = elasticSearchConfig.getClusterName();
            String nodeStr = elasticSearchConfig.getClusterNodes();
            if(StringUtils.isNotEmpty(nodeStr)){
                String [] nodes = nodeStr.split(",");
                if(nodes.length > 1){
                    String ip = nodes[0].substring(0,nodes[0].indexOf(":")-1);
            if (StringUtils.isNotEmpty(nodeStr)) {
                String[] nodes = nodeStr.split(",");
                if (nodes.length > 1) {
                    String ip = nodes[0].substring(0, nodes[0].indexOf(":") - 1);
                    client = esClientUtil.getClient(ip, 9300, clusterName);
                }
            }
            if( !file.isEmpty()){
            if (!file.isEmpty()) {
                FileInputStream fis = null;
                InputStreamReader isr = null;
                BufferedReader br = null; //用于包装InputStreamReader,提高处理性能。因为BufferedReader有缓冲的,而InputStreamReader没有。
@ -227,7 +226,7 @@ public class ElasticSearchController extends BaseController {
                        jsonString = str;
                        System.out.println(jsonString);// 打印
                        //添加到es库
                        f = elasticsearchUtil.save(client,index,type,jsonString);
                        f = elasticsearchUtil.save(client, index, type, jsonString);
                    }
                } catch (FileNotFoundException e) {
                    System.out.println("找不到指定文件");
@ -248,60 +247,59 @@ public class ElasticSearchController extends BaseController {
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return  String.valueOf(f);
        return String.valueOf(f);
    }
    @RequestMapping(value = "/expDocument", method = RequestMethod.POST)
    @ApiOperation("文件导出elasticsearch文档数据")
    public String fileExpDocument(
            @ApiParam(name = "index", value = "索引名称")
            @RequestParam(name = "index",required = true) String index,
            @RequestParam(name = "index", required = true) String index,
            @ApiParam(name = "type", value = "类型(表)名称")
            @RequestParam(name = "type",required = true) String type
    )throws Exception {
            @RequestParam(name = "type", required = true) String type
    ) throws Exception {
        boolean f = false;
        try {
            Client client = null ;
            Client client = null;
            String clusterName = elasticSearchConfig.getClusterName();
            String nodeStr = elasticSearchConfig.getClusterNodes();
            if(StringUtils.isNotEmpty(nodeStr)){
                String [] nodes = nodeStr.split(",");
                if(nodes.length > 1){
                    String ip = nodes[0].substring(0,nodes[0].indexOf(":")-1);
            if (StringUtils.isNotEmpty(nodeStr)) {
                String[] nodes = nodeStr.split(",");
                if (nodes.length > 1) {
                    String ip = nodes[0].substring(0, nodes[0].indexOf(":") - 1);
                    client = esClientUtil.getClient(ip, 9300, clusterName);
                }
            }
            List<Map<String, Object>> list = elasticsearchUtil.queryList(client,index,type, null, null, 10000);
            List<Map<String, Object>> list = elasticsearchUtil.queryList(client, index, type, null, null, 10000);
            byte[] buff = new byte[]{};
            StringBuffer docmBuff = new StringBuffer();
            for(Map<String, Object> map:list){
            for (Map<String, Object> map : list) {
//                String title = "\n{”index”:{”_index”:”quota”,”_type”:”quota_test”}}";
                String document = "\n{";
                for(String key : map.keySet()){
                    if( !key.equals("id")){
                        document = document +"”" + key + "”:”" + map.get(key) +"”,";
                for (String key : map.keySet()) {
                    if (!key.equals("id")) {
                        document = document + "”" + key + "”:”" + map.get(key) + "”,";
                    }
                }
                document = document.substring(0,document.length()-1)+ "}";
                document = document.substring(0, document.length() - 1) + "}";
//                title = title.replaceAll("”","\"");
                document = document.replaceAll("”","\"");
                document = document.replaceAll("”", "\"");
//                System.out.println(title);
//                System.out.println(document);
                docmBuff = docmBuff.append(document);
            }
            buff = docmBuff.toString().getBytes();
            FileOutputStream out=new FileOutputStream("E://quota.json");
            out.write(buff,0,buff.length);
            FileOutputStream out = new FileOutputStream("E://quota.json");
            out.write(buff, 0, buff.length);
            out.close();
            client.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return  String.valueOf(f);
        return String.valueOf(f);
    }
@ -313,32 +311,32 @@ public class ElasticSearchController extends BaseController {
            @ApiParam(value = "value")
            @RequestParam(value = "value", required = true) String value,
            @ApiParam(name = "index", value = "索引名称")
            @RequestParam(name = "index",required = true) String index,
            @RequestParam(name = "index", required = true) String index,
            @ApiParam(name = "type", value = "类型(表)名称")
            @RequestParam(name = "type",required = true) String type
    ){
            @RequestParam(name = "type", required = true) String type
    ) {
        List<Map<String, Object>> list = null;
        try {
            Client client = null ;
            Client client = null;
            String clusterName = elasticSearchConfig.getClusterName();
            String nodeStr = elasticSearchConfig.getClusterNodes();
            if(StringUtils.isNotEmpty(nodeStr)){
                String [] nodes = nodeStr.split(",");
                if(nodes.length > 1){
                    String ip = nodes[0].substring(0,nodes[0].indexOf(":")-1);
            if (StringUtils.isNotEmpty(nodeStr)) {
                String[] nodes = nodeStr.split(",");
                if (nodes.length > 1) {
                    String ip = nodes[0].substring(0, nodes[0].indexOf(":") - 1);
                    client = esClientUtil.getClient(ip, 9300, clusterName);
                }
            }
            BoolQueryBuilder boolQueryBuilder =  QueryBuilders.boolQuery();
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            TermQueryBuilder termQueryQuotaCode = QueryBuilders.termQuery(term, value);
            boolQueryBuilder.must(termQueryQuotaCode);
            list = elasticsearchUtil.queryList(client,index,type, boolQueryBuilder, null, 200);
            list = elasticsearchUtil.queryList(client, index, type, boolQueryBuilder, null, 200);
            client.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return  list;
        return list;
    }
    @RequestMapping(value = "/elasticSearch/addElasticSearch", method = RequestMethod.POST)
@ -352,13 +350,13 @@ public class ElasticSearchController extends BaseController {
            @RequestParam(value = "sourceList") String sourceList) throws Exception {
        boolean f = false;
        try {
            Client client = null ;
            Client client = null;
            String clusterName = elasticSearchConfig.getClusterName();
            String nodeStr = elasticSearchConfig.getClusterNodes();
            if(StringUtils.isNotEmpty(nodeStr)){
                String [] nodes = nodeStr.split(",");
                if(nodes.length > 1){
                    String ip = nodes[0].substring(0,nodes[0].indexOf(":")-1);
            if (StringUtils.isNotEmpty(nodeStr)) {
                String[] nodes = nodeStr.split(",");
                if (nodes.length > 1) {
                    String ip = nodes[0].substring(0, nodes[0].indexOf(":") - 1);
                    client = esClientUtil.getClient(ip, 9300, clusterName);
                }
            }
@ -377,7 +375,7 @@ public class ElasticSearchController extends BaseController {
                    jsonString = str;
                    System.out.println(jsonString);// 打印
                    //添加到es库
                    f = elasticsearchUtil.save(client,index,type,jsonString);
                    f = elasticsearchUtil.save(client, index, type, jsonString);
                }
            } catch (FileNotFoundException e) {
                System.out.println("找不到指定文件");
@ -397,7 +395,7 @@ public class ElasticSearchController extends BaseController {
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return  f;
        return f;
    }
@ -406,20 +404,20 @@ public class ElasticSearchController extends BaseController {
    public void addElasticSearch(
            @ApiParam(name = "data", value = "参数")
            @RequestParam(value = "data") String data
    ){
    ) {
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        String index = "singleDiseasePersonal";
        String type = "personal_info";
        int i =0;
        while(i<2){
        int i = 0;
        while (i < 2) {
            PersonalInfoModel personalInfo = new PersonalInfoModel();
            personalInfo.setDisease("HP0047");
            personalInfo.setDiseaseName("糖尿病");
            personalInfo.setDemographicId(data);
            try {
                String sql = "SELECT count(demographicId) FROM singleDiseasePersonal where demographicId ="+data+" group by demographicId ";
                String sql = "SELECT count(demographicId) FROM singleDiseasePersonal where demographicId =" + data + " group by demographicId ";
                long count2 = elasticsearchUtil.getCountBySql(sql);
                System.out.println("结果条数 count2="+count2);
                System.out.println("结果条数 count2=" + count2);
//                List<Map<String, Object>> relist = elasticSearchUtil.findByField(index, type, "demographicId", data);
//                List<Map<String, Object>> filter = new ArrayList<>();
@ -430,14 +428,14 @@ public class ElasticSearchController extends BaseController {
//                System.out.println("结果条数 count="+count);
//                System.out.println("结果条数="+ relist.size());
//                if(relist== null || relist.size() ==0){
                if(count2 == 0){
                if (count2 == 0) {
                    Map<String, Object> source = new HashMap<>();
                    String jsonPer = objectMapper.writeValueAsString(personalInfo);
                    source = objectMapper.readValue(jsonPer, Map.class);
                    elasticSearchUtil.index(index,type, source);
                    elasticSearchUtil.index(index, type, source);
                }
                i++;
            }catch (Exception e){
            } catch (Exception e) {
                e.getMessage();
            }
        }

+ 10 - 7
src/main/java/com/yihu/quota/controller/ElasticSearchEndPoint.java

@ -17,7 +17,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * EndPoint - Es搜索服务
@ -95,7 +98,7 @@ public class ElasticSearchEndPoint extends EnvelopRestEndPoint {
            @ApiParam(name = "value2", value = "字段值", required = false)
            @RequestParam(value = "value2", required = false) String value2,
            @ApiParam(name = "dateField", value = "时间字段", required = false)
            @RequestParam(value = "dateField" , required = false) String dateField,
            @RequestParam(value = "dateField", required = false) String dateField,
            @ApiParam(name = "startDate", value = "时间字段开始时间,时间格式如:2018-01-12", required = false)
            @RequestParam(value = "startDate", required = false) String startDate,
            @ApiParam(name = "endDate", value = "时间字段结束时间,时间格式如:2018-01-12", required = false)
@ -104,11 +107,11 @@ public class ElasticSearchEndPoint extends EnvelopRestEndPoint {
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery(field, value);
        boolQueryBuilder.must(termsQueryBuilder);
        if(StringUtils.isNotEmpty(field2) && StringUtils.isNotEmpty(value2)){
        if (StringUtils.isNotEmpty(field2) && StringUtils.isNotEmpty(value2)) {
            TermsQueryBuilder termsQueryBuilder2 = QueryBuilders.termsQuery(field2, value2);
            boolQueryBuilder.must(termsQueryBuilder2);
        }
        if(StringUtils.isNotEmpty(dateField) && startDate != null && endDate != null){
        if (StringUtils.isNotEmpty(dateField) && startDate != null && endDate != null) {
            RangeQueryBuilder rangeQueryStartTime = QueryBuilders.rangeQuery(dateField).gte(startDate);
            boolQueryBuilder.must(rangeQueryStartTime);
            RangeQueryBuilder rangeQueryEndTime = QueryBuilders.rangeQuery(dateField).lte(endDate);
@ -173,19 +176,19 @@ public class ElasticSearchEndPoint extends EnvelopRestEndPoint {
            @ApiParam(name = "type", value = "索引类型", required = true)
            @RequestParam(value = "type") String type,
            @ApiParam(name = "filter", value = "过滤条件")
            @RequestParam(value = "filter" , required = false) String filter,
            @RequestParam(value = "filter", required = false) String filter,
            @ApiParam(name = "page", value = "页码", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "分页大小", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        Page<Map<String, Object>> result = elasticSearchUtil.page(index, type, filter, page, size);
        Envelop envelop = getPageResult(result.getContent(), (int)result.getTotalElements(), page, size);
        Envelop envelop = getPageResult(result.getContent(), (int) result.getTotalElements(), page, size);
        return envelop;
    }
    @RequestMapping(value = ServiceApi.ElasticSearch.FindBySql, method = RequestMethod.GET)
    @ApiOperation(value = "获取结果集")
    public List<Map<String, Object>> findBySql (
    public List<Map<String, Object>> findBySql(
            @ApiParam(name = "fields", value = "字段", required = true)
            @RequestParam(value = "fields") String fields,
            @ApiParam(name = "sql", value = "SQL", required = true)

+ 4 - 9
src/main/java/com/yihu/quota/controller/QuotaController.java

@ -7,25 +7,20 @@ import com.yihu.ehr.solr.SolrUtil;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.model.jpa.TjQuota;
import com.yihu.quota.model.jpa.save.TjQuotaDataSave;
import com.yihu.quota.model.jpa.source.TjQuotaDataSource;
import com.yihu.quota.model.rest.HospitalComposeModel;
import com.yihu.quota.model.rest.QuotaReport;
import com.yihu.quota.model.TjQuota;
import com.yihu.quota.model.save.TjQuotaDataSave;
import com.yihu.quota.model.source.TjQuotaDataSource;
import com.yihu.quota.model.rest.ResultModel;
import com.yihu.quota.service.orgHealthCategory.OrgHealthCategoryStatisticsService;
import com.yihu.quota.service.quota.BaseStatistsService;
import com.yihu.quota.service.quota.QuotaService;
import com.yihu.quota.service.save.TjDataSaveService;
import com.yihu.quota.service.source.TjDataSourceService;
import com.yihu.quota.vo.OrgHealthCategoryShowModel;
import com.yihu.quota.vo.SaveModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hdfs.server.namenode.Quota;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -137,7 +132,7 @@ public class QuotaController extends BaseController {
                }
            }
            TjQuotaDataSource quotaDataSource = dataSourceService.findSourceByQuotaCode(code);
            JSONObject obj = new JSONObject().fromObject(quotaDataSource.getConfigJson());
            JSONObject obj = JSONObject.fromObject(quotaDataSource.getConfigJson());
            EsConfig esConfig= (EsConfig) JSONObject.toBean(obj,EsConfig.class);
            List<Map<String, Object>>  resultList = new ArrayList<>();
            String configFilter = esConfig.getFilter();

+ 6 - 6
src/main/java/com/yihu/quota/controller/QuotaReportController.java

@ -11,15 +11,15 @@ import com.yihu.ehr.model.resource.MChartInfoModel;
import com.yihu.ehr.model.resource.MRsResources;
import com.yihu.ehr.query.common.model.DataList;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.jpa.RsResourceQuota;
import com.yihu.quota.model.jpa.TjQuota;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.RsResourceQuota;
import com.yihu.quota.model.TjQuota;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.service.dimension.TjDimensionMainService;
import com.yihu.quota.service.dimension.TjDimensionSlaveService;
import com.yihu.quota.service.orgHealthCategory.OrgHealthCategoryStatisticsService;
import com.yihu.quota.service.special.org.OrgHealthCategoryStatisticsService;
import com.yihu.quota.service.quota.BaseStatistsService;
import com.yihu.quota.service.quota.DeviceService;
import com.yihu.quota.service.quota.special.DeviceService;
import com.yihu.quota.service.quota.QuotaService;
import com.yihu.quota.service.resource.ResourceQuotaService;
import com.yihu.quota.util.BasesicUtil;

+ 12 - 10
src/main/java/com/yihu/quota/controller/DiabetesController.java

@ -1,11 +1,12 @@
package com.yihu.quota.controller;
package com.yihu.quota.controller.special;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.service.singledisease.DiabetesCheckService;
import com.yihu.quota.service.singledisease.DiabetesMedicineService;
import com.yihu.quota.service.singledisease.DiabetesService;
import com.yihu.quota.service.singledisease.DiabetesSymptomService;
import com.yihu.quota.controller.BaseController;
import com.yihu.quota.service.special.singledisease.DiabetesCheckService;
import com.yihu.quota.service.special.singledisease.DiabetesMedicineService;
import com.yihu.quota.service.special.singledisease.DiabetesService;
import com.yihu.quota.service.special.singledisease.DiabetesSymptomService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -18,13 +19,14 @@ import org.springframework.web.bind.annotation.RestController;
/**
 * Created by janseny on 2018/4/25.
 */
@Deprecated
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(description = "糖尿病相关数据信息接口")
public class DiabetesController extends BaseController {
    @Autowired
    private  DiabetesService diabetesService;
    private DiabetesService diabetesService;
    @Autowired
    private DiabetesSymptomService diabetesSymptomService;
    @Autowired
@ -38,13 +40,13 @@ public class DiabetesController extends BaseController {
            @ApiParam(name = "type", value = "type 1:个人信息 2:并发症相关信息 3:糖耐和血糖检测相关信息 4:用药情况", required = true)
            @RequestParam(value = "type", required = true) int type) {
        Envelop envelop = new Envelop();
        if(type == 1){
        if (type == 1) {
            diabetesService.validatorIdentity();
        }else if(type == 2){
        } else if (type == 2) {
            diabetesSymptomService.validatorIdentity();
        }else if(type == 3){
        } else if (type == 3) {
            diabetesCheckService.validatorIdentity();
        }else if(type == 4){
        } else if (type == 4) {
            diabetesMedicineService.validatorIdentity();
        }
        return envelop;

+ 4 - 2
src/main/java/com/yihu/quota/controller/QuotaReportStatisticsController.java

@ -1,11 +1,12 @@
package com.yihu.quota.controller;
package com.yihu.quota.controller.special;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.ehr.model.dict.MapDict;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.jpa.TjQuota;
import com.yihu.quota.controller.BaseController;
import com.yihu.quota.model.TjQuota;
import com.yihu.quota.service.quota.QuotaService;
import com.yihu.quota.util.BasesicUtil;
import com.yihu.quota.vo.SaveModel;
@ -23,6 +24,7 @@ import java.util.*;
/**
 * Created by janseny on 2017/12/14.
 */
@Deprecated
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(description = "报表统计 - 统计指标 接口")

+ 4 - 5
src/main/java/com/yihu/quota/controller/SingleDiseasesController.java

@ -1,15 +1,14 @@
package com.yihu.quota.controller;
package com.yihu.quota.controller.special;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.service.singledisease.SingleDiseaseService;
import com.yihu.quota.service.singledisease.SingleDiseaseServiceNew;
import com.yihu.quota.service.special.singledisease.SingleDiseaseService;
import com.yihu.quota.service.special.singledisease.SingleDiseaseServiceNew;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@ -21,7 +20,7 @@ import java.util.*;
/**
 * Created by janseny on 2018/4/4.
 */
@Deprecated
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(description = "单病种报表统计 - 糖尿病")

+ 142 - 137
src/main/java/com/yihu/quota/controller/SolrStatisticsEndPoint.java

@ -1,4 +1,4 @@
package com.yihu.quota.controller;
package com.yihu.quota.controller.special;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
@ -18,6 +18,7 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
@Deprecated
@RestController
@RequestMapping(value = ApiVersion.Version1_0)
@Api(value = "SolrStatisticsEndPoint", description = "门急诊服务统计接口", tags = {"临时报表接口--门急诊服务统计接口"})
@ -68,10 +69,144 @@ public class SolrStatisticsEndPoint extends EnvelopRestEndPoint {
        return envelop;
    }
    @ApiOperation("当月相关数据")
    @RequestMapping(value = "/statistics/{position}", method = RequestMethod.POST)
    public Envelop statistics(
            @ApiParam(name = "core", value = "集合", required = true)
            @RequestParam(value = "core") String core,
            @ApiParam(name = "position", value = "位置参数1,2,3,4", required = true)
            @PathVariable(value = "position") String position) throws Exception {
        if (position.equals("1")) {
            return emergencyRoom(core);
        } else if (position.equals("2")) {
            return hundredPeople(core);
        } else if (position.equals("3")) {
            return emergency(core);
        } else if (position.equals("4")) {
            return referral(core);
        } else {
            Envelop envelop = new Envelop();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg("参数:" + position + ",有误!");
            return envelop;
        }
    }
    @ApiOperation("医院门急诊人次分布")
    @RequestMapping(value = "/statistics/monthDistribution", method = RequestMethod.POST)
    public Envelop monthDistribution(
            @ApiParam(name = "core", value = "集合", required = true)
            @RequestParam(value = "core") String core,
            @ApiParam(name = "year", value = "年份", required = true)
            @RequestParam(value = "year") int year) throws Exception {
        Envelop envelop = new Envelop();
        Calendar calendar = Calendar.getInstance();
        int nowYear = calendar.get(Calendar.YEAR);
        if (nowYear > year) {
            calendar.set(Calendar.MONTH, 11);
        }
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        int month = calendar.get(Calendar.MONTH) + 1;
        List<Map<String, Integer>> dataList = new ArrayList<>(month);
        for (int i = 1; i <= month; i++) {
            String monthStr;
            if (i < 10) {
                monthStr = "0" + i;
            } else {
                monthStr = "" + i;
            }
            String start = String.format("%s-%s-01T00:00:00Z", year, monthStr);
            String end;
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            calendar.set(Calendar.MONTH, i - 1);
            int day;
            if (i == month && nowYear == year) {
                Calendar calendar1 = Calendar.getInstance();
                end = dateFormat.format(calendar1.getTime());
            } else {
                day = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
                end = String.format("%s-%s-%sT23:59:59Z", year, monthStr, day);
            }
            String q = String.format("event_type:0 AND event_date:[%s TO %s]", start, end);
            Map<String, Integer> data = solr.getFacetQuery(core, q);
            data.put(monthStr, data.get(q));
            data.remove(q);
            dataList.add(data);
        }
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(dataList);
        return envelop;
    }
    @ApiOperation("本月各类医院门急诊人次")
    @RequestMapping(value = "/statistics/rescue", method = RequestMethod.POST)
    public Envelop variousTypes() throws Exception {
        Envelop envelop = new Envelop();
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        String monthStr;
        if (month < 10) {
            monthStr = "0" + month;
        } else {
            monthStr = "" + month;
        }
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        String start = String.format("%s-%s-01T00:00:00Z", year, monthStr);
        String end = dateFormat.format(calendar.getTime());
        String fq = String.format("event_type:0 AND event_date:[%s TO %s]", start, end);
        FacetField facetField = solr.getFacetField("HealthProfile", "org_code", fq, 0, 0, 1000000, false);
        List<FacetField.Count> list = facetField.getValues();
        Map<String, Long> dataMap = new HashMap<>(list.size());
        for (FacetField.Count count : list) {
            dataMap.put(count.getName(), count.getCount());
        }
        Map<String, Long> resultMap = new HashMap<>();
        for (String code : dataMap.keySet()) {
            String level = orgService.getLevel(code);
            if (!StringUtils.isEmpty(level)) {
                if (resultMap.containsKey(level)) {
                    long count = resultMap.get(level) + dataMap.get(code);
                    resultMap.put(level, count);
                } else {
                    resultMap.put(level, dataMap.get(code));
                }
            } else {
                if (resultMap.containsKey("9")) {
                    long count = resultMap.get("9") + dataMap.get(code);
                    resultMap.put("9", count);
                } else {
                    resultMap.put("9", dataMap.get(code));
                }
            }
        }
        Map<String, Object> resap = new HashMap<>();
        // dictId=99 (医院等级)
        Map<String, Object> dictEntrysMap = orgService.getDictEntries(99);
        for (String code : resultMap.keySet()) {
            if (null != dictEntrysMap.get(code)) {
                resap.put(dictEntrysMap.get(code).toString(), resultMap.get(code));
            } else {
                resap.put(code, resultMap.get(code));
            }
        }
        envelop.setSuccessFlg(true);
        envelop.setObj(resap);
        return envelop;
    }
    /**
     * 根据指定字段分组统计
     *
     * @param facetField 分组字段名
     * @param fq 筛选条件
     * @param fq         筛选条件
     * @return
     * @throws Exception
     */
@ -82,7 +217,7 @@ public class SolrStatisticsEndPoint extends EnvelopRestEndPoint {
        List<FacetField.Count> facetCountList = facetResult.getValues();
        List<String> nameList = new ArrayList<>();
        List<Long> valList = new ArrayList<>();
        for(FacetField.Count item : facetCountList) {
        for (FacetField.Count item : facetCountList) {
            nameList.add(item.getName());
            valList.add(item.getCount());
        }
@ -92,31 +227,9 @@ public class SolrStatisticsEndPoint extends EnvelopRestEndPoint {
        return result;
    }
    @ApiOperation("当月相关数据")
    @RequestMapping(value = "/statistics/{position}", method = RequestMethod.POST)
    public Envelop statistics(
            @ApiParam(name = "core", value = "集合", required = true)
            @RequestParam(value = "core") String core,
            @ApiParam(name = "position", value = "位置参数1,2,3,4", required = true)
            @PathVariable(value = "position") String position) throws Exception {
        if (position.equals("1")) {
            return emergencyRoom(core);
        }else if(position.equals("2")){
            return hundredPeople(core);
        }else if(position.equals("3")){
            return emergency(core);
        }else if(position.equals("4")) {
            return referral(core);
        }else {
            Envelop envelop = new Envelop();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg("参数:" + position + ",有误!");
            return envelop;
        }
    }
    /**
     * 本月门急诊人次
     *
     * @return
     */
    private Envelop emergencyRoom(String core) throws Exception {
@ -143,6 +256,7 @@ public class SolrStatisticsEndPoint extends EnvelopRestEndPoint {
    /**
     * 本月每百门急诊入院人数
     *
     * @param core
     * @return
     * @throws Exception
@ -180,6 +294,7 @@ public class SolrStatisticsEndPoint extends EnvelopRestEndPoint {
    /**
     * 本月急诊总人次数
     *
     * @return
     */
    private Envelop emergency(String core) throws Exception {
@ -231,116 +346,6 @@ public class SolrStatisticsEndPoint extends EnvelopRestEndPoint {
        return envelop;
    }
    @ApiOperation("医院门急诊人次分布")
    @RequestMapping(value = "/statistics/monthDistribution", method = RequestMethod.POST)
    public Envelop monthDistribution(
            @ApiParam(name = "core", value = "集合", required = true)
            @RequestParam(value = "core") String core,
            @ApiParam(name = "year", value = "年份", required = true)
            @RequestParam(value = "year") int year) throws Exception {
        Envelop envelop = new Envelop();
        Calendar calendar = Calendar.getInstance();
        int nowYear = calendar.get(Calendar.YEAR);
        if(nowYear > year) {
            calendar.set(Calendar.MONTH, 11);
        }
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        int month = calendar.get(Calendar.MONTH) + 1;
        List<Map<String, Integer>> dataList = new ArrayList<>(month);
        for(int i = 1; i <= month; i ++) {
            String monthStr;
            if(i < 10) {
                monthStr = "0" + i;
            }else {
                monthStr = "" + i;
            }
            String start = String.format("%s-%s-01T00:00:00Z", year, monthStr);
            String end;
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            calendar.set(Calendar.MONTH, i - 1);
            int day;
            if(i == month && nowYear == year) {
                Calendar calendar1 = Calendar.getInstance();
                end = dateFormat.format(calendar1.getTime());
            }else {
                day = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
                end = String.format("%s-%s-%sT23:59:59Z", year, monthStr, day);
            }
            String q = String.format("event_type:0 AND event_date:[%s TO %s]", start, end);
            Map<String, Integer> data = solr.getFacetQuery(core, q);
            data.put(monthStr, data.get(q));
            data.remove(q);
            dataList.add(data);
        }
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(dataList);
        return envelop;
    }
    @ApiOperation("本月各类医院门急诊人次")
    @RequestMapping(value = "/statistics/rescue", method = RequestMethod.POST)
    public Envelop variousTypes() throws Exception{
        Envelop envelop = new Envelop();
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        String monthStr;
        if(month < 10) {
            monthStr = "0" + month;
        }else {
            monthStr = "" + month;
        }
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        String start = String.format("%s-%s-01T00:00:00Z", year, monthStr);
        String end = dateFormat.format(calendar.getTime());
        String fq = String.format("event_type:0 AND event_date:[%s TO %s]", start, end);
        FacetField facetField = solr.getFacetField("HealthProfile", "org_code", fq, 0, 0, 1000000, false);
        List<FacetField.Count> list = facetField.getValues();
        Map<String, Long> dataMap = new HashMap<>(list.size());
        for(FacetField.Count count : list) {
            dataMap.put(count.getName(), count.getCount());
        }
        Map<String, Long> resultMap = new HashMap<>();
        for(String code : dataMap.keySet()) {
            String level = orgService.getLevel(code);
            if(!StringUtils.isEmpty(level)) {
                if(resultMap.containsKey(level)) {
                    long count = resultMap.get(level) + dataMap.get(code);
                    resultMap.put(level, count);
                }else {
                    resultMap.put(level, dataMap.get(code));
                }
            }else {
                if(resultMap.containsKey("9")) {
                    long count = resultMap.get("9") + dataMap.get(code);
                    resultMap.put("9", count);
                }else {
                    resultMap.put("9", dataMap.get(code));
                }
            }
        }
        Map<String, Object> resap = new HashMap<>();
        // dictId=99 (医院等级)
        Map<String,Object> dictEntrysMap = orgService.getDictEntries(99);
        for(String code : resultMap.keySet()) {
            if(null != dictEntrysMap.get(code)){
                resap.put(dictEntrysMap.get(code).toString(),resultMap.get(code));
            }else{
                resap.put(code,resultMap.get(code));
            }
        }
        envelop.setSuccessFlg(true);
        envelop.setObj(resap);
        return envelop;
    }
    // 获取当月第一天日期(精确到00:00:00)
    private String getCurrMonthFirstDay() {
        Calendar calendar = Calendar.getInstance();
@ -353,7 +358,7 @@ public class SolrStatisticsEndPoint extends EnvelopRestEndPoint {
    // 获取当月最后一天(精确到23:59:59)
    private String getCurrMonthLastDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DATE, calendar.getActualMaximum(calendar.DATE));
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        String date = sf.format(calendar.getTime());
        return date + "T23:59:59Z";

+ 2 - 3
src/main/java/com/yihu/quota/dao/jpa/RsResourceQuotaDao.java

@ -1,13 +1,12 @@
package com.yihu.quota.dao.jpa;
package com.yihu.quota.dao;
import com.yihu.quota.model.jpa.RsResourceQuota;
import com.yihu.quota.model.RsResourceQuota;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2017/12/19.

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/TjQuotaDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa;
package com.yihu.quota.dao;
import com.yihu.quota.model.jpa.TjQuota;
import com.yihu.quota.model.TjQuota;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/TjQuotaGovProvisionDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa;
package com.yihu.quota.dao;
import com.yihu.quota.model.jpa.TjQuotaGovProvision;
import com.yihu.quota.model.TjQuotaGovProvision;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/TjQuotaLogDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa;
package com.yihu.quota.dao;
import com.yihu.quota.model.jpa.TjQuotaLog;
import com.yihu.quota.model.TjQuotaLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 11 - 0
src/main/java/com/yihu/quota/dao/cube/CubeDao.java

@ -0,0 +1,11 @@
package com.yihu.quota.dao.cube;
import com.yihu.quota.model.cube.Cube;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
public interface CubeDao extends PagingAndSortingRepository<Cube, Integer> {
}

+ 11 - 0
src/main/java/com/yihu/quota/dao/cube/CubeMappingDao.java

@ -0,0 +1,11 @@
package com.yihu.quota.dao.cube;
import com.yihu.quota.model.cube.CubeMapping;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
public interface CubeMappingDao extends PagingAndSortingRepository<CubeMapping, Integer> {
}

+ 11 - 0
src/main/java/com/yihu/quota/dao/cube/CubeMemberMappingDao.java

@ -0,0 +1,11 @@
package com.yihu.quota.dao.cube;
import com.yihu.quota.model.cube.CubeMemberMapping;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
public interface CubeMemberMappingDao extends PagingAndSortingRepository<CubeMemberMapping, Integer> {
}

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/dict/SystemDictDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.dict;
package com.yihu.quota.dao.dict;
import com.yihu.quota.model.jpa.dict.SystemDict;
import com.yihu.quota.model.dict.SystemDict;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/dict/SystemDictListDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.dict;
package com.yihu.quota.dao.dict;
import com.yihu.quota.model.jpa.dict.SystemDictList;
import com.yihu.quota.model.dict.SystemDictList;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 11 - 0
src/main/java/com/yihu/quota/dao/dimension/DimensionDao.java

@ -0,0 +1,11 @@
package com.yihu.quota.dao.dimension;
import com.yihu.quota.model.dimension.Dimension;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
public interface DimensionDao extends PagingAndSortingRepository<Dimension, Integer> {
}

+ 20 - 0
src/main/java/com/yihu/quota/dao/dimension/DimensionMemberDao.java

@ -0,0 +1,20 @@
package com.yihu.quota.dao.dimension;
import com.yihu.quota.model.dimension.DimensionMember;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
public interface DimensionMemberDao extends PagingAndSortingRepository<DimensionMember, Integer> {
    @Modifying
    @Transactional
    @Query("delete from DimensionMember where dimensionId = :dimensionId")
    void deleteByDimensionId(@Param("dimensionId") Integer dimensionId);
}

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/dimension/TjDimensionMainDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.dimension;
package com.yihu.quota.dao.dimension;
import com.yihu.quota.model.jpa.dimension.TjDimensionMain;
import com.yihu.quota.model.dimension.TjDimensionMain;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/dimension/TjDimensionSlaveDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.dimension;
package com.yihu.quota.dao.dimension;
import com.yihu.quota.model.jpa.dimension.TjDimensionSlave;
import com.yihu.quota.model.dimension.TjDimensionSlave;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/dimension/TjQuotaDimensionMainDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.dimension;
package com.yihu.quota.dao.dimension;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/dimension/TjQuotaDimensionSlaveDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.dimension;
package com.yihu.quota.dao.dimension;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/save/TjDataSaveDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.save;
package com.yihu.quota.dao.save;
import com.yihu.quota.model.jpa.save.TjDataSave;
import com.yihu.quota.model.save.TjDataSave;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/save/TjQuotaDataSaveDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.save;
package com.yihu.quota.dao.save;
import com.yihu.quota.model.jpa.save.TjQuotaDataSave;
import com.yihu.quota.model.save.TjQuotaDataSave;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 12 - 0
src/main/java/com/yihu/quota/dao/source/DataSourcesTableDao.java

@ -0,0 +1,12 @@
package com.yihu.quota.dao.source;
import com.yihu.quota.model.source.DataSourcesTable;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by wxw on 2018/9/10.
 *
 * @author wxw.
 */
public interface DataSourcesTableDao extends PagingAndSortingRepository<DataSourcesTable, Integer> {
}

+ 21 - 0
src/main/java/com/yihu/quota/dao/source/DataSourcesTableFieldDao.java

@ -0,0 +1,21 @@
package com.yihu.quota.dao.source;
import com.yihu.quota.model.source.DataSourcesTableField;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
/**
 * Created by wxw on 2018/9/10.
 *
 * @author wxw.
 */
public interface DataSourcesTableFieldDao extends PagingAndSortingRepository<DataSourcesTableField, Integer> {
    @Modifying
    @Transactional
    @Query("delete from DataSourcesTableField where tableId = :tableId")
    void deleteByTableId(@Param("tableId") Integer tableId);
}

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/source/TjDataSourceDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.source;
package com.yihu.quota.dao.source;
import com.yihu.quota.model.jpa.source.TjDataSource;
import com.yihu.quota.model.source.TjDataSource;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 2 - 2
src/main/java/com/yihu/quota/dao/jpa/source/TjQuotaDataSourceDao.java

@ -1,6 +1,6 @@
package com.yihu.quota.dao.jpa.source;
package com.yihu.quota.dao.source;
import com.yihu.quota.model.jpa.source.TjQuotaDataSource;
import com.yihu.quota.model.source.TjQuotaDataSource;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 11 - 11
src/main/java/com/yihu/quota/etl/Contant.java

@ -228,17 +228,17 @@ public class Contant {
        public static final String mysql = "2";
    }
    public static class convert{
        public static String level_age_1="1";
        public static String level_age_2="2";
        public static String level_age_3="3";
        public static String level_age_4="4";
        public static String level_age_5="5";
        public static String level_age_1_name="0~6";
        public static String level_age_2_name="7~17";
        public static String level_age_3_name="18~40";
        public static String level_age_4_name="41~65";
        public static String level_age_5_name=">65";
    public static class convert {
        public static String level_age_1 = "1";
        public static String level_age_2 = "2";
        public static String level_age_3 = "3";
        public static String level_age_4 = "4";
        public static String level_age_5 = "5";
        public static String level_age_1_name = "0~6";
        public static String level_age_2_name = "7~17";
        public static String level_age_3_name = "18~40";
        public static String level_age_4_name = "41~65";
        public static String level_age_5_name = ">65";
    }
    public static class quartz_cron {

+ 10 - 26
src/main/java/com/yihu/quota/etl/ExtractConverUtil.java

@ -1,33 +1,16 @@
package com.yihu.quota.etl;
import com.yihu.ehr.entity.address.AddressDict;
import com.yihu.ehr.entity.dict.SystemDictEntry;
import com.yihu.ehr.model.org.MOrganization;
import com.yihu.ehr.query.services.SolrQuery;
import com.yihu.ehr.solr.SolrUtil;
import com.yihu.quota.etl.conver.ConvertHelper;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.util.BasesicUtil;
import com.yihu.quota.etl.convert.ConvertHelper;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.util.SpringUtil;
import com.yihu.quota.vo.DictModel;
import com.yihu.quota.vo.FilterModel;
import com.yihu.quota.vo.QuotaVo;
import com.yihu.quota.vo.SaveModel;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.time.LocalDate;
import java.util.*;
import java.util.List;
/**
 * Created by janseny on 2018/5/10.
@ -40,23 +23,24 @@ public class ExtractConverUtil {
    /**
     * 细维度数据转换
     *
     * @param filterModel
     * @param qds
     * @return
     */
    public FilterModel convert(FilterModel filterModel, List<TjQuotaDimensionSlave> qds) throws Exception {
        try {
            if( qds != null && qds.size() > 0  && filterModel.getDataList()!= null  && filterModel.getDataList().size() > 0){
                for(TjQuotaDimensionSlave slave : qds){
                    if(  !StringUtils.isEmpty(slave.getConverClass())){
            if (qds != null && qds.size() > 0 && filterModel.getDataList() != null && filterModel.getDataList().size() > 0) {
                for (TjQuotaDimensionSlave slave : qds) {
                    if (!StringUtils.isEmpty(slave.getConverClass())) {
                        return SpringUtil.getBean(ConvertHelper.class).convert(filterModel, slave);
                    }
                }
            }else {
                return  filterModel;
            } else {
                return filterModel;
            }
        } catch (Exception e) {
            throw new Exception("数据转换异常"+e.getMessage());
            throw new Exception("数据转换异常" + e.getMessage());
        }
        return null;
    }

+ 0 - 24
src/main/java/com/yihu/quota/etl/conver/Convert.java

@ -1,24 +0,0 @@
package com.yihu.quota.etl.conver;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
/**
 * Created by janseny on 2018/5/9.
 */
public interface Convert {
    /**
     * @param jdbcTemplate jdbc工具
     * @param dataList 需要赋值的数据
     * @param slave 细维度
     * @return
     */
    public List<Map<String, Object>> convert(JdbcTemplate jdbcTemplate, List<Map<String, Object>> dataList , TjQuotaDimensionSlave slave);
}

+ 26 - 25
src/main/java/com/yihu/quota/etl/conver/AgeConvert.java

@ -1,14 +1,13 @@
package com.yihu.quota.etl.conver;
package com.yihu.quota.etl.convert;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
 * Created by janseny on 2018/5/9.
@ -21,64 +20,66 @@ public class AgeConvert implements Convert {
    /**
     * @param dataList  数据
     * @param dataList 数据
     * @return
     */
    public List<Map<String, Object>> convert(JdbcTemplate jdbcTemplate, List<Map<String, Object>> dataList , TjQuotaDimensionSlave slave ) {
    @Override
    public List<Map<String, Object>> convert(JdbcTemplate jdbcTemplate, List<Map<String, Object>> dataList, TjQuotaDimensionSlave slave) {
        System.out.println("run in age Conver");
        Map<String,Object> tempMap = new HashMap<>();
        Map<String, Object> tempMap = new HashMap<>();
        List<Map<String, Object>> result = new ArrayList<>();
        for(Map<String, Object> one:dataList) {
        for (Map<String, Object> one : dataList) {
            try {
                //TODO 业务逻辑处理
                int age = 0;
                String ageStr = "";
                String oldAgeStr = "";
                tempMap = one;
                if(one.get(patient_age) != null ||  one.get(mysql_age) != null ){
                if (one.get(patient_age) != null || one.get(mysql_age) != null) {
                    String ageIndex = "";
                    if(one.get(patient_age) != null){
                    if (one.get(patient_age) != null) {
                        ageIndex = patient_age;
                    }else  if(one.get(mysql_age) != null){
                    } else if (one.get(mysql_age) != null) {
                        ageIndex = mysql_age;
                    }
                    oldAgeStr = one.get(ageIndex).toString();
                    ageStr = oldAgeStr;
                    boolean falg = false;
                    if(ageStr.contains("岁") ){
                        ageStr = ageStr.substring(0,ageStr.indexOf("岁"));
                    if (ageStr.contains("岁")) {
                        ageStr = ageStr.substring(0, ageStr.indexOf("岁"));
                        falg = true;
                    }else if(ageStr.contains("月")){
                    } else if (ageStr.contains("月")) {
                        ageStr = "0";
                        falg = true;
                    }else if(ageStr.contains("天")){
                    } else if (ageStr.contains("天")) {
                        ageStr = "0";
                        falg = true;
                    }else{
                        if(ageStr.contains(".")){
                            ageStr = ageStr.substring(0,ageStr.indexOf("."));
                    } else {
                        if (ageStr.contains(".")) {
                            ageStr = ageStr.substring(0, ageStr.indexOf("."));
                            falg = true;
                        }else {
                        } else {
                            falg = true;
                        }
                    }
                    if(falg){
                    if (falg) {
                        age = Integer.parseInt(ageStr);
                        String ageLevel = getAgeCode(age);
                        tempMap.put(ageIndex,ageLevel);
                        if(one.get("$statisticsKey") != null){
                        tempMap.put(ageIndex, ageLevel);
                        if (one.get("$statisticsKey") != null) {
                            String statisticsKey = one.get("$statisticsKey").toString();
                            tempMap.put("$statisticsKey",statisticsKey.replaceAll(oldAgeStr,ageLevel));
                            tempMap.put("$statisticsKey", statisticsKey.replaceAll(oldAgeStr, ageLevel));
                        }
                        result.add(tempMap);
                    }
                }else{
                } else {
                    result.add(tempMap);
                }
            } catch (Exception e) {
               throw  new NumberFormatException("年龄转换有误!" + e.getMessage());
                throw new NumberFormatException("年龄转换有误!" + e.getMessage());
            }
        };
        }
        ;
        return result;
    }

+ 24 - 0
src/main/java/com/yihu/quota/etl/convert/Convert.java

@ -0,0 +1,24 @@
package com.yihu.quota.etl.convert;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
/**
 * Created by janseny on 2018/5/9.
 */
public interface Convert {
    /**
     * @param jdbcTemplate jdbc工具
     * @param dataList     需要赋值的数据
     * @param slave        细维度
     * @return
     */
    List<Map<String, Object>> convert(JdbcTemplate jdbcTemplate, List<Map<String, Object>> dataList, TjQuotaDimensionSlave slave);
}

+ 6 - 4
src/main/java/com/yihu/quota/etl/conver/ConvertHelper.java

@ -1,6 +1,6 @@
package com.yihu.quota.etl.conver;
package com.yihu.quota.etl.convert;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.vo.FilterModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@ -13,7 +13,8 @@ import java.util.List;
import java.util.Map;
/**
 * Created by janseny on 2018/5/9.
 * @author janseny
 * @date 2018/5/9
 * 维度的key值转换器
 */
@Component
@ -24,7 +25,8 @@ public class ConvertHelper {
    /**
     * 维度的key清洗到对应的slaveKey中
     * @param filterModel     过滤之后的model
     *
     * @param filterModel           过滤之后的model
     * @param tjQuotaDimensionSlave 维度
     * @return
     * @throws Exception

+ 33 - 34
src/main/java/com/yihu/quota/etl/extract/ExtractHelper.java

@ -4,11 +4,11 @@ import com.yihu.quota.etl.extract.es.EsExtract;
import com.yihu.quota.etl.extract.mysql.MysqlExtract;
import com.yihu.quota.etl.extract.solr.SolrExtract;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.jpa.save.TjQuotaDataSave;
import com.yihu.quota.model.jpa.source.TjDataSource;
import com.yihu.quota.model.jpa.source.TjQuotaDataSource;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.save.TjQuotaDataSave;
import com.yihu.quota.model.source.TjDataSource;
import com.yihu.quota.model.source.TjQuotaDataSource;
import com.yihu.quota.service.dimension.TjDimensionMainService;
import com.yihu.quota.service.dimension.TjDimensionSlaveService;
import com.yihu.quota.service.save.TjDataSaveService;
@ -24,7 +24,6 @@ import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
@ -36,7 +35,7 @@ public class ExtractHelper {
    @Autowired
    private TjDataSourceService dataSourceService;
    @Autowired
    private TjDataSaveService datsSaveService;
    private TjDataSaveService dataSaveService;
    @Autowired
    private TjDimensionMainService dimensionMainService;
    @Autowired
@ -50,24 +49,24 @@ public class ExtractHelper {
    public EsConfig getEsConfig(String quotaCode) throws Exception {
        //得到该指标的数据存储位置
        TjQuotaDataSave quotaDataSave = datsSaveService.findByQuota(quotaCode);
        TjQuotaDataSave quotaDataSave = dataSaveService.findByQuota(quotaCode);
        //如果为空说明数据错误
        if (quotaDataSave == null) {
            throw new Exception("QuotaDataSave data error");
        }
        JSONObject obj = new JSONObject().fromObject(quotaDataSave.getConfigJson());
        EsConfig esConfig= (EsConfig) JSONObject.toBean(obj,EsConfig.class);
        return  esConfig;
        JSONObject obj = JSONObject.fromObject(quotaDataSave.getConfigJson());
        EsConfig esConfig = (EsConfig) JSONObject.toBean(obj, EsConfig.class);
        return esConfig;
    }
    public EsConfig getDataSourceEsConfig(String quotaCode) throws Exception {
        TjQuotaDataSource quotaDataSource= dataSourceService.findSourceByQuotaCode(quotaCode);
        TjQuotaDataSource quotaDataSource = dataSourceService.findSourceByQuotaCode(quotaCode);
        if (quotaDataSource == null) {
            throw new Exception("quotaDataSource data error");
        }
        JSONObject obj = new JSONObject().fromObject(quotaDataSource.getConfigJson());
        EsConfig esConfig= (EsConfig) JSONObject.toBean(obj,EsConfig.class);
        return  esConfig;
        JSONObject obj = JSONObject.fromObject(quotaDataSource.getConfigJson());
        EsConfig esConfig = (EsConfig) JSONObject.toBean(obj, EsConfig.class);
        return esConfig;
    }
    /**
@ -77,14 +76,14 @@ public class ExtractHelper {
     * @return
     * @throws Exception
     */
    public List<SaveModel> extractData(QuotaVo quotaVo, String startTime, String endTime,String timeLevel,String saasid) throws Exception {
    public List<SaveModel> extractData(QuotaVo quotaVo, String startTime, String endTime, String timeLevel, String saasid) throws Exception {
        try {
            TjQuotaDataSource quotaDataSource = dataSourceService.findSourceByQuotaCode(quotaVo.getCode());
            if (quotaDataSource == null) {
                throw new Exception("数据源配置错误");
            }
            JSONObject obj = new JSONObject().fromObject(quotaDataSource.getConfigJson());
            EsConfig esConfig= (EsConfig) JSONObject.toBean(obj,EsConfig.class);
            JSONObject obj = JSONObject.fromObject(quotaDataSource.getConfigJson());
            EsConfig esConfig = (EsConfig) JSONObject.toBean(obj, EsConfig.class);
            //得到主维度
            List<TjQuotaDimensionMain> tjQuotaDimensionMains = dimensionMainService.findTjQuotaDimensionMainByQuotaCode(quotaDataSource.getQuotaCode());
            //当维度中有机构维度时,机构对应的区县会自动关联出来,所以区县不用在分组计算
@ -92,19 +91,19 @@ public class ExtractHelper {
            TjQuotaDimensionMain townMain = null;
            for (int j = 0; j < tjQuotaDimensionMains.size(); j++) {
                TjQuotaDimensionMain one = tjQuotaDimensionMains.get(j);
                if ( one.getMainCode().equals("org")) {
                if (one.getMainCode().equals("org")) {
                    orgFlag = true;
                }
                if ( one.getMainCode().equals("town")) {
                if (one.getMainCode().equals("town")) {
                    townMain = one;
                }
            }
            if(esConfig.getEspecialType() != null){
                if(orgFlag && !esConfig.getEspecialType().equals("orgHealthCategory") ){
            if (esConfig.getEspecialType() != null) {
                if (orgFlag && !esConfig.getEspecialType().equals("orgHealthCategory")) {
                    tjQuotaDimensionMains.remove(townMain);
                }
            }else {
                if(orgFlag){
            } else {
                if (orgFlag) {
                    tjQuotaDimensionMains.remove(townMain);
                }
            }
@ -112,24 +111,24 @@ public class ExtractHelper {
            //得到细维度
            List<TjQuotaDimensionSlave> tjQuotaDimensionSlaves = dimensionSlaveService.findTjQuotaDimensionSlaveByQuotaCode(quotaDataSource.getQuotaCode());
            if ( TjDataSource.type_es.equals(quotaDataSource.getCode()) ) {
            if (TjDataSource.type_es.equals(quotaDataSource.getCode())) {
                // 抽取 ES 统计值
                if( (!StringUtils.isEmpty(esConfig.getEspecialType())) && esConfig.getEspecialType().equals("orgHealthCategory")){
                    return esExtract.extractOrgHealthCategory(tjQuotaDimensionMains,tjQuotaDimensionSlaves,startTime,endTime,timeLevel,saasid, quotaVo,esConfig);
                }else{
                    return esExtract.extract(tjQuotaDimensionMains,tjQuotaDimensionSlaves,startTime,endTime,timeLevel,saasid, quotaVo,esConfig);
                if ((!StringUtils.isEmpty(esConfig.getEspecialType())) && esConfig.getEspecialType().equals("orgHealthCategory")) {
                    return esExtract.extractOrgHealthCategory(tjQuotaDimensionMains, tjQuotaDimensionSlaves, startTime, endTime, timeLevel, saasid, quotaVo, esConfig);
                } else {
                    return esExtract.extract(tjQuotaDimensionMains, tjQuotaDimensionSlaves, startTime, endTime, timeLevel, saasid, quotaVo, esConfig);
                }
            }else if( TjDataSource.type_solr.equals(quotaDataSource.getCode()) ){
            } else if (TjDataSource.type_solr.equals(quotaDataSource.getCode())) {
                // 抽取 solr 统计值
                return  solrExtract.extract(tjQuotaDimensionMains,tjQuotaDimensionSlaves,startTime,endTime,timeLevel, quotaVo,esConfig);
            }else if( TjDataSource.type_mysql.equals(quotaDataSource.getCode()) ){
                return solrExtract.extract(tjQuotaDimensionMains, tjQuotaDimensionSlaves, startTime, endTime, timeLevel, quotaVo, esConfig);
            } else if (TjDataSource.type_mysql.equals(quotaDataSource.getCode())) {
                // 抽取 mysql 统计值
                return  SpringUtil.getBean(MysqlExtract.class).extract(tjQuotaDimensionMains,tjQuotaDimensionSlaves,startTime,endTime,timeLevel, quotaVo,esConfig);
                return SpringUtil.getBean(MysqlExtract.class).extract(tjQuotaDimensionMains, tjQuotaDimensionSlaves, startTime, endTime, timeLevel, quotaVo, esConfig);
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("数据抽取错误," + e.getMessage() );
            throw new Exception("数据抽取错误," + e.getMessage());
        }
    }

+ 97 - 102
src/main/java/com/yihu/quota/etl/extract/ExtractPercentHelper.java

@ -3,14 +3,11 @@ package com.yihu.quota.etl.extract;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.quota.etl.extract.es.EsExtract;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.etl.util.ElasticsearchUtil;
import com.yihu.quota.etl.util.EsClientUtil;
import com.yihu.quota.model.jpa.TjQuota;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.jpa.source.TjQuotaDataSource;
import com.yihu.quota.model.rest.QuotaReport;
import com.yihu.quota.model.rest.ResultModel;
import com.yihu.quota.util.ElasticsearchUtil;
import com.yihu.quota.model.TjQuota;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.source.TjQuotaDataSource;
import com.yihu.quota.service.dimension.TjDimensionMainService;
import com.yihu.quota.service.dimension.TjDimensionSlaveService;
import com.yihu.quota.service.quota.QuotaService;
@ -26,7 +23,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.util.*;
@ -36,6 +32,10 @@ import java.util.*;
@Component
@Scope("prototype")
public class ExtractPercentHelper {
    @Autowired
    ElasticsearchUtil esClientUtil;
    @Autowired
    ObjectMapper objectMapper;
    @Autowired
    private TjDataSourceService dataSourceService;
    @Autowired
@ -48,12 +48,6 @@ public class ExtractPercentHelper {
    private EsExtract esExtract;
    @Autowired
    private ElasticsearchUtil elasticsearchUtil;
    @Autowired
    EsClientUtil esClientUtil;
    @Autowired
    ObjectMapper objectMapper;
    private Logger logger = LoggerFactory.getLogger(ExtractPercentHelper.class);
@ -64,7 +58,7 @@ public class ExtractPercentHelper {
     * @return
     * @throws Exception
     */
    public List<SaveModel> extractData(QuotaVo quotaVo, String startTime, String endTime,String timeLevel) throws Exception {
    public List<SaveModel> extractData(QuotaVo quotaVo, String startTime, String endTime, String timeLevel) throws Exception {
        String message = "";
        try {
            //得到该指标的数据来源
@ -74,40 +68,40 @@ public class ExtractPercentHelper {
                message = "数据源配置错误";
                throw new Exception(message);
            }
            JSONObject obj = new JSONObject().fromObject(quotaDataSource.getConfigJson());
            EsConfig esConfig= (EsConfig) JSONObject.toBean(obj,EsConfig.class);
            JSONObject obj = JSONObject.fromObject(quotaDataSource.getConfigJson());
            EsConfig esConfig = (EsConfig) JSONObject.toBean(obj, EsConfig.class);
            if(StringUtils.isEmpty(esConfig.getThousandFlag())){
                if(StringUtils.isNotEmpty(esConfig.getMolecular()) &&  StringUtils.isNotEmpty(esConfig.getDenominator())){
                    Map<String,DictModel> dimensionMap = getQuotaDimension(quotaDataSource.getQuotaCode());
                    Map<String,DictModel> moleDimensionMap = getQuotaDimension(esConfig.getMolecular());
                    Map<String,DictModel> denoDimensionMap = getQuotaDimension(esConfig.getDenominator());
            if (StringUtils.isEmpty(esConfig.getThousandFlag())) {
                if (StringUtils.isNotEmpty(esConfig.getMolecular()) && StringUtils.isNotEmpty(esConfig.getDenominator())) {
                    Map<String, DictModel> dimensionMap = getQuotaDimension(quotaDataSource.getQuotaCode());
                    Map<String, DictModel> moleDimensionMap = getQuotaDimension(esConfig.getMolecular());
                    Map<String, DictModel> denoDimensionMap = getQuotaDimension(esConfig.getDenominator());
                    List<String> quotaDimension = new ArrayList<>();
                    String moleDimension = "";
                    String denoDimension = "";
                    int num = 0;
                    int count = 0;
                    for(String key : dimensionMap.keySet()){
                        for(String molekey : moleDimensionMap.keySet()){
                            if(key.equals(molekey) && dimensionMap.get(key).getCode().equals( moleDimensionMap.get(molekey).getCode() )){
                    for (String key : dimensionMap.keySet()) {
                        for (String molekey : moleDimensionMap.keySet()) {
                            if (key.equals(molekey) && dimensionMap.get(key).getCode().equals(moleDimensionMap.get(molekey).getCode())) {
                                moleDimension = moleDimension + moleDimensionMap.get(molekey).getName() + ";";
                                num ++;
                                num++;
                            }
                        }
                        for(String denokey : denoDimensionMap.keySet()){
                            if(key.equals(denokey) && dimensionMap.get(key).getCode().equals( denoDimensionMap.get(denokey).getCode() )){
                        for (String denokey : denoDimensionMap.keySet()) {
                            if (key.equals(denokey) && dimensionMap.get(key).getCode().equals(denoDimensionMap.get(denokey).getCode())) {
                                denoDimension = denoDimension + denoDimensionMap.get(denokey).getName() + ";";
                                count ++;
                                count++;
                            }
                        }
                        quotaDimension.add(dimensionMap.get(key).getName());
                    }
                    if(num != dimensionMap.size()){
                    if (num != dimensionMap.size()) {
                        message = "指标维度无法与分子指标维度匹配";
                        throw new Exception(message);
                    }
                    if(count != dimensionMap.size()){
                    if (count != dimensionMap.size()) {
                        message = "指标维度无法与分母指标维度匹配";
                        throw new Exception(message);
                    }
@ -115,34 +109,34 @@ public class ExtractPercentHelper {
                    TjQuota moleTjQuota = quotaService.findByCode(esConfig.getMolecular());
                    TjQuota denoTjQuota = quotaService.findByCode(esConfig.getDenominator());
                    Map<String,String> param =  new HashMap<>();
                    param.put("startTime",startTime);
                    param.put("endTime",endTime);
                    Map<String,Map<String, Object>>  moleResultMap = quotaService.getQuotaResult(moleTjQuota.getId(), objectMapper.writeValueAsString(param), moleDimension.substring(0, moleDimension.length() - 1));
                    Map<String,Map<String, Object>>  denoResultMap = quotaService.getQuotaResult(denoTjQuota.getId(), objectMapper.writeValueAsString(param), denoDimension.substring(0, denoDimension.length() - 1));
                    Map<String, String> param = new HashMap<>();
                    param.put("startTime", startTime);
                    param.put("endTime", endTime);
                    Map<String, Map<String, Object>> moleResultMap = quotaService.getQuotaResult(moleTjQuota.getId(), objectMapper.writeValueAsString(param), moleDimension.substring(0, moleDimension.length() - 1));
                    Map<String, Map<String, Object>> denoResultMap = quotaService.getQuotaResult(denoTjQuota.getId(), objectMapper.writeValueAsString(param), denoDimension.substring(0, denoDimension.length() - 1));
                    List<SaveModel>  resultModel = getPercentResult(moleResultMap, denoResultMap,quotaVo,esConfig);
                    List<SaveModel> resultModel = getPercentResult(moleResultMap, denoResultMap, quotaVo, esConfig);
                    return resultModel;
                }else{
                } else {
                    message = "配置错误,分子或分母指标没有配置";
                    throw new Exception(message);
                }
            }else {
            } else {
                // 每千每万人口 计算
                if(StringUtils.isNotEmpty(esConfig.getThousandDmolecular()) &&  StringUtils.isNotEmpty(esConfig.getThousandDenominator())){
                    Map<String,DictModel> dimensionMap = getQuotaDimension(quotaDataSource.getQuotaCode());
                    Map<String,DictModel> moleDimensionMap = getQuotaDimension(esConfig.getThousandDmolecular());
                if (StringUtils.isNotEmpty(esConfig.getThousandDmolecular()) && StringUtils.isNotEmpty(esConfig.getThousandDenominator())) {
                    Map<String, DictModel> dimensionMap = getQuotaDimension(quotaDataSource.getQuotaCode());
                    Map<String, DictModel> moleDimensionMap = getQuotaDimension(esConfig.getThousandDmolecular());
                    String moleDimension = "";
                    int num = 0;
                    for(String key : dimensionMap.keySet()){
                        for(String molekey : moleDimensionMap.keySet()){
                            if(key.equals(molekey)){
                    for (String key : dimensionMap.keySet()) {
                        for (String molekey : moleDimensionMap.keySet()) {
                            if (key.equals(molekey)) {
                                moleDimension = moleDimension + moleDimensionMap.get(molekey).getName() + ";";
                                num ++;
                                num++;
                            }
                        }
                    }
                    if(num != dimensionMap.size()){
                    if (num != dimensionMap.size()) {
                        message = "指标维度无法与分子指标维度匹配";
                        throw new Exception(message);
                    }
@ -150,23 +144,24 @@ public class ExtractPercentHelper {
                    TjQuota moleTjQuota = quotaService.findByCode(esConfig.getThousandDmolecular());
                    TjQuota denoTjQuota = quotaService.findByCode(esConfig.getThousandDenominator());
                    Map<String,String> param =  new HashMap<>();
                    param.put("startTime",startTime);
                    param.put("endTime",endTime);
                    Map<String,Map<String, Object>>  moleResultMap = quotaService.getQuotaResult(moleTjQuota.getId(), objectMapper.writeValueAsString(param), moleDimension.substring(0, moleDimension.length() - 1));
                    Map<String, String> param = new HashMap<>();
                    param.put("startTime", startTime);
                    param.put("endTime", endTime);
                    Map<String, Map<String, Object>> moleResultMap = quotaService.getQuotaResult(moleTjQuota.getId(), objectMapper.writeValueAsString(param), moleDimension.substring(0, moleDimension.length() - 1));
                    int totalCount = 0;
                    Calendar calendar = Calendar.getInstance();
                    Map<String,Integer>  doneResultMap = quotaService.searcherSumByGroupBySql(denoTjQuota, "year", "year=" + calendar.get(Calendar.YEAR),"result","","");
                    if(doneResultMap != null && doneResultMap.size()>0){
                        for(String key :doneResultMap.keySet())
                        totalCount = totalCount + doneResultMap.get(key);
                    Map<String, Integer> doneResultMap = quotaService.searcherSumByGroupBySql(denoTjQuota, "year", "year=" + calendar.get(Calendar.YEAR), "result", "", "");
                    if (doneResultMap != null && doneResultMap.size() > 0) {
                        for (String key : doneResultMap.keySet()) {
                            totalCount = totalCount + doneResultMap.get(key);
                        }
                    }
                    List<SaveModel>  resultModel = new ArrayList<>();
                    if(moleResultMap != null && moleResultMap.size() > 0 && totalCount > 0){
                        resultModel = getThousandPercentResult(moleResultMap,totalCount, quotaVo,esConfig.getThousandFlag());
                    List<SaveModel> resultModel = new ArrayList<>();
                    if (moleResultMap != null && moleResultMap.size() > 0 && totalCount > 0) {
                        resultModel = getThousandPercentResult(moleResultMap, totalCount, quotaVo, esConfig.getThousandFlag());
                    }
                    return resultModel;
                }else{
                } else {
                    message = "配置错误,分子或分母指标没有配置";
                    throw new Exception(message);
                }
@ -180,73 +175,73 @@ public class ExtractPercentHelper {
    }
    //获取指标维度
    public Map<String,DictModel> getQuotaDimension(String quotaCode){
    public Map<String, DictModel> getQuotaDimension(String quotaCode) {
        // 指标 主维度
        List<TjQuotaDimensionMain> dimensionMains = dimensionMainService.findTjQuotaDimensionMainByQuotaCode(quotaCode);
        // 指标 细维度
        List<TjQuotaDimensionSlave> dimensionSlaves = dimensionSlaveService.findTjQuotaDimensionSlaveByQuotaCode(quotaCode);
        Map<String,DictModel> map = new HashMap<>();
        Map<String, DictModel> map = new HashMap<>();
        String mainKey = "";
        String mainVal = "";
        for(int i = 0 ;i < dimensionMains.size() ; i++){
            mainKey =  dimensionMains.get(i).getMainCode();
            mainVal =  dimensionMains.get(i).getMainCode() + " - " + dimensionMains.get(i).getDictSql();
        for (int i = 0; i < dimensionMains.size(); i++) {
            mainKey = dimensionMains.get(i).getMainCode();
            mainVal = dimensionMains.get(i).getMainCode() + " - " + dimensionMains.get(i).getDictSql();
            DictModel dictModel = new DictModel();
            dictModel.setName(mainKey);
            dictModel.setCode(mainVal);
            map.put(mainKey,dictModel);
            map.put(mainKey, dictModel);
        }
        String slaveKey = "";
        String slaveVal = "";
        String slaveName = "";
        for(int i = 0 ;i< dimensionSlaves.size(); i++){
            slaveName = slaveName + "slaveKey" + (i+1);
            slaveKey =  dimensionSlaves.get(i).getSlaveCode();
            slaveVal =  dimensionSlaves.get(i).getSlaveCode() + " - " + dimensionSlaves.get(i).getDictSql() ;
        for (int i = 0; i < dimensionSlaves.size(); i++) {
            slaveName = slaveName + "slaveKey" + (i + 1);
            slaveKey = dimensionSlaves.get(i).getSlaveCode();
            slaveVal = dimensionSlaves.get(i).getSlaveCode() + " - " + dimensionSlaves.get(i).getDictSql();
            DictModel dictModel = new DictModel();
            dictModel.setName(slaveName);
            dictModel.setCode(slaveVal);
            map.put(slaveKey,dictModel);
            map.put(slaveKey, dictModel);
        }
        return map;
    }
    public List<SaveModel> getPercentResult(Map<String,Map<String, Object>> moleReultMap,Map<String,Map<String, Object>> denoReultMap,QuotaVo quotaVo,EsConfig esConfig){
    public List<SaveModel> getPercentResult(Map<String, Map<String, Object>> moleReultMap, Map<String, Map<String, Object>> denoReultMap, QuotaVo quotaVo, EsConfig esConfig) {
        List<SaveModel> saveModelList = new ArrayList<>();
        for(String dekey :denoReultMap.keySet()){
        for (String dekey : denoReultMap.keySet()) {
            Map<String, Object> map = new HashMap<>();
            Map<String, Object> denoMap = denoReultMap.get(dekey);
            if(denoMap.get("result").toString().equals("0")){
            if (denoMap.get("result").toString().equals("0")) {
                map = denoMap;
            }else {
                for(String mokey :moleReultMap.keySet()){
            } else {
                for (String mokey : moleReultMap.keySet()) {
                    Map<String, Object> moleMap = moleReultMap.get(mokey);
                    if(dekey.equals(mokey)) {
                        if(moleMap.get("result").toString().equals("0")){
                    if (dekey.equals(mokey)) {
                        if (moleMap.get("result").toString().equals("0")) {
                            map = moleMap;
                       }else{
                           int point = 0;
                           float moleVal = Float.valueOf(moleMap.get("result").toString());
                           float denoVal = Float.valueOf(denoMap.get("result").toString());
                        } else {
                            int point = 0;
                            float moleVal = Float.valueOf(moleMap.get("result").toString());
                            float denoVal = Float.valueOf(denoMap.get("result").toString());
                            int percentOperationValue = 100;
                            if(StringUtils.isNotEmpty(esConfig.getPercentOperationValue())){
                            if (StringUtils.isNotEmpty(esConfig.getPercentOperationValue())) {
                                percentOperationValue = Integer.valueOf(esConfig.getPercentOperationValue());
                            }
                            if(esConfig.getPercentOperation().equals(1)){
                                point = (int)(moleVal/denoVal)*percentOperationValue;
                            }else if(esConfig.getPercentOperation().equals(2)){
                                point = (int)(moleVal/denoVal)/percentOperationValue;
                            if (esConfig.getPercentOperation().equals(1)) {
                                point = (int) (moleVal / denoVal) * percentOperationValue;
                            } else if (esConfig.getPercentOperation().equals(2)) {
                                point = (int) (moleVal / denoVal) / percentOperationValue;
                            }
                           moleMap.remove("result");
                           moleMap.put("result",point);
                           map = moleMap;
                       }
                            moleMap.remove("result");
                            moleMap.put("result", point);
                            map = moleMap;
                        }
                        break;
                    }
                }
            }
            SaveModel saveModel =  objectMapper.convertValue(map, SaveModel.class);
            SaveModel saveModel = objectMapper.convertValue(map, SaveModel.class);
            saveModel.setQuotaName(quotaVo.getName());
            saveModel.setQuotaCode(quotaVo.getCode());
            saveModelList.add(saveModel);
@ -254,28 +249,28 @@ public class ExtractPercentHelper {
        return saveModelList;
    }
    public List<SaveModel> getThousandPercentResult(Map<String,Map<String, Object>> moleReultMap,int totalCount,QuotaVo quotaVo,String thousandFlag){
    public List<SaveModel> getThousandPercentResult(Map<String, Map<String, Object>> moleReultMap, int totalCount, QuotaVo quotaVo, String thousandFlag) {
        List<SaveModel> saveModelList = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        for(String mokey :moleReultMap.keySet()){
        for (String mokey : moleReultMap.keySet()) {
            Map<String, Object> moleMap = moleReultMap.get(mokey);
            if(moleMap.get("result").toString().equals("0")){
            if (moleMap.get("result").toString().equals("0")) {
                map = moleMap;
                moleMap.put("result","0");
            }else{
                moleMap.put("result", "0");
            } else {
                String point = "0";
                float moleVal = Float.valueOf(moleMap.get("result").toString());
                DecimalFormat   df = new   DecimalFormat("#.##");
                point = df.format( (moleVal / totalCount) * Integer.valueOf(thousandFlag));
                moleMap.put("result",point);
                DecimalFormat df = new DecimalFormat("#.##");
                point = df.format((moleVal / totalCount) * Integer.valueOf(thousandFlag));
                moleMap.put("result", point);
                map = moleMap;
            }
            SaveModel saveModel =  objectMapper.convertValue(map, SaveModel.class);
            SaveModel saveModel = objectMapper.convertValue(map, SaveModel.class);
            saveModel.setQuotaName(quotaVo.getName());
            saveModel.setQuotaCode(quotaVo.getCode());
            saveModelList.add(saveModel);
        }
        return  saveModelList;
        return saveModelList;
    }

+ 91 - 91
src/main/java/com/yihu/quota/etl/extract/ExtractUtil.java

@ -5,8 +5,8 @@ import com.yihu.ehr.query.services.SolrQuery;
import com.yihu.ehr.solr.SolrUtil;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.util.BasesicUtil;
import com.yihu.quota.vo.DictModel;
import com.yihu.quota.vo.OrgHealthCategoryShowModel;
@ -31,76 +31,76 @@ import java.util.*;
@Scope("prototype")
public class ExtractUtil {
    private Logger logger = LoggerFactory.getLogger(ExtractUtil.class);
    private static String main_town = "twon";
    private static String main_org = "org";
    private static String main_dept = "dept";
    private static String main_year = "year";
    private static String slave_sex = "sex";
    private static String slave_age = "age";
    private static  String unknown = "未知";
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private static String unknown = "未知";
    @Autowired
    SolrUtil solrUtil;
    @Autowired
    SolrQuery solrQuery;
    private Logger logger = LoggerFactory.getLogger(ExtractUtil.class);
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private QuotaVo quotaVo;
    private String timeLevel;
    /**
     * 抽取列表数据 关联数据字典
     *
     * @param qdm
     * @param qds
     * @param dataList
     * @param timeKey  时间维度字段
     * @param timeKey        时间维度字段
     * @param aggregationKey 抽取统计的数据值字段
     * @param quotaVo
     * @return
     * @throws Exception
     */
    public  List<SaveModel> computeList(List<TjQuotaDimensionMain> qdm, List<TjQuotaDimensionSlave> qds,List<Map<String, Object>> dataList,
                                        String timeKey,String aggregationKey,QuotaVo quotaVo) throws Exception {
    public List<SaveModel> computeList(List<TjQuotaDimensionMain> qdm, List<TjQuotaDimensionSlave> qds, List<Map<String, Object>> dataList,
                                       String timeKey, String aggregationKey, QuotaVo quotaVo) throws Exception {
        this.quotaVo = quotaVo;
        List<SaveModel> returnList = new ArrayList<>();
        List<SaveModel> totalSaveModelDictList = getTotalDictDataList(qdm,qds);
        Map<String,String> townDictMap = new HashMap<>();
        Map<String,String> orgDictMap = new HashMap<>();
        Map<String,String> deptDictMap = new HashMap<>();
        Map<String,String> yearDictMap = new HashMap<>();
        Map<String,String> slave1DictMap = new HashMap<>();
        Map<String,String> slave2DictMap = new HashMap<>();
        Map<String,String> slave3DictMap = new HashMap<>();
        Map<String,String> slave4DictMap = new HashMap<>();
        for(SaveModel saveModel: totalSaveModelDictList){
            if(saveModel.getTown() != null){
        List<SaveModel> totalSaveModelDictList = getTotalDictDataList(qdm, qds);
        Map<String, String> townDictMap = new HashMap<>();
        Map<String, String> orgDictMap = new HashMap<>();
        Map<String, String> deptDictMap = new HashMap<>();
        Map<String, String> yearDictMap = new HashMap<>();
        Map<String, String> slave1DictMap = new HashMap<>();
        Map<String, String> slave2DictMap = new HashMap<>();
        Map<String, String> slave3DictMap = new HashMap<>();
        Map<String, String> slave4DictMap = new HashMap<>();
        for (SaveModel saveModel : totalSaveModelDictList) {
            if (saveModel.getTown() != null) {
                townDictMap.put(saveModel.getTown(), saveModel.getTownName());
            }
            if(saveModel.getOrg() != null){
            if (saveModel.getOrg() != null) {
                orgDictMap.put(saveModel.getOrg(), saveModel.getOrgName());
            }
            if(saveModel.getDept() != null){
            if (saveModel.getDept() != null) {
                deptDictMap.put(saveModel.getDept(), saveModel.getDeptName());
            }
            if(saveModel.getYear() != null){
            if (saveModel.getYear() != null) {
                yearDictMap.put(saveModel.getYear(), saveModel.getYearName());
            }
            if(saveModel.getSlaveKey1() != null){
            if (saveModel.getSlaveKey1() != null) {
                slave1DictMap.put(saveModel.getSlaveKey1(), saveModel.getSlaveKey1Name());
            }
            if(saveModel.getSlaveKey2() != null){
            if (saveModel.getSlaveKey2() != null) {
                slave2DictMap.put(saveModel.getSlaveKey2(), saveModel.getSlaveKey2Name());
            }
            if(saveModel.getSlaveKey3() != null){
            if (saveModel.getSlaveKey3() != null) {
                slave3DictMap.put(saveModel.getSlaveKey3(), saveModel.getSlaveKey3Name());
            }
            if(saveModel.getSlaveKey4() != null){
            if (saveModel.getSlaveKey4() != null) {
                slave4DictMap.put(saveModel.getSlaveKey4(), saveModel.getSlaveKey4Name());
            }
        }
        int errorCount = 0;
        for(Map<String, Object> map : dataList){
        for (Map<String, Object> map : dataList) {
            SaveModel saveModel = new SaveModel();
            // 去重查询场合
@ -112,73 +112,73 @@ public class ExtractUtil {
            }
            for (TjQuotaDimensionMain main : qdm) {
                String keyVal = main.getKeyVal().contains(".")?main.getKeyVal().substring(main.getKeyVal().indexOf(".")+1):main.getKeyVal();//如mysql 多表拼接时 d.org_code
                if(map.get(keyVal.trim()) != null ){
                String keyVal = main.getKeyVal().contains(".") ? main.getKeyVal().substring(main.getKeyVal().indexOf(".") + 1) : main.getKeyVal();//如mysql 多表拼接时 d.org_code
                if (map.get(keyVal.trim()) != null) {
                    String value = map.get(keyVal.trim()).toString();
                    if(main.getMainCode().equals(main_town) && !StringUtils.isEmpty(townDictMap.get(value))){
                    if (main.getMainCode().equals(main_town) && !StringUtils.isEmpty(townDictMap.get(value))) {
                        saveModel.setTown(value);
                        saveModel.setTownName(townDictMap.get(value));
                    }else if(main.getMainCode().equals(main_org) && !StringUtils.isEmpty(orgDictMap.get(value))){
                    } else if (main.getMainCode().equals(main_org) && !StringUtils.isEmpty(orgDictMap.get(value))) {
                        saveModel.setOrg(value);
                        saveModel.setOrgName(orgDictMap.get(value));
                    }else if(main.getMainCode().equals(main_year) && !StringUtils.isEmpty(yearDictMap.get(value))){
                    } else if (main.getMainCode().equals(main_year) && !StringUtils.isEmpty(yearDictMap.get(value))) {
                        saveModel.setYearName(yearDictMap.get(value));
                        saveModel.setYear(value);
                    }else if(main.getMainCode().equals(main_dept)){
                        if(value.length() > 2){
                            value = value.substring(0,2);
                    } else if (main.getMainCode().equals(main_dept)) {
                        if (value.length() > 2) {
                            value = value.substring(0, 2);
                        }
                        if( !StringUtils.isEmpty(deptDictMap.get(value))){
                        if (!StringUtils.isEmpty(deptDictMap.get(value))) {
                            saveModel.setDeptName(deptDictMap.get(value));
                            saveModel.setDept(value);
                        }
                    }
                }
            }
            if(saveModel.getTown() != null || saveModel.getOrg() !=null){
            if (saveModel.getTown() != null || saveModel.getOrg() != null) {
                for (int i = 0; i < qds.size(); i++) {
                    int num = i+1 ;
                    if(num == 1) {
                        if(map.get(qds.get(i).getKeyVal().trim()) != null){
                    int num = i + 1;
                    if (num == 1) {
                        if (map.get(qds.get(i).getKeyVal().trim()) != null) {
                            String value = map.get(qds.get(i).getKeyVal().trim()).toString();
                            if( !StringUtils.isEmpty(slave1DictMap.get(value))){
                            if (!StringUtils.isEmpty(slave1DictMap.get(value))) {
                                saveModel.setSlaveKey1(value);
                                saveModel.setSlaveKey1Name(slave1DictMap.get(value));
                            }
                        }
                    }else if(num == 2) {
                        if(map.get(qds.get(i).getKeyVal().trim()) != null){
                    } else if (num == 2) {
                        if (map.get(qds.get(i).getKeyVal().trim()) != null) {
                            String value = map.get(qds.get(i).getKeyVal().trim()).toString();
                            if( !StringUtils.isEmpty(slave2DictMap.get(value))){
                            if (!StringUtils.isEmpty(slave2DictMap.get(value))) {
                                saveModel.setSlaveKey2(value);
                                saveModel.setSlaveKey2Name(slave2DictMap.get(value));
                            }
                        }
                    }else if(num == 3) {
                        if(map.get(qds.get(i).getKeyVal().trim()) != null){
                    } else if (num == 3) {
                        if (map.get(qds.get(i).getKeyVal().trim()) != null) {
                            String value = map.get(qds.get(i).getKeyVal().trim()).toString();
                            if( !StringUtils.isEmpty(slave3DictMap.get(value))){
                            if (!StringUtils.isEmpty(slave3DictMap.get(value))) {
                                saveModel.setSlaveKey3(value);
                                saveModel.setSlaveKey3Name(slave3DictMap.get(value));
                            }
                        }
                    }else if(num == 4 ) {
                        if(map.get(qds.get(i).getKeyVal().trim()) != null){
                    } else if (num == 4) {
                        if (map.get(qds.get(i).getKeyVal().trim()) != null) {
                            String value = map.get(qds.get(i).getKeyVal().trim()).toString();
                            if( !StringUtils.isEmpty(slave4DictMap.get(value))){
                            if (!StringUtils.isEmpty(slave4DictMap.get(value))) {
                                saveModel.setSlaveKey4(value);
                                saveModel.setSlaveKey4Name(slave4DictMap.get(value));
                            }
                        }
                    }
                }
                if(!StringUtils.isEmpty(timeKey)){
                    if(!StringUtils.isEmpty( map.get(timeKey) ) ){
                if (!StringUtils.isEmpty(timeKey)) {
                    if (!StringUtils.isEmpty(map.get(timeKey))) {
                        String date = "";
                        if(map.get(timeKey) instanceof String){
                            date = map.get(timeKey).toString().substring(0,10);
                        }else if(map.get(timeKey) instanceof Date){
                            date = DateUtil.formatDate((Date)map.get(timeKey),DateUtil.DEFAULT_DATE_YMD_FORMAT);
                        if (map.get(timeKey) instanceof String) {
                            date = map.get(timeKey).toString().substring(0, 10);
                        } else if (map.get(timeKey) instanceof Date) {
                            date = DateUtil.formatDate((Date) map.get(timeKey), DateUtil.DEFAULT_DATE_YMD_FORMAT);
                        }
                        saveModel.setQuotaDate(date);
                    }
@ -191,42 +191,42 @@ public class ExtractUtil {
//                        }
//                        saveModel.setQuotaDate(date);
//                    }
                    if(!StringUtils.isEmpty( map.get("event_date") )){
                    if (!StringUtils.isEmpty(map.get("event_date"))) {
                        String date = "";
                        if(map.get("event_date") instanceof String){
                            date = map.get("event_date").toString().substring(0,10);
                        }else if(map.get("event_date") instanceof Date){
                            date = DateUtil.formatDate((Date)map.get("event_date"),DateUtil.DEFAULT_DATE_YMD_FORMAT);
                        if (map.get("event_date") instanceof String) {
                            date = map.get("event_date").toString().substring(0, 10);
                        } else if (map.get("event_date") instanceof Date) {
                            date = DateUtil.formatDate((Date) map.get("event_date"), DateUtil.DEFAULT_DATE_YMD_FORMAT);
                        }
                        saveModel.setQuotaDate(date);
                    }
                    if(!StringUtils.isEmpty( map.get("eventDate") )){
                    if (!StringUtils.isEmpty(map.get("eventDate"))) {
                        String date = "";
                        if(map.get("eventDate") instanceof String){
                            date = map.get("eventDate").toString().substring(0,10);
                        }else if(map.get("eventDate") instanceof Date){
                            date = DateUtil.formatDate((Date)map.get("event_date"),DateUtil.DEFAULT_DATE_YMD_FORMAT);
                        if (map.get("eventDate") instanceof String) {
                            date = map.get("eventDate").toString().substring(0, 10);
                        } else if (map.get("eventDate") instanceof Date) {
                            date = DateUtil.formatDate((Date) map.get("event_date"), DateUtil.DEFAULT_DATE_YMD_FORMAT);
                        }
                        saveModel.setQuotaDate(date);
                    }
                }
                if(!StringUtils.isEmpty(aggregationKey)){
                    if(map.get(aggregationKey) != null){
                if (!StringUtils.isEmpty(aggregationKey)) {
                    if (map.get(aggregationKey) != null) {
                        saveModel.setResult(map.get(aggregationKey).toString());
                    }
                }else {
                } else {
                    saveModel.setResult("1");
                }
                saveModel.setQuotaCode(quotaVo.getCode().replaceAll("_",""));
                saveModel.setQuotaCode(quotaVo.getCode().replaceAll("_", ""));
                saveModel.setQuotaName(quotaVo.getName());
                returnList.add(saveModel);
            }else {
            } else {
                errorCount++;
            }
        }
        //关联机构相关信息
        if(orgDictMap != null && orgDictMap.size() > 0){
        if (orgDictMap != null && orgDictMap.size() > 0) {
            setSaveModelProperties(returnList);
        }
        logger.info("指标:" + quotaVo.getName() + "统计时指标或者机构未关联上错误数据有:" + errorCount);
@ -235,37 +235,38 @@ public class ExtractUtil {
    /**
     * 获取所有维度字典
     *
     * @param qdm
     * @param qds
     * @return
     */
    public List<SaveModel> getTotalDictDataList(List<TjQuotaDimensionMain> qdm, List<TjQuotaDimensionSlave> qds){
    public List<SaveModel> getTotalDictDataList(List<TjQuotaDimensionMain> qdm, List<TjQuotaDimensionSlave> qds) {
        List<SaveModel> totalSaveModelDictList = new ArrayList<>();
        for (TjQuotaDimensionMain main : qdm) {
            List<SaveModel> saveModelDicts = jdbcTemplate.query(main.getDictSql(), new BeanPropertyRowMapper(SaveModel.class));
            if (saveModelDicts != null) {
                for(SaveModel saveModel :saveModelDicts){
                for (SaveModel saveModel : saveModelDicts) {
                    totalSaveModelDictList.add(saveModel);
                }
            }
        }
        for (int i = 0; i < qds.size(); i++) {
            int num = i+1;
            if(qds.get(i).getDictSql() != null){
            int num = i + 1;
            if (qds.get(i).getDictSql() != null) {
                List<DictModel> dictModels = jdbcTemplate.query(qds.get(i).getDictSql(), new BeanPropertyRowMapper(DictModel.class));
                if (dictModels != null) {
                    for(DictModel dictModel :dictModels){
                    for (DictModel dictModel : dictModels) {
                        SaveModel saveModel = new SaveModel();
                        if(num == 1){
                        if (num == 1) {
                            saveModel.setSlaveKey1(dictModel.getCode());
                            saveModel.setSlaveKey1Name(dictModel.getName());
                        }else  if(num == 2){
                        } else if (num == 2) {
                            saveModel.setSlaveKey2(dictModel.getCode());
                            saveModel.setSlaveKey2Name(dictModel.getName());
                        }else  if(num == 3){
                        } else if (num == 3) {
                            saveModel.setSlaveKey3(dictModel.getCode());
                            saveModel.setSlaveKey3Name(dictModel.getName());
                        }else  if(num == 4){
                        } else if (num == 4) {
                            saveModel.setSlaveKey4(dictModel.getCode());
                            saveModel.setSlaveKey4Name(dictModel.getName());
                        }
@ -483,7 +484,6 @@ public class ExtractUtil {
                    }
                    code = code.substring(0, 1).toUpperCase() + code.substring(1);
                    StringBuffer keyMethodName = new StringBuffer("set" + code);
                    StringBuffer nameMethodName = new StringBuffer("set" + code + "Name");
@ -515,7 +515,7 @@ public class ExtractUtil {
                    BeanUtils.copyProperties(one.getValue(), saveModelTemp);
                    SaveModel.class.getMethod(keyMethod, String.class).invoke(saveModelTemp, dictOne.getCode());
                    SaveModel.class.getMethod(nameMethod, String.class).invoke(saveModelTemp, dictOne.getName());
                    returnAllData.put(newKey.toString(), saveModelTemp);
                    returnAllData.put(newKey, saveModelTemp);
                }
            }
        } catch (Exception e) {
@ -636,15 +636,15 @@ public class ExtractUtil {
        //上饶区县
        String townSql = "SELECT id as code,name as name  from address_dict where pid = '361100'";
        List<DictModel> townDictDatas = jdbcTemplate.query(townSql, new BeanPropertyRowMapper(DictModel.class));
        Map<String,String> townMap = new HashMap<>();
        for(DictModel dictModel : townDictDatas){
        Map<String, String> townMap = new HashMap<>();
        for (DictModel dictModel : townDictDatas) {
            townMap.put(dictModel.getCode(), dictModel.getName());
        }
        //机构类型 目录对应的名称和节点id
        String orgHealthCategorySql = "SELECT id as orgHealthCategoryId,pid as orgHealthCategoryPid,top_pid as orgHealthCategoryTopPid,code as orgHealthCategoryCode, name as orgHealthCategoryName from org_health_category";
        List<OrgHealthCategoryShowModel> orgHealthCategoryDictDatas = jdbcTemplate.query(orgHealthCategorySql, new BeanPropertyRowMapper(OrgHealthCategoryShowModel.class));
        Map<String,OrgHealthCategoryShowModel>  orgHealthCategoryMap = new HashMap<>();
        for(OrgHealthCategoryShowModel orgHealthCategory : orgHealthCategoryDictDatas){
        Map<String, OrgHealthCategoryShowModel> orgHealthCategoryMap = new HashMap<>();
        for (OrgHealthCategoryShowModel orgHealthCategory : orgHealthCategoryDictDatas) {
            orgHealthCategoryMap.put(orgHealthCategory.getOrgHealthCategoryCode(), orgHealthCategory);
        }
@ -667,14 +667,14 @@ public class ExtractUtil {
                MOrganization organization = organizations.get(0);
                if (!StringUtils.isEmpty(organization.getAdministrativeDivision())) {
                    String orgCode = organization.getAdministrativeDivision().toString();
                    if(townMap.get(orgCode) != null ){
                    if (townMap.get(orgCode) != null) {
                        model.setTown(orgCode);
                        model.setTownName(townMap.get(orgCode));
                    }
                }
                //关联出对应的机构类型
                if (!StringUtils.isEmpty(organization.getHosTypeId())) {
                    if(orgHealthCategoryMap.get(organization.getHosTypeId()) != null ){
                    if (orgHealthCategoryMap.get(organization.getHosTypeId()) != null) {
                        OrgHealthCategoryShowModel orgHealthCategory = orgHealthCategoryMap.get(organization.getHosTypeId());
                        model.setOrgHealthCategoryCode(organization.getHosTypeId());
                        model.setOrgHealthCategoryName(orgHealthCategory.getOrgHealthCategoryName());

+ 146 - 150
src/main/java/com/yihu/quota/etl/extract/es/EsExtract.java

@ -5,19 +5,15 @@ import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.etl.extract.ExtractUtil;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.etl.util.ElasticsearchUtil;
import com.yihu.quota.etl.util.EsClientUtil;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.service.orgHealthCategory.OrgHealthCategoryStatisticsService;
import com.yihu.quota.util.ElasticsearchUtil;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.service.special.org.OrgHealthCategoryStatisticsService;
import com.yihu.quota.service.quota.BaseStatistsService;
import com.yihu.quota.vo.DictModel;
import com.yihu.quota.vo.QuotaVo;
import com.yihu.quota.vo.SaveModel;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -34,9 +30,10 @@ import java.util.*;
@Component
@Scope("prototype")
public class EsExtract {
    private static String orgHealthCategory = "orgHealthCategory";
    private Logger logger = LoggerFactory.getLogger(EsExtract.class);
    @Autowired
    private EsClientUtil esClientUtil;
    private ElasticsearchUtil esClientUtil;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
@ -45,10 +42,8 @@ public class EsExtract {
    private ElasticsearchUtil elasticsearchUtil;
    @Autowired
    private BaseStatistsService baseStatistsService;
    @Autowired
    private OrgHealthCategoryStatisticsService orgHealthCategoryStatisticsService;
    private String startTime;
    private String endTime;
    private String timeLevel;
@ -56,9 +51,6 @@ public class EsExtract {
    private QuotaVo quotaVo;
    private EsConfig esConfig;
    private static String orgHealthCategory = "orgHealthCategory";
    public List<SaveModel> extract(List<TjQuotaDimensionMain> qdm,//主维度
                                   List<TjQuotaDimensionSlave> qds,//细维度
                                   String startTime,//开始时间
@ -74,7 +66,7 @@ public class EsExtract {
        this.saasid = saasid;
        this.quotaVo = quotaVo;
        this.esConfig = esConfig;
        initParams(this.startTime ,this.endTime);
        initParams(this.startTime, this.endTime);
        List<SaveModel> saveModels = null;
        //普通通用 拼接sql 方式
        //拼凑查询的sql
@ -82,22 +74,24 @@ public class EsExtract {
        logger.warn("查询sql:" + sql);
        //根据sql查询ES
        try {
            saveModels = queryEsBySql(sql,esConfig.getTimekey(),qdm, qds);
        }catch (Exception e){
            throw new Exception("es 查询数据出错!" +e.getMessage() );
            saveModels = queryEsBySql(sql, esConfig.getTimekey(), qdm, qds);
        } catch (Exception e) {
            throw new Exception("es 查询数据出错!" + e.getMessage());
        }
        return saveModels;
    }
    public void initParams(String startTime, String endTime) {
        // 初始执行指标,起止日期没有值
        this.startTime = startTime == null ? null : startTime.substring(0,10);
        this.startTime = startTime == null ? null : startTime.substring(0, 10);
        String now = DateUtil.formatDate(new Date(), DateUtil.DEFAULT_DATE_YMD_FORMAT);
        this.endTime = endTime == null ? now : endTime.substring(0,10);;
        this.endTime = endTime == null ? now : endTime.substring(0, 10);
        ;
    }
    /**
     * 卫生机构类别 抽取
     *
     * @param qdm
     * @param qds
     * @param startTime
@ -110,13 +104,13 @@ public class EsExtract {
     * @throws Exception
     */
    public List<SaveModel> extractOrgHealthCategory(List<TjQuotaDimensionMain> qdm,//主维度
                                   List<TjQuotaDimensionSlave> qds,//细维度
                                   String startTime,//开始时间
                                   String endTime, //结束时间
                                   String timeLevel, //时间维度  1日,2 周, 3 月,4 年
                                   String saasid,//saasid
                                   QuotaVo quotaVo,//指标code
                                   EsConfig esConfig //es配置
                                                    List<TjQuotaDimensionSlave> qds,//细维度
                                                    String startTime,//开始时间
                                                    String endTime, //结束时间
                                                    String timeLevel, //时间维度  1日,2 周, 3 月,4 年
                                                    String saasid,//saasid
                                                    QuotaVo quotaVo,//指标code
                                                    EsConfig esConfig //es配置
    ) throws Exception {
        this.startTime = startTime;
        this.endTime = endTime;
@ -129,111 +123,111 @@ public class EsExtract {
        List<SaveModel> saveModels = new ArrayList<>();
        try {
            //二次统计   特殊类型:卫生机构类型
            if( (!StringUtils.isEmpty(esConfig.getEspecialType())) && esConfig.getEspecialType().equals(orgHealthCategory)){
            if ((!StringUtils.isEmpty(esConfig.getEspecialType())) && esConfig.getEspecialType().equals(orgHealthCategory)) {
                Map<String, Object> dimensionMap = new HashMap<>();
                Map<String,String>  dimensionDicMap = new HashMap<>();
                Map<String, String> dimensionDicMap = new HashMap<>();
                //查询除开 机构维度  其他维度的字典项和 维度合并到map
                //维度key 统一变小写
                for(TjQuotaDimensionMain main:qdm){
                    if(!main.getMainCode().trim().equals("org")){
                        dimensionMap.put(main.getMainCode(),main.getMainCode());
                        if(org.apache.commons.lang.StringUtils.isNotEmpty(main.getDictSql())){
                            Map<String,String> dicMap = baseStatistsService.getDimensionMap(main.getDictSql(),main.getMainCode());
                            if(dicMap != null && dicMap.size() > 0){
                                for(String key :dicMap.keySet()){
                                    dimensionDicMap.put(key.toLowerCase(),dicMap.get(key));
                for (TjQuotaDimensionMain main : qdm) {
                    if (!main.getMainCode().trim().equals("org")) {
                        dimensionMap.put(main.getMainCode(), main.getMainCode());
                        if (org.apache.commons.lang.StringUtils.isNotEmpty(main.getDictSql())) {
                            Map<String, String> dicMap = baseStatistsService.getDimensionMap(main.getDictSql(), main.getMainCode());
                            if (dicMap != null && dicMap.size() > 0) {
                                for (String key : dicMap.keySet()) {
                                    dimensionDicMap.put(key.toLowerCase(), dicMap.get(key));
                                }
                            }
                        }
                    }
                }
                for(TjQuotaDimensionSlave slave:qds){
                    dimensionMap.put(slave.getKeyVal(),slave.getKeyVal());
                    if(org.apache.commons.lang.StringUtils.isNotEmpty(slave.getDictSql())){
                        Map<String,String> dicMap = baseStatistsService.getDimensionMap(slave.getDictSql(), slave.getSlaveCode());
                        if(dicMap != null && dicMap.size() > 0){
                            for(String key :dicMap.keySet()){
                                dimensionDicMap.put(key.toLowerCase(),dicMap.get(key));
                for (TjQuotaDimensionSlave slave : qds) {
                    dimensionMap.put(slave.getKeyVal(), slave.getKeyVal());
                    if (org.apache.commons.lang.StringUtils.isNotEmpty(slave.getDictSql())) {
                        Map<String, String> dicMap = baseStatistsService.getDimensionMap(slave.getDictSql(), slave.getSlaveCode());
                        if (dicMap != null && dicMap.size() > 0) {
                            for (String key : dicMap.keySet()) {
                                dimensionDicMap.put(key.toLowerCase(), dicMap.get(key));
                            }
                        }
                    }
                }
                String dimension = "";
                for(String key :dimensionMap.keySet()){
                for (String key : dimensionMap.keySet()) {
                    dimension += dimensionMap.get(key) + ";";
                }
                if(dimension.length() < 1 ){
                    throw new Exception("特殊机构类型转化时 维度不能为空!" );
                }else {
                    dimension = dimension.substring(0,dimension.length()-1);
                if (dimension.length() < 1) {
                    throw new Exception("特殊机构类型转化时 维度不能为空!");
                } else {
                    dimension = dimension.substring(0, dimension.length() - 1);
                }
                String filter = "";
                if ( !StringUtils.isEmpty(startTime) && !StringUtils.isEmpty(endTime)) {
                    filter = " quotaDate >= '" + startTime.substring(0,10) + "' and quotaDate <= '" + endTime.substring(0,10) +"' ";
                if (!StringUtils.isEmpty(startTime) && !StringUtils.isEmpty(endTime)) {
                    filter = " quotaDate >= '" + startTime.substring(0, 10) + "' and quotaDate <= '" + endTime.substring(0, 10) + "' ";
                }
                //查询分组的时候要增加 org 时间 ,每天的不同机构的数据
                dimension += ";org;quotaDate";
                dimensionMap.put("org", "org");
                dimensionMap.put("quotaDate","quotaDate");
                dimensionMap.put("quotaDate", "quotaDate");
                List<Map<String, Object>> orgTypeResultList = new ArrayList<>();
                List<Map<String, Object>> mapList = baseStatistsService.getOrgHealthCategoryQuotaResultList(esConfig.getSuperiorBaseQuotaCode(),dimension,filter, "");
                if(mapList != null && mapList.size() > 0){
                    for(Map<String,Object> map : mapList){
                List<Map<String, Object>> mapList = baseStatistsService.getOrgHealthCategoryQuotaResultList(esConfig.getSuperiorBaseQuotaCode(), dimension, filter, "");
                if (mapList != null && mapList.size() > 0) {
                    for (Map<String, Object> map : mapList) {
                        String dictSql = "SELECT org_code as orgCode,hos_type_id as hosTypeId from organizations where org_code=";
                        dictSql = dictSql + "'"+ map.get("org") + "'";
                        dictSql = dictSql + "'" + map.get("org") + "'";
                        List<MOrganization> organizations = jdbcTemplate.query(dictSql, new BeanPropertyRowMapper(MOrganization.class));
                        if(organizations != null && organizations.size() > 0){
                            if(!StringUtils.isEmpty(organizations.get(0).getHosTypeId())){
                                map.put(orgHealthCategory,organizations.get(0).getHosTypeId());
                        if (organizations != null && organizations.size() > 0) {
                            if (!StringUtils.isEmpty(organizations.get(0).getHosTypeId())) {
                                map.put(orgHealthCategory, organizations.get(0).getHosTypeId());
                                orgTypeResultList.add(map);
                            }
                        }
                    }
                }
                List<List<Map<String, Object>>> sumOrgTypeList =  stastisOrtType(orgTypeResultList,dimensionMap, dimensionDicMap);
                List<List<Map<String, Object>>> sumOrgTypeList = stastisOrtType(orgTypeResultList, dimensionMap, dimensionDicMap);
                Map<String,String> dimenKeyValMap = new HashMap<>();
                Map<String, String> dimenKeyValMap = new HashMap<>();
                dimensionMap.remove("org");
                for(Map<String,Object> map : orgTypeResultList){
                for (Map<String, Object> map : orgTypeResultList) {
                    String key = "";
                    for(String dimen:dimensionMap.keySet()){
                        key +=  map.get(dimen) + "-" ;
                    for (String dimen : dimensionMap.keySet()) {
                        key += map.get(dimen) + "-";
                    }
                    dimenKeyValMap.put(key,key);
                    dimenKeyValMap.put(key, key);
                }
                List<List<Map<String, Object>>> dimenSumOrgTypeList = new ArrayList<>();
                for(String dimenKey :dimenKeyValMap.keySet()){
                for (String dimenKey : dimenKeyValMap.keySet()) {
                    List<Map<String, Object>> newDimenList = new ArrayList<>();
                    for(List<Map<String, Object>> list:sumOrgTypeList){
                    for (List<Map<String, Object>> list : sumOrgTypeList) {
                        String key = "";
                        for(Map<String, Object> map :list){
                            for(String dimen:dimensionMap.keySet()){
                                key += map.get(dimen)  + "-" ;
                        for (Map<String, Object> map : list) {
                            for (String dimen : dimensionMap.keySet()) {
                                key += map.get(dimen) + "-";
                            }
                            if(dimenKey.equals(key)){
                                key +=  map.get("code");
                            if (dimenKey.equals(key)) {
                                key += map.get("code");
                                boolean flag = true;
                                //判断有没有维度一致的 有就结果叠加
                                if(newDimenList != null && newDimenList.size() > 0){
                                    for(Map<String, Object> newDimeMap :newDimenList) {
                                if (newDimenList != null && newDimenList.size() > 0) {
                                    for (Map<String, Object> newDimeMap : newDimenList) {
                                        String newkey = "";
                                        for (String dimen : dimensionMap.keySet()) {
                                            newkey += newDimeMap.get(dimen) + "-";
                                        }
                                        newkey +=  newDimeMap.get("code");
                                        if(newkey.equals(key)){
                                        newkey += newDimeMap.get("code");
                                        if (newkey.equals(key)) {
                                            int newResult = Integer.valueOf(newDimeMap.get("result").toString());
                                            int result = Integer.valueOf(map.get("result").toString());
                                            newDimeMap.put("result",newResult + result );
                                            newDimeMap.put("result", newResult + result);
                                            flag = false;
                                        }
                                    }
                                }
                                if(flag){
                                if (flag) {
                                    newDimenList.add(map);
                                }
                            }
@ -242,13 +236,13 @@ public class EsExtract {
                    dimenSumOrgTypeList.add(newDimenList);
                }
                for(List<Map<String, Object>> list:dimenSumOrgTypeList){
                for (List<Map<String, Object>> list : dimenSumOrgTypeList) {
                    saveModels.addAll(orgHealthCategoryStatisticsService.getAllNodesStatistic(list));
                }
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("ES 特殊机构转化 查询数据出错!" +e.getMessage() );
            throw new Exception("ES 特殊机构转化 查询数据出错!" + e.getMessage());
        }
        return saveModels;
@ -257,22 +251,23 @@ public class EsExtract {
    /**
     * 统计整理 不同维度的组合数据
     *
     * @param orgTypeList
     * @param dimensionMap 维度集合
     * @param dimensionMap    维度集合
     * @param dimensionDicMap 字典项key-value map
     * @return
     */
    public List<List<Map<String, Object>>> stastisOrtType(List<Map<String, Object>> orgTypeList,Map<String, Object> dimensionMap,
                                                          Map<String,String>  dimensionDicMap){
    public List<List<Map<String, Object>>> stastisOrtType(List<Map<String, Object>> orgTypeList, Map<String, Object> dimensionMap,
                                                          Map<String, String> dimensionDicMap) {
        Map<String,String> dimenTypeMap = new HashMap<>();
        Map<String,String> orgDimenTypeMap = new HashMap<>();
        if(orgTypeList != null && orgTypeList.size() > 0){
            for(Map<String,Object> map : orgTypeList){
                if( !StringUtils.isEmpty(map.get(orgHealthCategory))){
        Map<String, String> dimenTypeMap = new HashMap<>();
        Map<String, String> orgDimenTypeMap = new HashMap<>();
        if (orgTypeList != null && orgTypeList.size() > 0) {
            for (Map<String, Object> map : orgTypeList) {
                if (!StringUtils.isEmpty(map.get(orgHealthCategory))) {
                    String key = "";
                    String orgTypekey = map.get(orgHealthCategory).toString();
                    for(String dimen:dimensionMap.keySet()){
                    for (String dimen : dimensionMap.keySet()) {
                        key += "-" + map.get(dimen);
                        orgTypekey += "-" + map.get(dimen);
                    }
@ -282,87 +277,87 @@ public class EsExtract {
            }
        }
        List<List<Map<String, Object>>> dimenSumList = new ArrayList<>();
        if(dimenTypeMap != null && dimenTypeMap.size() > 0){
            for(String type : dimenTypeMap.keySet()){
        if (dimenTypeMap != null && dimenTypeMap.size() > 0) {
            for (String type : dimenTypeMap.keySet()) {
                List<Map<String, Object>> sumOrgTypeList = new ArrayList<>();
                double count = 0.0;
                for(String orgDimenType : orgDimenTypeMap.keySet()){
                for (String orgDimenType : orgDimenTypeMap.keySet()) {
                    Map<String, Object> sumDimenMap = new HashMap<>();
                    if(orgDimenType.contains(type) && orgTypeList != null && orgTypeList.size() > 0){
                        for(Map<String,Object> map : orgTypeList){
                    if (orgDimenType.contains(type) && orgTypeList != null && orgTypeList.size() > 0) {
                        for (Map<String, Object> map : orgTypeList) {
                            String key = map.get(orgHealthCategory).toString();
                            for(String dimen:dimensionMap.keySet()){
                            for (String dimen : dimensionMap.keySet()) {
                                key += "-" + map.get(dimen);
                            }
                            if(orgDimenType.equals(key)){
                                sumDimenMap.put("code",map.get(orgHealthCategory).toString());
                                sumDimenMap.put("quotaDate",map.get("quotaDate"));
                            if (orgDimenType.equals(key)) {
                                sumDimenMap.put("code", map.get(orgHealthCategory).toString());
                                sumDimenMap.put("quotaDate", map.get("quotaDate"));
                                count = count + Double.valueOf(map.get("result").toString());
                                if(dimensionMap != null && dimensionMap.size() > 0){
                                    for(String dimen:dimensionMap.keySet()){
                                        sumDimenMap.put(dimen,map.get(dimen));
                                        sumDimenMap.put(dimen+"Name",dimensionDicMap.get(map.get(dimen).toString().toLowerCase()));
                                if (dimensionMap != null && dimensionMap.size() > 0) {
                                    for (String dimen : dimensionMap.keySet()) {
                                        sumDimenMap.put(dimen, map.get(dimen));
                                        sumDimenMap.put(dimen + "Name", dimensionDicMap.get(map.get(dimen).toString().toLowerCase()));
                                    }
                                }
                            }
                        }
                        sumDimenMap.put("quotaCode",quotaVo.getCode());
                        sumDimenMap.put("quotaName",quotaVo.getName());
                        sumDimenMap.put("result",(int)count);
                        sumDimenMap.put("quotaCode", quotaVo.getCode());
                        sumDimenMap.put("quotaName", quotaVo.getName());
                        sumDimenMap.put("result", (int) count);
                        sumOrgTypeList.add(sumDimenMap);
                    }
                }
                dimenSumList.add(sumOrgTypeList);
            }
        }
        return  dimenSumList;
        return dimenSumList;
    }
    private  List<SaveModel> queryEsBySql(String sql,String timekey,List<TjQuotaDimensionMain> qdm,  List<TjQuotaDimensionSlave> qds) {
    private List<SaveModel> queryEsBySql(String sql, String timekey, List<TjQuotaDimensionMain> qdm, List<TjQuotaDimensionSlave> qds) {
        List<SaveModel> returnList = new ArrayList<>();
        try {
            List<String> dimenList = new ArrayList<>();
            for(TjQuotaDimensionMain main:qdm){
            for (TjQuotaDimensionMain main : qdm) {
                dimenList.add(main.getKeyVal());
            }
            for(TjQuotaDimensionSlave slave:qds){
            for (TjQuotaDimensionSlave slave : qds) {
                dimenList.add(slave.getKeyVal());
            }
            Map<String,String> resultMap = new HashMap<>();
            Map<String, String> resultMap = new HashMap<>();
            Map<String, String> daySlaveDictMap = new HashMap<>();
            List<Map<String, Object>> listMap = elasticsearchUtil.excuteDataModel(sql.toString());
            if(org.apache.commons.lang.StringUtils.isNotEmpty(esConfig.getAggregation()) && esConfig.getAggregation().equals("list")){
            if (org.apache.commons.lang.StringUtils.isNotEmpty(esConfig.getAggregation()) && esConfig.getAggregation().equals("list")) {
                returnList = extractUtil.computeList(qdm, qds, listMap, esConfig.getTimekey(), esConfig.getAggregationKey(), quotaVo);
            }else {
                for(Map<String, Object> map : listMap){
            } else {
                for (Map<String, Object> map : listMap) {
                    String keyVal = "";
                    for(String dimen :dimenList){
                        if(map.get(dimen) != null){
                            if(keyVal.length()==0){
                    for (String dimen : dimenList) {
                        if (map.get(dimen) != null) {
                            if (keyVal.length() == 0) {
                                keyVal = map.get(dimen).toString();
                            }else {
                                keyVal += "-" + map.get(dimen) ;
                            } else {
                                keyVal += "-" + map.get(dimen);
                            }
                        }
                    }
                    String dateKey = "date_histogram(field=" + timekey + ",interval=day)";
                    if(map.containsKey(dateKey)){
                    if (map.containsKey(dateKey)) {
                        keyVal += "-" + map.get(dateKey).toString().substring(0, 10);
                        daySlaveDictMap.put(keyVal,map.get(dateKey).toString().substring(0,10));
                        daySlaveDictMap.put(keyVal, map.get(dateKey).toString().substring(0, 10));
                    }
                    if(map.containsKey("result")){
                    if (map.containsKey("result")) {
                        NumberFormat nf = NumberFormat.getInstance();
                        nf.setGroupingUsed(false);
                        nf.setMaximumFractionDigits(2);
                        resultMap.put(keyVal, nf.format(map.get("result")));
                    }
                    if(map.containsKey("count(1)")){
                    if (map.containsKey("count(1)")) {
                        NumberFormat nf = NumberFormat.getInstance();
                        nf.setGroupingUsed(false);
                        nf.setMaximumFractionDigits(2);
                        resultMap.put(keyVal, nf.format(map.get("count(1)")));
                    }
                    if(map.containsKey("SUM(result)")){
                    if (map.containsKey("SUM(result)")) {
                        NumberFormat nf = NumberFormat.getInstance();
                        nf.setGroupingUsed(false);
                        nf.setMaximumFractionDigits(2);
@ -383,19 +378,20 @@ public class EsExtract {
    /**
     * 拼接sql
     *
     * @param tjQuotaDimensionMains
     * @param tjQuotaDimensionSlaves
     * @return
     */
    private String getSql(List<TjQuotaDimensionMain> tjQuotaDimensionMains, List<TjQuotaDimensionSlave> tjQuotaDimensionSlaves) throws Exception{
    private String getSql(List<TjQuotaDimensionMain> tjQuotaDimensionMains, List<TjQuotaDimensionSlave> tjQuotaDimensionSlaves) throws Exception {
        StringBuffer allField = new StringBuffer("");
        String tableName = esConfig.getIndex();
        for (TjQuotaDimensionMain one :tjQuotaDimensionMains) {
        for (TjQuotaDimensionMain one : tjQuotaDimensionMains) {
            String code = one.getKeyVal();
            allField.append(code+ ",");
            allField.append(code + ",");
        }
        for (TjQuotaDimensionSlave slave :tjQuotaDimensionSlaves) {
        for (TjQuotaDimensionSlave slave : tjQuotaDimensionSlaves) {
            allField.append(slave.getKeyVal() + ",");
        }
@ -408,44 +404,44 @@ public class EsExtract {
        }
        String timeKey = esConfig.getTimekey();
        String timeGroup = "";
        if ( !StringUtils.isEmpty(timeKey)) {
            timeGroup = ",date_histogram(field='"+ timeKey +"','interval'='day')";
            if(filterFlag){
        if (!StringUtils.isEmpty(timeKey)) {
            timeGroup = ",date_histogram(field='" + timeKey + "','interval'='day')";
            if (filterFlag) {
                whereSql.append(" and ");
            }
            if ( !StringUtils.isEmpty(startTime) && !StringUtils.isEmpty(endTime)) {
                whereSql.append( timeKey + " >= '" + startTime + "' and ");
                whereSql.append( timeKey + " <='" + endTime + "'");
            if (!StringUtils.isEmpty(startTime) && !StringUtils.isEmpty(endTime)) {
                whereSql.append(timeKey + " >= '" + startTime + "' and ");
                whereSql.append(timeKey + " <='" + endTime + "'");
            }
        }
        String selectGroupField = allField.toString();
        String whereGroupField = allField.substring(0,allField.length() - 1);
        String whereGroupField = allField.substring(0, allField.length() - 1);
        //拼接整个sql 语法
        StringBuffer sql = new StringBuffer();
        if(StringUtils.isEmpty(esConfig.getAggregation()) && StringUtils.isEmpty(esConfig.getAddFirstQuotaCode())){
            sql.append("select " + selectGroupField + " count(1) from " + tableName + whereSql + " group by " + whereGroupField + timeGroup );
        if (StringUtils.isEmpty(esConfig.getAggregation()) && StringUtils.isEmpty(esConfig.getAddFirstQuotaCode())) {
            sql.append("select " + selectGroupField + " count(1) from " + tableName + whereSql + " group by " + whereGroupField + timeGroup);
        } else if (!StringUtils.isEmpty(esConfig.getAddFirstQuotaCode())) {
            String myWhere = "quotaCode in('" + esConfig.getAddFirstQuotaCode().replace("_", "") + "','" + esConfig.getAddSecondQuotaCode().replace("_", "") + "')";
            if (!"where".equals(whereSql.toString().trim())) {
                myWhere = " and " + myWhere;
            }
            sql.append("select " + selectGroupField + " sum(result) from " + tableName + whereSql + myWhere + " group by " + whereGroupField + timeGroup);
        } else if(esConfig.getAggregation().equals(Contant.quota.aggregation_sum)){
            if(!StringUtils.isEmpty(esConfig.getAggregation()) && StringUtils.isEmpty(selectGroupField)|| selectGroupField.length()==0){
                sql.append("select sum(" ).append(esConfig.getAggregationKey()).append(" )  from " + tableName + whereSql);
            }else {
                sql.append("select ").append(selectGroupField ).append(" sum(").append(esConfig.getAggregationKey()).append(" ) result from " + tableName + whereSql + " group by "  + whereGroupField + timeGroup );
        } else if (esConfig.getAggregation().equals(Contant.quota.aggregation_sum)) {
            if (!StringUtils.isEmpty(esConfig.getAggregation()) && StringUtils.isEmpty(selectGroupField) || selectGroupField.length() == 0) {
                sql.append("select sum(").append(esConfig.getAggregationKey()).append(" )  from " + tableName + whereSql);
            } else {
                sql.append("select ").append(selectGroupField).append(" sum(").append(esConfig.getAggregationKey()).append(" ) result from " + tableName + whereSql + " group by " + whereGroupField + timeGroup);
            }
        }else if(esConfig.getAggregation().equals(Contant.quota.aggregation_list)){
            if(esConfig.getTimekey() != null){
                if( StringUtils.isEmpty( esConfig.getAggregationKey()) ){
                    sql.append("select " + selectGroupField.substring(0,selectGroupField.length()-1) + "," + esConfig.getTimekey() +  " from " + tableName + whereSql + " limit 10000 ");//最多一次1万条
                }else {
                    sql.append("select " + selectGroupField + esConfig.getAggregationKey() + "," + esConfig.getTimekey() +   " from " + tableName + whereSql  + " limit 10000 ");
        } else if (esConfig.getAggregation().equals(Contant.quota.aggregation_list)) {
            if (esConfig.getTimekey() != null) {
                if (StringUtils.isEmpty(esConfig.getAggregationKey())) {
                    sql.append("select " + selectGroupField.substring(0, selectGroupField.length() - 1) + "," + esConfig.getTimekey() + " from " + tableName + whereSql + " limit 10000 ");//最多一次1万条
                } else {
                    sql.append("select " + selectGroupField + esConfig.getAggregationKey() + "," + esConfig.getTimekey() + " from " + tableName + whereSql + " limit 10000 ");
                }
            }else {
                throw  new Exception("配置参数 timekey 不能为空");
            } else {
                throw new Exception("配置参数 timekey 不能为空");
            }
        }
        return sql.toString();

+ 154 - 160
src/main/java/com/yihu/quota/etl/extract/es/EsResultExtract.java

@ -4,10 +4,10 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.elasticsearch.ElasticSearchPool;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.etl.util.ElasticsearchUtil;
import com.yihu.quota.model.jpa.TjQuota;
import com.yihu.quota.model.jpa.save.TjDataSave;
import com.yihu.quota.model.jpa.save.TjQuotaDataSave;
import com.yihu.quota.util.ElasticsearchUtil;
import com.yihu.quota.model.TjQuota;
import com.yihu.quota.model.save.TjDataSave;
import com.yihu.quota.model.save.TjQuotaDataSave;
import com.yihu.quota.service.save.TjDataSaveService;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
@ -36,8 +36,11 @@ import java.util.Map;
@Component
@Scope("prototype")
public class EsResultExtract {
    @Autowired
    ElasticsearchUtil elasticsearchUtil;
    @Autowired
    ElasticSearchPool elasticSearchPool;
    private Logger logger = LoggerFactory.getLogger(EsResultExtract.class);
    private String startTime;
    private String endTime;
    private String org;
@ -54,15 +57,11 @@ public class EsResultExtract {
    private String quotaCode;
    private EsConfig esConfig;
    @Autowired
    ElasticsearchUtil elasticsearchUtil;
    @Autowired
    ElasticSearchPool elasticSearchPool;
    @Autowired
    private TjDataSaveService tjDataSaveService;
    @Autowired
    private ObjectMapper objectMapper;
    public void initialize(TjQuota tjQuota ,String filters) throws Exception {
    public void initialize(TjQuota tjQuota, String filters) throws Exception {
        this.startTime = null;
        this.endTime = null;
        this.orgName = null;
@ -77,34 +76,35 @@ public class EsResultExtract {
        this.slaveKey1 = null;
        this.slaveKey2 = null;
        if(!StringUtils.isEmpty(filters)){
            Map<String, Object> params  = objectMapper.readValue(filters, new TypeReference<Map>() {});
            if (params !=null && params.size() > 0){
                for(String key : params.keySet()){
                    if( params.get(key) != null ){
                        if(key.equals("startTime"))
        if (!StringUtils.isEmpty(filters)) {
            Map<String, Object> params = objectMapper.readValue(filters, new TypeReference<Map>() {
            });
            if (params != null && params.size() > 0) {
                for (String key : params.keySet()) {
                    if (params.get(key) != null) {
                        if (key.equals("startTime")) {
                            this.startTime = params.get(key).toString();
                        else if(key.equals("endTime"))
                        } else if (key.equals("endTime")) {
                            this.endTime = params.get(key).toString();
                        else if(key.equals("orgName"))
                        } else if (key.equals("orgName")) {
                            this.orgName = params.get(key).toString();
                        else if(key.equals("org"))
                        } else if (key.equals("org")) {
                            this.org = params.get(key).toString();
                        else if(key.equals("province"))
                        } else if (key.equals("province")) {
                            this.province = params.get(key).toString();
                        else if(key.equals("city"))
                        } else if (key.equals("city")) {
                            this.city = params.get(key).toString();
                        else if(key.equals("town"))
                        } else if (key.equals("town")) {
                            this.town = params.get(key).toString();
                        else if(key.equals("townName"))
                        } else if (key.equals("townName")) {
                            this.townName = params.get(key).toString();
                        else if(key.equals("year"))
                        } else if (key.equals("year")) {
                            this.year = params.get(key).toString();
                        else if(key.equals("slaveKey1"))
                        } else if (key.equals("slaveKey1")) {
                            this.slaveKey1 = params.get(key).toString();
                        else if(key.equals("slaveKey2"))
                        } else if (key.equals("slaveKey2")) {
                            this.slaveKey2 = params.get(key).toString();
                        else if(key.equals("result")){
                        } else if (key.equals("result")) {
                            this.result = params.get(key).toString();
                        }
                    }
@ -112,7 +112,7 @@ public class EsResultExtract {
            }
        }
        this.tjQuota = tjQuota;
        if(null != tjQuota && StringUtils.isNotEmpty(tjQuota.getCode())){
        if (null != tjQuota && StringUtils.isNotEmpty(tjQuota.getCode())) {
            this.quotaCode = tjQuota.getCode();
        }
        EsConfig esConfig = null;
@ -130,9 +130,9 @@ public class EsResultExtract {
        //判断数据源是什么类型,根据类型和数据库相关的配置信息抽取数据
        EsConfig esConfig = null;
        if (TjDataSave.type_es.equals(quotaDataSave.getType())) {
            JSONObject obj = new JSONObject().fromObject(quotaDataSave.getConfigJson());
            esConfig= (EsConfig) JSONObject.toBean(obj,EsConfig.class);
        }else {
            JSONObject obj = JSONObject.fromObject(quotaDataSave.getConfigJson());
            esConfig = (EsConfig) JSONObject.toBean(obj, EsConfig.class);
        } else {
            // wait TO DO
        }
        //初始化es链接
@ -140,211 +140,163 @@ public class EsResultExtract {
        return esConfig;
    }
    public List<Map<String, Object>> queryResultPage(TjQuota tjQuota ,String filters,int pageNo,int pageSize) throws Exception {
        pageNo = (pageNo-1)*pageSize;
        initialize(tjQuota,filters);
        BoolQueryBuilder boolQueryBuilder =  QueryBuilders.boolQuery();
    public List<Map<String, Object>> queryResultPage(TjQuota tjQuota, String filters, int pageNo, int pageSize) throws Exception {
        pageNo = (pageNo - 1) * pageSize;
        initialize(tjQuota, filters);
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        getBoolQueryBuilder(boolQueryBuilder);
        TransportClient client = elasticSearchPool.getClient();
        List<Map<String, Object>> restltList = null;
        try {
            restltList =  elasticsearchUtil.queryPageList(client, esConfig.getIndex(), esConfig.getType(), boolQueryBuilder, pageNo, pageSize,"quotaDate");
        } catch (Exception e){
            restltList = elasticsearchUtil.queryPageList(client, esConfig.getIndex(), esConfig.getType(), boolQueryBuilder, pageNo, pageSize, "quotaDate");
        } catch (Exception e) {
            e.getMessage();
        }
        return restltList;
    }
    public int getQuotaTotalCount(TjQuota tjQuota,String filters) throws Exception {
        initialize(tjQuota,filters);
        BoolQueryBuilder boolQueryBuilder =  QueryBuilders.boolQuery();
    public int getQuotaTotalCount(TjQuota tjQuota, String filters) throws Exception {
        initialize(tjQuota, filters);
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        getBoolQueryBuilder(boolQueryBuilder);
        TransportClient  client = elasticSearchPool.getClient();
        int count  = 0;
        TransportClient client = elasticSearchPool.getClient();
        int count = 0;
        try {
            count  = (int)elasticsearchUtil.getTotalCount(client,esConfig.getIndex(),esConfig.getType(),boolQueryBuilder);
        }catch (Exception e){
            count = (int) elasticsearchUtil.getTotalCount(client, esConfig.getIndex(), esConfig.getType(), boolQueryBuilder);
        } catch (Exception e) {
            e.getMessage();
        }
        return count;
    }
    public List<Map<String, Object>> getQuotaReport(TjQuota tjQuota, String filters,int size) throws Exception {
        initialize(tjQuota,filters);
        BoolQueryBuilder boolQueryBuilder =  QueryBuilders.boolQuery();
    public List<Map<String, Object>> getQuotaReport(TjQuota tjQuota, String filters, int size) throws Exception {
        initialize(tjQuota, filters);
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        getBoolQueryBuilder(boolQueryBuilder);
        TransportClient  client = elasticSearchPool.getClient();
        TransportClient client = elasticSearchPool.getClient();
        List<Map<String, Object>> list = null;
        try {
           list = elasticsearchUtil.queryList(client,esConfig.getIndex(),esConfig.getType(),boolQueryBuilder, "quotaDate",size);
        }catch (Exception e){
            list = elasticsearchUtil.queryList(client, esConfig.getIndex(), esConfig.getType(), boolQueryBuilder, "quotaDate", size);
        } catch (Exception e) {
            e.getMessage();
        }
        return  list;
        return list;
    }
    public BoolQueryBuilder getBoolQueryBuilder(BoolQueryBuilder boolQueryBuilder){
    public BoolQueryBuilder getBoolQueryBuilder(BoolQueryBuilder boolQueryBuilder) {
        if( !StringUtils.isEmpty(result)){
            if( !result.equals("qb")){//查全部
        if (!StringUtils.isEmpty(result)) {
            if (!result.equals("qb")) {//查全部
                result = "1";
                RangeQueryBuilder rangeQueryResult = QueryBuilders.rangeQuery("result").gte(result);
                boolQueryBuilder.must(rangeQueryResult);
            }
        }
        if( !StringUtils.isEmpty(quotaCode)){
        if (!StringUtils.isEmpty(quotaCode)) {
//            TermQueryBuilder termQueryQuotaCode = QueryBuilders.termQuery("quotaCode", quotaCode);
            if(esConfig.getType().equals("orgHealthCategoryQuota")){
                QueryStringQueryBuilder termQuotaCode = QueryBuilders.queryStringQuery("orgHealthCategoryQuotaCode:" + quotaCode.replaceAll("_",""));
            if (esConfig.getType().equals("orgHealthCategoryQuota")) {
                QueryStringQueryBuilder termQuotaCode = QueryBuilders.queryStringQuery("orgHealthCategoryQuotaCode:" + quotaCode.replaceAll("_", ""));
                boolQueryBuilder.must(termQuotaCode);
            }else{
                QueryStringQueryBuilder termQuotaCode = QueryBuilders.queryStringQuery("quotaCode:" + quotaCode.replaceAll("_",""));
            } else {
                QueryStringQueryBuilder termQuotaCode = QueryBuilders.queryStringQuery("quotaCode:" + quotaCode.replaceAll("_", ""));
                boolQueryBuilder.must(termQuotaCode);
            }
        }
        BoolQueryBuilder qbChild =  QueryBuilders.boolQuery();
        BoolQueryBuilder qbChild = QueryBuilders.boolQuery();
        if( !StringUtils.isEmpty(orgName) ){
        if (!StringUtils.isEmpty(orgName)) {
//            TermQueryBuilder termQueryOrgName = QueryBuilders.termQuery("orgName", orgName);
            QueryStringQueryBuilder termOrgName = QueryBuilders.queryStringQuery("orgName:" + orgName);
            boolQueryBuilder.must(termOrgName);
        }
        if( !StringUtils.isEmpty(org) ){
            String [] orgvals =org.split(",");
            for(int i=0;i<orgvals.length ; i++){
        if (!StringUtils.isEmpty(org)) {
            String[] orgvals = org.split(",");
            for (int i = 0; i < orgvals.length; i++) {
                MatchQueryBuilder termOrg = QueryBuilders.matchPhraseQuery("org", orgvals[i]);
                qbChild.should(termOrg);
            }
            boolQueryBuilder.must(qbChild);
        }
        if( !StringUtils.isEmpty(slaveKey1) ){
        if (!StringUtils.isEmpty(slaveKey1)) {
            QueryStringQueryBuilder termSlaveKey1 = QueryBuilders.queryStringQuery("slaveKey1:" + slaveKey1);
            qbChild.should(termSlaveKey1);
            boolQueryBuilder.must(qbChild);
        }
        if( !StringUtils.isEmpty(slaveKey2) ){
        if (!StringUtils.isEmpty(slaveKey2)) {
            QueryStringQueryBuilder termSlaveKey2 = QueryBuilders.queryStringQuery("slaveKey2:" + slaveKey2);
            qbChild.should(termSlaveKey2);
            boolQueryBuilder.must(qbChild);
        }
        if( !StringUtils.isEmpty(province) ){
        if (!StringUtils.isEmpty(province)) {
            QueryStringQueryBuilder termProvince = QueryBuilders.queryStringQuery("province:" + province);
            boolQueryBuilder.must(termProvince);
        }
        if( !StringUtils.isEmpty(city) ){
        if (!StringUtils.isEmpty(city)) {
            QueryStringQueryBuilder termCity = QueryBuilders.queryStringQuery("city:" + city);
            boolQueryBuilder.must(termCity);
        }
        if( !StringUtils.isEmpty(town) ){
        if (!StringUtils.isEmpty(town)) {
            QueryStringQueryBuilder termTown = QueryBuilders.queryStringQuery("town:" + town);
            boolQueryBuilder.must(termTown);
        }
        if( !StringUtils.isEmpty(townName) ){
        if (!StringUtils.isEmpty(townName)) {
            QueryStringQueryBuilder termTown = QueryBuilders.queryStringQuery("townName:" + townName);
            boolQueryBuilder.must(termTown);
        }
        if( !StringUtils.isEmpty(year) ){
        if (!StringUtils.isEmpty(year)) {
            QueryStringQueryBuilder termYear = QueryBuilders.queryStringQuery("year:" + year);
            boolQueryBuilder.must(termYear);
        }
        if( !StringUtils.isEmpty(startTime) ){
        if (!StringUtils.isEmpty(startTime)) {
            RangeQueryBuilder rangeQueryStartTime = QueryBuilders.rangeQuery("quotaDate").gte(startTime);
            boolQueryBuilder.must(rangeQueryStartTime);
        }
        if( !StringUtils.isEmpty(endTime)){
        if (!StringUtils.isEmpty(endTime)) {
            RangeQueryBuilder rangeQueryEndTime = QueryBuilders.rangeQuery("quotaDate").lte(endTime);
            boolQueryBuilder.must(rangeQueryEndTime);
        }
        return boolQueryBuilder;
    }
    /**
     * 递归解析json
     *
     * @param gradeBucketIt
     * @param map
     * @param sb
     */
    private void expainJson(Iterator<Terms.Bucket> gradeBucketIt,Map<String,Integer>map, StringBuffer sb) {
        while (gradeBucketIt.hasNext()) {
            Terms.Bucket b =  gradeBucketIt.next();
            if (b.getAggregations().asList().get(0) instanceof StringTerms) {
                StringTerms stringTermsCh = (StringTerms) b.getAggregations().asList().get(0);
                Iterator<Terms.Bucket> gradeBucketItCh = stringTermsCh.getBuckets().iterator();
                while (gradeBucketItCh.hasNext()) {
                    StringBuffer sbTemp = new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + b.getKey());
                    expainJson(gradeBucketItCh, map, sbTemp);
                }
            }else if (b.getAggregations().asList().get(0) instanceof LongTerms) {
                LongTerms longTermsCh = (LongTerms) b.getAggregations().asList().get(0);
                Iterator<Terms.Bucket> gradeBucketItCh = longTermsCh.getBuckets().iterator();
                while (gradeBucketItCh.hasNext()) {
                    StringBuffer sbTemp = new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + b.getKey());
                    expainJson(gradeBucketItCh, map, sbTemp);
                }
            }else if (b.getAggregations().asList().get(0) instanceof DoubleTerms) {
                DoubleTerms doubleTermsCh = (DoubleTerms) b.getAggregations().asList().get(0);
                Iterator<Terms.Bucket> gradeBucketItCh = doubleTermsCh.getBuckets().iterator();
                while (gradeBucketItCh.hasNext()) {
                    StringBuffer sbTemp = new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + b.getKey());
                    expainJson(gradeBucketItCh, map, sbTemp);
                }
            }else {
                if (b.getAggregations().asList().get(0) instanceof InternalValueCount) {
                    InternalValueCount count = (InternalValueCount) b.getAggregations().asList().get(0);
                    map.put(new StringBuffer((sb == null ? "" : (sb.toString() + "-"))+ b.getKey()).toString() , (int)count.getValue());
                }else if (b.getAggregations().asList().get(0) instanceof InternalSum) {
                    InternalSum count = (InternalSum) b.getAggregations().asList().get(0);
                    map.put(new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + "-" + b.getKey()).toString() , (int)count.getValue());
                }
            }
        }
    }
    //指标分组统计数量 - 只支持一个字段
    public List<Map<String, Object>> searcherByGroup(TjQuota tjQuota, String filters,String aggsField ) throws Exception {
        initialize(tjQuota,filters);
        BoolQueryBuilder boolQueryBuilder =  QueryBuilders.boolQuery();
    public List<Map<String, Object>> searcherByGroup(TjQuota tjQuota, String filters, String aggsField) throws Exception {
        initialize(tjQuota, filters);
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        getBoolQueryBuilder(boolQueryBuilder);
        TransportClient client = elasticSearchPool.getClient();
        List<Map<String, Object>> list = null;
        try {
            list = elasticsearchUtil.searcherByGroup(client,esConfig.getIndex(),esConfig.getType(), boolQueryBuilder, aggsField, "result");
        } catch (Exception e){
            list = elasticsearchUtil.searcherByGroup(client, esConfig.getIndex(), esConfig.getType(), boolQueryBuilder, aggsField, "result");
        } catch (Exception e) {
            e.getMessage();
        }
        return  list;
        return list;
    }
    //根据mysql 指标分组求和 支持一个和多个字段
    public Map<String, Integer> searcherSumByGroupBySql(TjQuota tjQuota , String aggsFields ,String filter, String sumField,String orderFild,String order) throws Exception {
        initialize(tjQuota,null);
        if(StringUtils.isEmpty(filter)){
            filter =  " quotaCode='" + tjQuota.getCode().replaceAll("_", "") + "' ";
        }else {
            filter = filter + " and quotaCode='" + tjQuota.getCode().replaceAll("_","") + "' ";
    public Map<String, Integer> searcherSumByGroupBySql(TjQuota tjQuota, String aggsFields, String filter, String sumField, String orderFild, String order) throws Exception {
        initialize(tjQuota, null);
        if (StringUtils.isEmpty(filter)) {
            filter = " quotaCode='" + tjQuota.getCode().replaceAll("_", "") + "' ";
        } else {
            filter = filter + " and quotaCode='" + tjQuota.getCode().replaceAll("_", "") + "' ";
        }
        TransportClient client = elasticSearchPool.getClient();
        Map<String, Integer> map = null;
        try {
            map = elasticsearchUtil.searcherSumByGroupBySql(client, esConfig.getIndex(), aggsFields, filter, sumField,orderFild,order);;
        } catch (Exception e){
            map = elasticsearchUtil.searcherSumByGroupBySql(client, esConfig.getIndex(), aggsFields, filter, sumField, orderFild, order);
            ;
        } catch (Exception e) {
            e.getMessage();
        }
        return map;
    }
    /**
     * //根据mysql 指标分组 按时间聚合
     *
     * @param tjQuota
     * @param aggsFields
     * @param filter
@ -352,15 +304,15 @@ public class EsResultExtract {
     * @return
     * @throws Exception
     */
    public List<Map<String, Object>> searcherSumByGroupByTime(TjQuota tjQuota , String aggsFields ,String filter,String dateDime) throws Exception {
        initialize(tjQuota,null);
    public List<Map<String, Object>> searcherSumByGroupByTime(TjQuota tjQuota, String aggsFields, String filter, String dateDime) throws Exception {
        initialize(tjQuota, null);
        String quotaCode = " quotaCode='" + tjQuota.getCode().replaceAll("_", "") + "' ";
        if(StringUtils.isEmpty(filter)){
            filter =  quotaCode;
        }else {
        if (StringUtils.isEmpty(filter)) {
            filter = quotaCode;
        } else {
            filter += " and " + quotaCode;
        }
        if(StringUtils.isNotEmpty(aggsFields)){
        if (StringUtils.isNotEmpty(aggsFields)) {
            aggsFields += ",";
        }
        try {
@ -374,21 +326,21 @@ public class EsResultExtract {
                    .append(dateDime).append("')").append(" limit 10000 ");
            logger.warn("查询分组 mysql= " + mysql.toString());
            List<Map<String, Object>> listMap = elasticsearchUtil.excuteDataModel(mysql.toString());
            if(listMap != null &&  listMap.size() > 0){
                if(listMap.get(0).get("SUM(result)") != null){
                    return  listMap;
            if (listMap != null && listMap.size() > 0) {
                if (listMap.get(0).get("SUM(result)") != null) {
                    return listMap;
                }
            }
            return  new ArrayList<>();
        } catch (Exception e){
            return new ArrayList<>();
        } catch (Exception e) {
            e.getMessage();
        }
        return null;
    }
    /**
     * 根据sql  分组统计数据
     *
     * @param tjQuota
     * @param aggsFields
     * @param filter
@ -398,12 +350,12 @@ public class EsResultExtract {
     * @return
     * @throws Exception
     */
    public  List<Map<String, Object>>  searcherSumGroup(TjQuota tjQuota , String aggsFields ,String filter, String sumField,String orderFild,String order, String top) throws Exception {
        initialize(tjQuota,null);
    public List<Map<String, Object>> searcherSumGroup(TjQuota tjQuota, String aggsFields, String filter, String sumField, String orderFild, String order, String top) throws Exception {
        initialize(tjQuota, null);
        String quotaCode = " quotaCode='" + tjQuota.getCode().replaceAll("_", "") + "' ";
        if(StringUtils.isEmpty(filter)){
            filter =  quotaCode;
        }else {
        if (StringUtils.isEmpty(filter)) {
            filter = quotaCode;
        } else {
            filter += " and " + quotaCode;
        }
        try {
@ -413,7 +365,7 @@ public class EsResultExtract {
                    .append(" from ").append(esConfig.getIndex())
                    .append(" where quotaDate is not null and ").append(filter)
                    .append(" group by ").append(aggsFields);
            if(StringUtils.isNotEmpty(orderFild) && StringUtils.isNotEmpty(order)){
            if (StringUtils.isNotEmpty(orderFild) && StringUtils.isNotEmpty(order)) {
                if (StringUtils.isNotEmpty(top)) {
                    mysql.append(" order by sum(").append(sumField).append(") desc");
                } else {
@ -427,18 +379,60 @@ public class EsResultExtract {
            }
            logger.warn("查询分组 mysql= " + mysql.toString());
            List<Map<String, Object>> listMap = elasticsearchUtil.excuteDataModel(mysql.toString());
            if(listMap != null &&  listMap.size() > 0){
                if(listMap.get(0).get("SUM(result)") != null){
                    return  listMap;
            if (listMap != null && listMap.size() > 0) {
                if (listMap.get(0).get("SUM(result)") != null) {
                    return listMap;
                }
            }
            return  new ArrayList<>();
        }catch (Exception e){
            return new ArrayList<>();
        } catch (Exception e) {
            e.getMessage();
        }
        return null;
    }
    /**
     * 递归解析json
     *
     * @param gradeBucketIt
     * @param map
     * @param sb
     */
    private void expainJson(Iterator<Terms.Bucket> gradeBucketIt, Map<String, Integer> map, StringBuffer sb) {
        while (gradeBucketIt.hasNext()) {
            Terms.Bucket b = gradeBucketIt.next();
            if (b.getAggregations().asList().get(0) instanceof StringTerms) {
                StringTerms stringTermsCh = (StringTerms) b.getAggregations().asList().get(0);
                Iterator<Terms.Bucket> gradeBucketItCh = stringTermsCh.getBuckets().iterator();
                while (gradeBucketItCh.hasNext()) {
                    StringBuffer sbTemp = new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + b.getKey());
                    expainJson(gradeBucketItCh, map, sbTemp);
                }
            } else if (b.getAggregations().asList().get(0) instanceof LongTerms) {
                LongTerms longTermsCh = (LongTerms) b.getAggregations().asList().get(0);
                Iterator<Terms.Bucket> gradeBucketItCh = longTermsCh.getBuckets().iterator();
                while (gradeBucketItCh.hasNext()) {
                    StringBuffer sbTemp = new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + b.getKey());
                    expainJson(gradeBucketItCh, map, sbTemp);
                }
            } else if (b.getAggregations().asList().get(0) instanceof DoubleTerms) {
                DoubleTerms doubleTermsCh = (DoubleTerms) b.getAggregations().asList().get(0);
                Iterator<Terms.Bucket> gradeBucketItCh = doubleTermsCh.getBuckets().iterator();
                while (gradeBucketItCh.hasNext()) {
                    StringBuffer sbTemp = new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + b.getKey());
                    expainJson(gradeBucketItCh, map, sbTemp);
                }
            } else {
                if (b.getAggregations().asList().get(0) instanceof InternalValueCount) {
                    InternalValueCount count = (InternalValueCount) b.getAggregations().asList().get(0);
                    map.put(new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + b.getKey()).toString(), (int) count.getValue());
                } else if (b.getAggregations().asList().get(0) instanceof InternalSum) {
                    InternalSum count = (InternalSum) b.getAggregations().asList().get(0);
                    map.put(new StringBuffer((sb == null ? "" : (sb.toString() + "-")) + "-" + b.getKey()).toString(), (int) count.getValue());
                }
            }
        }
    }
}

+ 3 - 6
src/main/java/com/yihu/quota/etl/extract/mysql/MysqlExtract.java

@ -1,16 +1,12 @@
package com.yihu.quota.etl.extract.mysql;
import com.yihu.ehr.query.services.SolrQuery;
import com.yihu.ehr.solr.SolrUtil;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.etl.ExtractConverUtil;
import com.yihu.quota.etl.conver.ConvertHelper;
import com.yihu.quota.etl.extract.ExtractUtil;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.util.SpringUtil;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.vo.FilterModel;
import com.yihu.quota.vo.QuotaVo;
import com.yihu.quota.vo.SaveModel;
@ -28,6 +24,7 @@ import java.util.*;
/**
 * Created by janseny on 2017/7/10.
 */
@Deprecated
@Component
@Scope("prototype")
public class MysqlExtract {

+ 18 - 17
src/main/java/com/yihu/quota/etl/extract/solr/SolrExtract.java

@ -5,14 +5,14 @@ import com.yihu.ehr.elasticsearch.ElasticSearchUtil;
import com.yihu.ehr.query.common.model.SolrGroupEntity;
import com.yihu.ehr.query.services.SolrQuery;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.quota.dao.jpa.save.TjQuotaDataSaveDao;
import com.yihu.quota.dao.save.TjQuotaDataSaveDao;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.etl.ExtractConverUtil;
import com.yihu.quota.etl.extract.ExtractUtil;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.jpa.save.TjQuotaDataSave;
import com.yihu.quota.model.dimension.TjQuotaDimensionMain;
import com.yihu.quota.model.dimension.TjQuotaDimensionSlave;
import com.yihu.quota.model.save.TjQuotaDataSave;
import com.yihu.quota.vo.FilterModel;
import com.yihu.quota.vo.QuotaVo;
import com.yihu.quota.vo.SaveModel;
@ -33,6 +33,7 @@ import java.util.*;
 * <p>
 * Created by janseny on 2017/7/10.
 */
@Deprecated
@Component
@Scope("prototype")
public class SolrExtract {
@ -93,7 +94,7 @@ public class SolrExtract {
                q = timeKey + ":[* TO *]";
            }
        }
        long rows = solrQuery.count(core, q ,esConfig.getFilter());
        long rows = solrQuery.count(core, q, esConfig.getFilter());
        return Integer.valueOf(String.valueOf(rows));
    }
@ -122,19 +123,19 @@ public class SolrExtract {
            mainMap.put(key, key);
            dimensionGroupList.add(new SolrGroupEntity(key, SolrGroupEntity.GroupType.FIELD_VALUE));
            fl += key + ",";
            if(qdm.get(i).getMainCode().equals("org")){
                String orgFilter = " AND org_code:*" ;
                if ( !StringUtils.isEmpty(fq)) {
                    fq += orgFilter ;
                }else {
            if (qdm.get(i).getMainCode().equals("org")) {
                String orgFilter = " AND org_code:*";
                if (!StringUtils.isEmpty(fq)) {
                    fq += orgFilter;
                } else {
                    fq = orgFilter;
                }
            }
            if(qdm.get(i).getMainCode().equals("town")){
                String townFilter = " AND org_area:*" ;
                if ( !StringUtils.isEmpty(fq)) {
                    fq += townFilter ;
                }else {
            if (qdm.get(i).getMainCode().equals("town")) {
                String townFilter = " AND org_area:*";
                if (!StringUtils.isEmpty(fq)) {
                    fq += townFilter;
                } else {
                    fq = townFilter;
                }
            }
@ -147,7 +148,7 @@ public class SolrExtract {
        }
        fl += timeKey + ",rowkey";
        if (StringUtils.isEmpty(esConfig.getAggregation()) || (!esConfig.getAggregation().equals(Contant.quota.aggregation_list)  && !esConfig.getAggregation().equals(Contant.quota.aggregation_distinct))) {
        if (StringUtils.isEmpty(esConfig.getAggregation()) || (!esConfig.getAggregation().equals(Contant.quota.aggregation_list) && !esConfig.getAggregation().equals(Contant.quota.aggregation_distinct))) {
            // 默认追加一个日期字段作为细维度,方便按天统计作为最小单位统计值。
            slaveMap.put(timeKey, timeKey);
            TjQuotaDimensionSlave daySlave = new TjQuotaDimensionSlave();
@ -183,7 +184,7 @@ public class SolrExtract {
                if (esConfig.getAggregation().equals(Contant.quota.aggregation_list) && !StringUtils.isEmpty(esConfig.getAggregationKey())) {
                    fl = fl + "," + esConfig.getAggregationKey();
                }
                logger.warn("solr 从"+ quotaVo.getStart() + " 开始获取数据,这次准备获取" + quotaVo.getRows() + "条");
                logger.warn("solr 从" + quotaVo.getStart() + " 开始获取数据,这次准备获取" + quotaVo.getRows() + "条");
                list = solrQuery.queryReturnFieldList(core, q, fq, null, quotaVo.getStart(), quotaVo.getRows(), fl.split(","));
            } catch (Exception e) {
                throw new Exception("solr 查询异常 " + e.getMessage());

+ 44 - 0
src/main/java/com/yihu/quota/etl/formula/AgeGroup.java

@ -0,0 +1,44 @@
package com.yihu.quota.etl.formula;
/**
 * @author l4qiang
 */
public class AgeGroup implements Functioner {
    public static final String level_age_1_name = "0~6";
    public static final String level_age_2_name = "7~17";
    public static final String level_age_3_name = "18~40";
    public static final String level_age_4_name = "41~65";
    public static final String level_age_5_name = ">65";
    public static final String level_age_6_name = "其他";
    private static final String level_age_1 = "1";
    private static final String level_age_2 = "2";
    private static final String level_age_3 = "3";
    private static final String level_age_4 = "4";
    private static final String level_age_5 = "5";
    private static final String level_age_6 = "6";
    private static final int AGE_6 = 6;
    private static final int AGE_17 = 17;
    private static final int AGE_40 = 40;
    private static final int AGE_65 = 65;
    @Override
    public String execute(Object... args) {
        if (args.length == 0) {
            return level_age_6;
        }
        int age = (int) args[0];
        if (age <= AGE_6) {
            return level_age_1;
        } else if (age <= AGE_17) {
            return level_age_2;
        } else if (age <= AGE_40) {
            return level_age_3;
        } else if (age < AGE_65) {
            return level_age_4;
        } else {
            return level_age_5;
        }
    }
}

+ 29 - 0
src/main/java/com/yihu/quota/etl/formula/DateFunc.java

@ -0,0 +1,29 @@
package com.yihu.quota.etl.formula;
import java.util.Calendar;
import java.util.Date;
public class DateFunc implements Functioner {
    /**
     * @param args args[0] date
     *             args[1] span 1-YEAR, 2-MONTH, 5-DAY_OF_MONTH
     * @return
     */
    @Override
    public Integer execute(Object... args) {
        if (args.length < 2) {
            return 0;
        }
        Date date = (Date) args[0];
        Integer span = (Integer) args[0];
        if (span != Calendar.YEAR && span != Calendar.MONTH && span != Calendar.DAY_OF_MONTH){
            return 0;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.YEAR);
    }
}

+ 25 - 0
src/main/java/com/yihu/quota/etl/formula/Days.java

@ -0,0 +1,25 @@
package com.yihu.quota.etl.formula;
import java.time.Duration;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
/**
 * @author l4qiang
 */
public class Days implements Functioner {
    @Override
    public Long execute(Object... args) {
        if (args.length < 2) {
            return 0L;
        }
        Date start = (Date) args[0];
        LocalDate startLocalDate = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        Date end = (Date) args[1];
        LocalDate endLocalDate = end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        Duration duration = Duration.between(endLocalDate, startLocalDate);
        return Math.abs(duration.toDays());
    }
}

+ 35 - 0
src/main/java/com/yihu/quota/etl/formula/Division.java

@ -0,0 +1,35 @@
package com.yihu.quota.etl.formula;
import com.yihu.quota.feign.RsDictClient;
import com.yihu.quota.util.SpringUtil;
/**
 * @author l4qiang
 */
public class Division implements Functioner {
    /**
     * @param args args[0] orgCode
     *             args[1] level 1-区县,2-市,3-省,4-国家
     * @return
     */
    @Override
    public String execute(Object... args) {
        if (args.length < 2) {
            return "";
        }
        String orgCode = (String) args[0];
        int level = Integer.parseInt((String) args[1]);
        if (level == 0) {
            return "";
        }
        RsDictClient rsDictClient = SpringUtil.getBean(RsDictClient.class);
        String divisionCode = orgCode;
        for (int i = 0; i < level; ++i) {
            divisionCode = rsDictClient.getCacheValue("STD_DIVISION_ASSOCIATION", divisionCode);
        }
        return divisionCode;
    }
}

+ 8 - 0
src/main/java/com/yihu/quota/etl/formula/Functioner.java

@ -0,0 +1,8 @@
package com.yihu.quota.etl.formula;
/**
 * @author l4qiang
 */
public interface Functioner {
    Object execute(Object... args);
}

+ 4 - 3
src/main/java/com/yihu/quota/etl/model/DbConfig.java

@ -1,6 +1,7 @@
package com.yihu.quota.etl.model;
import com.yihu.quota.etl.Contant;
/**
 * Created by chenweida on 2017/6/1.
 */
@ -80,11 +81,11 @@ public class DbConfig {
    }
    public String getDbType() {
        if(driver.contains(Contant.db_type.mysql)){
        if (driver.contains(Contant.db_type.mysql)) {
            return Contant.db_type.mysql;
        }
        if(driver.contains( Contant.db_type.oracle)){
            return  Contant.db_type.oracle;
        if (driver.contains(Contant.db_type.oracle)) {
            return Contant.db_type.oracle;
        }
        return null;
    }

+ 0 - 1
src/main/java/com/yihu/quota/etl/model/EsConfig.java

@ -45,7 +45,6 @@ public class EsConfig {
    private String incrementFlag;   // 环比  1 上月  2 本月
    //已停止使用
    private String thousandFlag; //每千,每万 1000,10000
    private String thousandDmolecular; //每千,每万 统计分子

+ 15 - 21
src/main/java/com/yihu/quota/etl/save/ExtractDataWithRunnable.java

@ -1,24 +1,19 @@
package com.yihu.quota.etl.save;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.hbase.HBaseDao;
import com.yihu.ehr.redis.client.RedisClient;
import com.yihu.ehr.solr.SolrUtil;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.job.EsQuotaJob;
import com.yihu.quota.model.jpa.TjQuotaLog;
import com.yihu.quota.service.job.EsQuotaJob;
import com.yihu.quota.model.TjQuotaLog;
import com.yihu.quota.util.SpringUtil;
import com.yihu.quota.vo.QuotaVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
/**
 * Created by janseny on 2018/5/23.
 */
public class ExtractDataWithRunnable implements Runnable {
    private final int count = 0;
    private Logger logger = LoggerFactory.getLogger(ExtractDataWithRunnable.class);
    private String saasid;
    private String timeLevel;
@ -26,12 +21,11 @@ public class ExtractDataWithRunnable implements Runnable {
    private String endTime;
    private QuotaVo quotaVo;
    private TjQuotaLog tjQuotaLog;
    private int start ;
    private int perCount ;
    private final int count = 0;
    private int start;
    private int perCount;
    public ExtractDataWithRunnable(TjQuotaLog tjQuotaLog ,QuotaVo quotaVo, String startTime,String endTime,
                                   String timeLevel,String saasid,int start,int perCount ){
    public ExtractDataWithRunnable(TjQuotaLog tjQuotaLog, QuotaVo quotaVo, String startTime, String endTime,
                                   String timeLevel, String saasid, int start, int perCount) {
        this.tjQuotaLog = tjQuotaLog;
        this.quotaVo = quotaVo;
        this.quotaVo.setStart(start);
@ -43,19 +37,19 @@ public class ExtractDataWithRunnable implements Runnable {
    }
    @Override
    public void run(){
    public void run() {
        try {
            synchronized(this){
                if (count != 0){
                    quotaVo.setStart(count*perCount+1);
                }else {
            synchronized (this) {
                if (count != 0) {
                    quotaVo.setStart(count * perCount + 1);
                } else {
                    quotaVo.setStart(0);
                }
                quotaVo.setRows(Contant.compute.perCount);
                System.out.println("start = " + start );
                SpringUtil.getBean(EsQuotaJob.class).quota(tjQuotaLog,quotaVo);
                System.out.println("start = " + start);
                SpringUtil.getBean(EsQuotaJob.class).quota(tjQuotaLog, quotaVo);
            }
        }catch (Exception e){
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

+ 22 - 23
src/main/java/com/yihu/quota/etl/save/LargDataWithRunnable.java

@ -1,7 +1,7 @@
package com.yihu.quota.etl.save;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.etl.util.EsClientUtil;
import com.yihu.quota.util.ElasticsearchUtil;
import com.yihu.quota.vo.SaveModel;
import io.searchbox.client.JestClient;
import io.searchbox.core.Bulk;
@ -10,7 +10,6 @@ import io.searchbox.core.Index;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
import java.util.List;
@ -18,10 +17,10 @@ import java.util.List;
/**
 * Created by janseny on 2018/5/23.
 */
public class LargDataWithRunnable implements Runnable {
public class LargeDataWithRunnable implements Runnable {
    private Logger logger = LoggerFactory.getLogger(LargDataWithRunnable.class);
    private EsClientUtil esClientUtil;
    private Logger logger = LoggerFactory.getLogger(LargeDataWithRunnable.class);
    private ElasticsearchUtil esClientUtil;
    private String jsonConfig;
    private List<SaveModel> list;//待处理数据
    private int threadCount = 0;//初始化线程数
@ -30,12 +29,12 @@ public class LargDataWithRunnable implements Runnable {
    private int totalCount = 0;//待处理数据总数量
    private int havedCount = 0;//已经处理的数据量
    public LargDataWithRunnable(List<SaveModel> saveModels, String jsonConfig , EsClientUtil esClientUtil){
    public LargeDataWithRunnable(List<SaveModel> saveModels, String jsonConfig, ElasticsearchUtil esClientUtil) {
        this.list = saveModels;
        int count  = saveModels.size()/perCount;
        int remainder = saveModels.size()%perCount;
        if(remainder != 0){
            count ++;
        int count = saveModels.size() / perCount;
        int remainder = saveModels.size() % perCount;
        if (remainder != 0) {
            count++;
        }
        this.threadCount = count;
        this.totalCount = list.size();
@ -46,26 +45,26 @@ public class LargDataWithRunnable implements Runnable {
    @Override
    public void run() {
        List<SaveModel> sublist = null;
        while(totalCount - havedCount > 0){//线程会循环执行,直到所有数据都处理完
            synchronized(this){//在分包时需要线程同步,避免线程间处理重复的数据
                if(totalCount-havedCount != 0) {
                    sublist = list.subList(perCount*(flag-1), totalCount - havedCount > perCount ? perCount*flag : perCount*(flag-1) + (totalCount - havedCount));
                    flag = flag+1;
        while (totalCount - havedCount > 0) {//线程会循环执行,直到所有数据都处理完
            synchronized (this) {//在分包时需要线程同步,避免线程间处理重复的数据
                if (totalCount - havedCount != 0) {
                    sublist = list.subList(perCount * (flag - 1), totalCount - havedCount > perCount ? perCount * flag : perCount * (flag - 1) + (totalCount - havedCount));
                    flag = flag + 1;
                    havedCount = sublist.size() + havedCount;
                    logger.debug("这是第" + (flag-1) +"个线程;数据 = "+ sublist.size());
                    System.out.println(Thread.currentThread().getName()+"这是第" + (flag-1) +"个线程;数据 = "+ sublist.size());
                    logger.debug("这是第" + (flag - 1) + "个线程;数据 = " + sublist.size());
                    System.out.println(Thread.currentThread().getName() + "这是第" + (flag - 1) + "个线程;数据 = " + sublist.size());
                }
                if(sublist != null) {
                if (sublist != null) {
                    //此处为数据处理(简单打印 )
                    BulkResult br = null;
                    boolean isSuccessed = false;
                    try {
                        //得到链接
                        EsConfig esConfig = (EsConfig) JSONObject.toBean(JSONObject.fromObject(jsonConfig), EsConfig.class);
                        JestClient jestClient = esClientUtil.getJestClient(esConfig.getHost(),esConfig.getPort());
                        JestClient jestClient = esClientUtil.getJestClient(esConfig.getHost(), esConfig.getPort());
                        Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esConfig.getIndex()).defaultType(esConfig.getType());
                        for (SaveModel obj : sublist) {
                            obj.setCreateTime( new Date());
                            obj.setCreateTime(new Date());
                            Index index = new Index.Builder(obj).build();
                            bulk.addAction(index);
                        }
@ -73,7 +72,7 @@ public class LargDataWithRunnable implements Runnable {
                        //关闭链接
                        jestClient.shutdownClient();
                        isSuccessed = br.isSucceeded();
                    }catch (Exception e){
                    } catch (Exception e) {
                        throw new RuntimeException("ES 保存数据异常");
                    }
                }
@ -139,11 +138,11 @@ public class LargDataWithRunnable implements Runnable {
        this.jsonConfig = jsonConfig;
    }
    public EsClientUtil getEsClientUtil() {
    public ElasticsearchUtil getEsClientUtil() {
        return esClientUtil;
    }
    public void setEsClientUtil(EsClientUtil esClientUtil) {
    public void setEsClientUtil(ElasticsearchUtil esClientUtil) {
        this.esClientUtil = esClientUtil;
    }
}

+ 6 - 5
src/main/java/com/yihu/quota/etl/save/SaveHelper.java

@ -2,7 +2,7 @@ package com.yihu.quota.etl.save;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.etl.save.es.ElastricSearchSave;
import com.yihu.quota.model.jpa.save.TjQuotaDataSave;
import com.yihu.quota.model.save.TjQuotaDataSave;
import com.yihu.quota.service.save.TjDataSaveService;
import com.yihu.quota.util.SpringUtil;
import com.yihu.quota.vo.QuotaVo;
@ -20,19 +20,20 @@ import java.util.List;
@Scope("prototype")
public class SaveHelper {
    @Autowired
    private TjDataSaveService datsSaveService;
    private TjDataSaveService dataSaveService;
    public Boolean save(List<SaveModel> dataModels, QuotaVo quotaVo) {
        //查看指标保存的数据源
        TjQuotaDataSave quotaDataSave = datsSaveService.findByQuota(quotaVo.getCode());
        TjQuotaDataSave quotaDataSave = dataSaveService.findByQuota(quotaVo.getCode());
        switch (quotaDataSave.getType()) {
            case Contant.save.mysql: {
                return null;
            }
            case Contant.save.es: {
                return SpringUtil.getBean(ElastricSearchSave.class).save(dataModels,quotaDataSave.getConfigJson());
//                return SpringUtil.getBean(ElastricSearchSave.class).saveByMoreThred(dataModels,quotaDataSave.getConfigJson());
                return SpringUtil.getBean(ElastricSearchSave.class).save(dataModels, quotaDataSave.getConfigJson());
            }
            default:
                break;
        }
        return false;
    }

+ 38 - 37
src/main/java/com/yihu/quota/etl/save/es/ElastricSearchSave.java

@ -2,14 +2,14 @@ package com.yihu.quota.etl.save.es;
import com.yihu.quota.etl.Contant;
import com.yihu.quota.etl.model.EsConfig;
import com.yihu.quota.etl.save.LargDataWithRunnable;
import com.yihu.quota.etl.util.EsClientUtil;
import com.yihu.quota.etl.save.LargeDataWithRunnable;
import com.yihu.quota.util.ElasticsearchUtil;
import com.yihu.quota.vo.SaveModel;
import io.searchbox.client.JestClient;
import io.searchbox.core.Bulk;
import io.searchbox.core.BulkResult;
import io.searchbox.core.Index;
import net.sf.json.JSONObject;;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -19,6 +19,8 @@ import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
;
/**
 * Created by chenweida on 2017/6/2.
 */
@ -28,7 +30,7 @@ public class ElastricSearchSave {
    private Logger logger = LoggerFactory.getLogger(ElastricSearchSave.class);
    @Autowired
    private EsClientUtil esClientUtil;
    private ElasticsearchUtil esClientUtil;
    private EsConfig esConfig;
@ -36,37 +38,37 @@ public class ElastricSearchSave {
        boolean isSuccessed = true;
        try {
            int perCount = Contant.compute.perCount;
            if(saveModels.size() > perCount){
                int count  = saveModels.size()/perCount;
                int remainder = saveModels.size()%perCount;
                if(remainder != 0){
                    count ++;
            if (saveModels.size() > perCount) {
                int count = saveModels.size() / perCount;
                int remainder = saveModels.size() % perCount;
                if (remainder != 0) {
                    count++;
                }
                for(int i=0; i< count; i++){
                for (int i = 0; i < count; i++) {
                    int totalCount = saveModels.size();
                    int start = 0;
                    int end = perCount - 1;
                    if( i!=0 ){
                    if (i != 0) {
                        start = i * perCount;
                        if((i + 1) * perCount >= totalCount){
                            end = totalCount-1;
                        }else {
                            end = (i + 1) * perCount-1;
                        if ((i + 1) * perCount >= totalCount) {
                            end = totalCount - 1;
                        } else {
                            end = (i + 1) * perCount - 1;
                        }
                    }
                    logger.info("data save 这是第" + (i+1) + "个线程;数据 = " + start+ " - " + end);
                    logger.info("data save 这是第" + (i + 1) + "个线程;数据 = " + start + " - " + end);
                    List<SaveModel> list = saveModels.subList(start, end);
                    LargDataWithRunnable dataWithRunnable = new LargDataWithRunnable(list,jsonConfig,esClientUtil);
                    LargeDataWithRunnable dataWithRunnable = new LargeDataWithRunnable(list, jsonConfig, esClientUtil);
                    Thread thread = new Thread(dataWithRunnable);
                    thread.start();
                }
            }else {
                save(saveModels,jsonConfig);
            } else {
                save(saveModels, jsonConfig);
            }
        } catch (Exception e) {
            throw new RuntimeException("ES 保存数据异常");
        }
        return  isSuccessed;
        return isSuccessed;
    }
    public Boolean save(List<SaveModel> smss, String jsonConfig) {
@ -76,24 +78,24 @@ public class ElastricSearchSave {
            int perCount = Contant.compute.perCount;
            //初始化参数
            esConfig = (EsConfig) JSONObject.toBean(JSONObject.fromObject(jsonConfig), EsConfig.class);
            if(smss.size() > perCount){
                int count  = smss.size()/perCount;
                int remainder = smss.size()%perCount;
                if(remainder != 0){
                    count ++;
            if (smss.size() > perCount) {
                int count = smss.size() / perCount;
                int remainder = smss.size() % perCount;
                if (remainder != 0) {
                    count++;
                }
                for(int i = 1;i<= count ;i++){
                for (int i = 1; i <= count; i++) {
                    List<SaveModel> newList = null;
                    if(i == count){
                        newList = smss.subList(perCount*(i-1),smss.size() -1);
                    }else {
                        newList = smss.subList(perCount*(i-1),perCount*i);
                    if (i == count) {
                        newList = smss.subList(perCount * (i - 1), smss.size() - 1);
                    } else {
                        newList = smss.subList(perCount * (i - 1), perCount * i);
                    }
                    //得到链接
                    JestClient jestClient = esClientUtil.getJestClient(esConfig.getHost(),esConfig.getPort());
                    JestClient jestClient = esClientUtil.getJestClient(esConfig.getHost(), esConfig.getPort());
                    Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esConfig.getIndex()).defaultType(esConfig.getType());
                    for (SaveModel obj : newList) {
                        obj.setCreateTime( new Date());
                        obj.setCreateTime(new Date());
                        Index index = new Index.Builder(obj).build();
                        bulk.addAction(index);
                    }
@ -102,12 +104,12 @@ public class ElastricSearchSave {
                    jestClient.shutdownClient();
                    isSuccessed = br.isSucceeded();
                }
            }else{
            } else {
                //得到链接
                JestClient jestClient = esClientUtil.getJestClient(esConfig.getHost(),esConfig.getPort());
                JestClient jestClient = esClientUtil.getJestClient(esConfig.getHost(), esConfig.getPort());
                Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esConfig.getIndex()).defaultType(esConfig.getType());
                for (SaveModel obj : smss) {
                    obj.setCreateTime( new Date());
                    obj.setCreateTime(new Date());
                    Index index = new Index.Builder(obj).build();
                    bulk.addAction(index);
                }
@ -118,10 +120,9 @@ public class ElastricSearchSave {
            }
            return isSuccessed;
        } catch (Exception e) {
            throw new RuntimeException("ES 保存数据异常"+ e.getMessage());
            throw new RuntimeException("ES 保存数据异常" + e.getMessage());
        }
    }
}

+ 0 - 67
src/main/java/com/yihu/quota/etl/util/EsClientUtil.java

@ -1,67 +0,0 @@
package com.yihu.quota.etl.util;
import com.yihu.quota.etl.extract.es.EsExtract;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.config.HttpClientConfig;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by janseny on 2017/8/1
 */
@Component
public class EsClientUtil {
    private Logger logger = LoggerFactory.getLogger(EsExtract.class);
    /**
     * @param host "localhost"
     * @param port 9200
     * @return
     */
    public JestClient getJestClient(String host, Integer port) {
        String hostAddress="http://"+host+":"+port;
        JestClientFactory factory = new JestClientFactory();
        factory.setHttpClientConfig(new HttpClientConfig
                .Builder(hostAddress)
                .multiThreaded(true)
                //.discoveryEnabled(true)
                .readTimeout(60000)//30秒 -60s
                .build());
        return factory.getObject();
    }
    public Client getClient(String host, Integer port,String clusterName) {
        try {
            Settings settings = Settings.settingsBuilder()
                    .put("cluster.name", StringUtils.isEmpty(clusterName)?"elasticsearch":clusterName)
                    .put("client.transport.sniff", false)
                    .build();
            Client client = TransportClient.builder().settings(settings).build()
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
            return client;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

+ 33 - 0
src/main/java/com/yihu/quota/feign/RedisClient.java

@ -0,0 +1,33 @@
package com.yihu.quota.feign;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.quota.contants.MicroServiceApi;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import springfox.documentation.annotations.ApiIgnore;
/**
 * @author l4qiang
 */
@FeignClient(name = MicroServiceApi.Service.REDIS)
@RequestMapping(value = ApiVersion.Version1_0)
@ApiIgnore
public interface RedisClient {
    @ApiOperation("通过机构编码获取机构名称")
    @RequestMapping(value = MicroServiceApi.Redis.ORG_NAME, method = RequestMethod.GET)
    String getOrgName(
            @ApiParam(value = "key", required = true)
            @RequestParam(value = "key") String key);
    @ApiOperation("通过机构编码获取机构区域")
    @RequestMapping(value = MicroServiceApi.Redis.ORG_AREA, method = RequestMethod.GET)
    String getOrgArea(
            @ApiParam(value = "key", required = true)
            @RequestParam(value = "key") String key);
}

+ 30 - 0
src/main/java/com/yihu/quota/feign/RsDictClient.java

@ -0,0 +1,30 @@
package com.yihu.quota.feign;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.quota.contants.MicroServiceApi;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import springfox.documentation.annotations.ApiIgnore;
/**
 * @author l4qiang
 */
@FeignClient(name = MicroServiceApi.Service.RESOURCE)
@RequestMapping(value = ApiVersion.Version1_0)
@ApiIgnore
public interface RsDictClient {
    @RequestMapping(value = MicroServiceApi.Resource.DICT_ENTRY, method = RequestMethod.GET)
    @ApiOperation(value = "根据code从缓存获取字典项值")
    String getCacheValue(
            @ApiParam(name = "dict") @RequestParam(value = "dict") String dict,
            @ApiParam(name = "code") @RequestParam(value = "code") String code);
    @RequestMapping(value = MicroServiceApi.Resource.DICT_ENTRY, method = RequestMethod.DELETE)
    @ApiOperation(value = "清空缓存字典项")
    void deleteCacheValue(
            @ApiParam(name = "dict") @RequestParam(value = "dict") String dict);
}

+ 18 - 0
src/main/java/com/yihu/quota/kafka/ConsumerListener.java

@ -0,0 +1,18 @@
package com.yihu.quota.kafka;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
/**
 * Created by janseny on 2018/9/13.
 * kafka消费监听
 */
public class ConsumerListener {
    @KafkaListener(topics = "test")
    public void loadData(ConsumerRecord<?, ?> record) {
        System.out.println("-- " + record.key() + " - " + record.value());
    }
}

+ 87 - 0
src/main/java/com/yihu/quota/kafka/KafkaConsumerConfig.java

@ -0,0 +1,87 @@
package com.yihu.quota.kafka;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.*;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by janseny on 2018/9/13.
 */
@Configuration
@EnableKafka
public class KafkaConsumerConfig {
    @Value("${kafka.broker.address}")
    private String kafkaBrokerAddress;
    private static String GROUP_ID = "test";
    /* --------------producer configuration-----------------**/
    @Bean
    public Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBrokerAddress);
        props.put(ProducerConfig.RETRIES_CONFIG, 0);
        props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);
        props.put(ProducerConfig.LINGER_MS_CONFIG, 1);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return props;
    }
    @Bean
    public ProducerFactory<String, String> producerFactory() {
        return new DefaultKafkaProducerFactory<>(producerConfigs());
    }
    /* --------------consumer configuration-----------------**/
    @Bean
    public Map<String, Object> consumerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBrokerAddress);
        props.put(ConsumerConfig.GROUP_ID_CONFIG, GROUP_ID);
        props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);
        props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, 100);
        props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "15000");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        return props;
    }
    @Bean
    ConcurrentKafkaListenerContainerFactory<String, String>
    kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory =
                new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());
        return factory;
    }
    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        return new DefaultKafkaConsumerFactory<>(consumerConfigs());
    }
    /* --------------kafka template configuration-----------------**/
    @Bean
    public KafkaTemplate<String,String> kafkaTemplate() {
        KafkaTemplate<String, String> kafkaTemplate = new KafkaTemplate<>(producerFactory());
        return kafkaTemplate;
    }
    @Bean//消息监听器
    public ConsumerListener consumerListener() {
        return new ConsumerListener();
    }
}

+ 2 - 2
src/main/java/com/yihu/quota/model/jpa/RsResourceQuota.java

@ -1,4 +1,4 @@
package com.yihu.quota.model.jpa;
package com.yihu.quota.model;
import javax.persistence.*;
import java.util.List;
@ -8,7 +8,7 @@ import java.util.Map;
 * Created by Administrator on 2017/12/19.
 */
@Entity
@Table(name="rs_resource_quota")
@Table(name = "rs_resource_quota")
public class RsResourceQuota {
    private int id;
    private String resourceId;

+ 236 - 0
src/main/java/com/yihu/quota/model/TjQuota.java

@ -0,0 +1,236 @@
package com.yihu.quota.model;// default package
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.*;
import java.util.Date;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjQuota entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_quota")
public class TjQuota implements java.io.Serializable {
    // Fields
    private Integer id;
    private String code;
    private String name;
    private String cron;//quartz时间表达式
    private String execType;
    private String jobClazz; //类class
    private String dataLevel;//1 全量  2增量
    private Date createTime;
    private String createUser;
    private String createUserName;
    private Date updateTime;
    private String updateUser;
    private String updateUserName;
    private String status;//1: 正常 0:不可用  -1删除
    private String remark;
    private String resultGetType; // 指标结果获取方式 1:直接库中获取,2:二次统计获取。
    //周期指标执行状态:0未开启,1执行中
    private String jobStatus;
    // Constructors
    /**
     * default constructor
     */
    public TjQuota() {
    }
    /**
     * minimal constructor
     */
    public TjQuota(Date createTime, Date updateTime) {
        this.createTime = createTime;
        this.updateTime = updateTime;
    }
    /**
     * full constructor
     */
    public TjQuota(String code, String name, String jobClazz,
                   Date createTime, String createUser, String createUserName,
                   Date updateTime, String updateUser, String updateUserName,
                   String status, String remark, String dataLevel, String cron, String execType, String jobStatus) {
        this.code = code;
        this.name = name;
        this.jobClazz = jobClazz;
        this.createTime = createTime;
        this.createUser = createUser;
        this.createUserName = createUserName;
        this.updateTime = updateTime;
        this.updateUser = updateUser;
        this.updateUserName = updateUserName;
        this.status = status;
        this.jobStatus = jobStatus;
        this.remark = remark;
        this.dataLevel = dataLevel;
        this.cron = cron;
        this.execType = execType;
    }
    // Property accessors
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "code", length = 100)
    public String getCode() {
        return this.code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "name", length = 200)
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "job_clazz", length = 500)
    public String getJobClazz() {
        return this.jobClazz;
    }
    public void setJobClazz(String jobClazz) {
        this.jobClazz = jobClazz;
    }
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "create_time", nullable = false, length = 0)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateTime() {
        return this.createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "create_user", length = 100)
    public String getCreateUser() {
        return this.createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    @Column(name = "create_user_name", length = 50)
    public String getCreateUserName() {
        return this.createUserName;
    }
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "update_time", nullable = false, length = 0)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getUpdateTime() {
        return this.updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    @Column(name = "update_user", length = 100)
    public String getUpdateUser() {
        return this.updateUser;
    }
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }
    @Column(name = "update_user_name", length = 50)
    public String getUpdateUserName() {
        return this.updateUserName;
    }
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
    @Column(name = "status", length = 1)
    public String getStatus() {
        return this.status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @Column(name = "remark", length = 1500)
    public String getRemark() {
        return this.remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Column(name = "cron", length = 100)
    public String getCron() {
        return cron;
    }
    public void setCron(String cron) {
        this.cron = cron;
    }
    @Column(name = "data_level", length = 2)
    public String getDataLevel() {
        return dataLevel;
    }
    public void setDataLevel(String dataLevel) {
        this.dataLevel = dataLevel;
    }
    @Column(name = "exec_type", length = 1)
    public String getExecType() {
        return execType;
    }
    public void setExecType(String execType) {
        this.execType = execType;
    }
    @Column(name = "result_get_type", length = 2)
    public String getResultGetType() {
        return resultGetType;
    }
    public void setResultGetType(String resultGetType) {
        this.resultGetType = resultGetType;
    }
    @Column(name = "job_status", length = 1)
    public String getJobStatus() {
        return jobStatus;
    }
    public void setJobStatus(String jobStatus) {
        this.jobStatus = jobStatus;
    }
}

+ 1 - 1
src/main/java/com/yihu/quota/model/jpa/TjQuotaGovProvision.java

@ -1,4 +1,4 @@
package com.yihu.quota.model.jpa;
package com.yihu.quota.model;
import com.fasterxml.jackson.annotation.JsonFormat;

+ 2 - 2
src/main/java/com/yihu/quota/model/jpa/TjQuotaLog.java

@ -1,4 +1,4 @@
package com.yihu.quota.model.jpa;
package com.yihu.quota.model;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -21,7 +21,7 @@ public class TjQuotaLog {
    private String content;
    /**
     * 1成功 0失败,2执行中
      */
     */
    private String status;

+ 73 - 0
src/main/java/com/yihu/quota/model/cube/Cube.java

@ -0,0 +1,73 @@
package com.yihu.quota.model.cube;
import com.yihu.quota.model.dimension.DimensionMember;
import javax.persistence.*;
import java.util.List;
/**
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
@Entity
@Table(name = "olap_cube")
public class Cube {
    private Integer id;
    private String name;                  //多维数据集名称
    private String code;                  //多维数据集编码
    private Integer dataSourceType;     //数据源类型 1 hbase 2 mysql
    private String indexName;           //保存的索引名称
    private String note;                //备注
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public Integer getDataSourceType() {
        return dataSourceType;
    }
    public void setDataSourceType(Integer dataSourceType) {
        this.dataSourceType = dataSourceType;
    }
    public String getIndexName() {
        return indexName;
    }
    public void setIndexName(String indexName) {
        this.indexName = indexName;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}

+ 91 - 0
src/main/java/com/yihu/quota/model/cube/CubeMapping.java

@ -0,0 +1,91 @@
package com.yihu.quota.model.cube;
import com.yihu.quota.model.dimension.DimensionMember;
import javax.persistence.*;
import java.util.List;
/**
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
@Entity
@Table(name = "olap_cube_mapping")
public class CubeMapping {
    private Integer id;
    private Integer cubeId;            //多维数据集ID
    private Integer dataFieldId;      //字段名
    private Integer dimensionId;      //维度ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    private Integer saveType;        //成员保存时映射格式类型: 1 列 2 对象 3 子集
    private String childPrimaryKay; //子集唯一字段
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getCubeId() {
        return cubeId;
    }
    public void setCubeId(Integer cubeId) {
        this.cubeId = cubeId;
    }
    public Integer getDataFieldId() {
        return dataFieldId;
    }
    public void setDataFieldId(Integer dataFieldId) {
        this.dataFieldId = dataFieldId;
    }
    public Integer getDimensionId() {
        return dimensionId;
    }
    public void setDimensionId(Integer dimensionId) {
        this.dimensionId = dimensionId;
    }
    public String getDimensionCode() {
        return dimensionCode;
    }
    public void setDimensionCode(String dimensionCode) {
        this.dimensionCode = dimensionCode;
    }
    public String getFieldName() {
        return fieldName;
    }
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }
    public Integer getSaveType() {
        return saveType;
    }
    public void setSaveType(Integer saveType) {
        this.saveType = saveType;
    }
    public String getChildPrimaryKay() {
        return childPrimaryKay;
    }
    public void setChildPrimaryKay(String childPrimaryKay) {
        this.childPrimaryKay = childPrimaryKay;
    }
}

+ 74 - 0
src/main/java/com/yihu/quota/model/cube/CubeMemberMapping.java

@ -0,0 +1,74 @@
package com.yihu.quota.model.cube;
import com.yihu.quota.model.dimension.DimensionMember;
import javax.persistence.*;
import java.util.List;
/**
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
@Entity
@Table(name = "olap_cube_member_mapping")
public class CubeMemberMapping {
    private Integer id;
    private Integer cubeMappingId;    //多维数据集ID
    private Integer dataFieldId;      //字段名
    private Integer dimensionMemberId;//维度成员ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getCubeMappingId() {
        return cubeMappingId;
    }
    public void setCubeMappingId(Integer cubeMappingId) {
        this.cubeMappingId = cubeMappingId;
    }
    public Integer getDataFieldId() {
        return dataFieldId;
    }
    public void setDataFieldId(Integer dataFieldId) {
        this.dataFieldId = dataFieldId;
    }
    public Integer getDimensionMemberId() {
        return dimensionMemberId;
    }
    public void setDimensionMemberId(Integer dimensionMemberId) {
        this.dimensionMemberId = dimensionMemberId;
    }
    public String getDimensionCode() {
        return dimensionCode;
    }
    public void setDimensionCode(String dimensionCode) {
        this.dimensionCode = dimensionCode;
    }
    public String getFieldName() {
        return fieldName;
    }
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }
}

+ 120 - 0
src/main/java/com/yihu/quota/model/dict/SystemDict.java

@ -0,0 +1,120 @@
package com.yihu.quota.model.dict;// default package
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * SystemDict entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "system_dict")
public class SystemDict implements java.io.Serializable {
    // Fields
    private Integer id;
    private String saasId;
    private String dictName;
    private String code;
    private String value;
    private String pyCode;
    private Integer sort;
    // Constructors
    /**
     * default constructor
     */
    public SystemDict() {
    }
    /**
     * minimal constructor
     */
    public SystemDict(String dictName, String code, String value) {
        this.dictName = dictName;
        this.code = code;
        this.value = value;
    }
    /**
     * full constructor
     */
    public SystemDict(String saasId, String dictName, String code,
                      String value, String pyCode, Integer sort) {
        this.saasId = saasId;
        this.dictName = dictName;
        this.code = code;
        this.value = value;
        this.pyCode = pyCode;
        this.sort = sort;
    }
    // Property accessors
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "saas_id", length = 100)
    public String getSaasId() {
        return this.saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    @Column(name = "dict_name", nullable = false, length = 50)
    public String getDictName() {
        return this.dictName;
    }
    public void setDictName(String dictName) {
        this.dictName = dictName;
    }
    @Column(name = "code", nullable = false, length = 50)
    public String getCode() {
        return this.code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "value", nullable = false, length = 50)
    public String getValue() {
        return this.value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Column(name = "py_code", length = 50)
    public String getPyCode() {
        return this.pyCode;
    }
    public void setPyCode(String pyCode) {
        this.pyCode = pyCode;
    }
    @Column(name = "sort")
    public Integer getSort() {
        return this.sort;
    }
    public void setSort(Integer sort) {
        this.sort = sort;
    }
}

+ 158 - 0
src/main/java/com/yihu/quota/model/dict/SystemDictList.java

@ -0,0 +1,158 @@
package com.yihu.quota.model.dict;// default package
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
 * SystemDictList entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "system_dict_list")
public class SystemDictList implements java.io.Serializable {
    // Fields
    private Integer id;
    private String dictName;
    private String chineseName;
    private String pyCode;
    private String pid;
    private String remark;
    private String relationTable;
    private String relationColCode;
    private String relationColValue;
    private String relationColExtend;
    // Constructors
    /**
     * default constructor
     */
    public SystemDictList() {
    }
    /**
     * minimal constructor
     */
    public SystemDictList(Integer id, String dictName, String chineseName,
                          String pid) {
        this.id = id;
        this.dictName = dictName;
        this.chineseName = chineseName;
        this.pid = pid;
    }
    /**
     * full constructor
     */
    public SystemDictList(Integer id, String dictName, String chineseName,
                          String pyCode, String pid, String remark, String relationTable,
                          String relationColCode, String relationColValue,
                          String relationColExtend) {
        this.id = id;
        this.dictName = dictName;
        this.chineseName = chineseName;
        this.pyCode = pyCode;
        this.pid = pid;
        this.remark = remark;
        this.relationTable = relationTable;
        this.relationColCode = relationColCode;
        this.relationColValue = relationColValue;
        this.relationColExtend = relationColExtend;
    }
    // Property accessors
    @Id
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "dict_name", nullable = false, length = 50)
    public String getDictName() {
        return this.dictName;
    }
    public void setDictName(String dictName) {
        this.dictName = dictName;
    }
    @Column(name = "chinese_name", nullable = false, length = 50)
    public String getChineseName() {
        return this.chineseName;
    }
    public void setChineseName(String chineseName) {
        this.chineseName = chineseName;
    }
    @Column(name = "py_code", length = 50)
    public String getPyCode() {
        return this.pyCode;
    }
    public void setPyCode(String pyCode) {
        this.pyCode = pyCode;
    }
    @Column(name = "pid", nullable = false, length = 50)
    public String getPid() {
        return this.pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    @Column(name = "remark", length = 200)
    public String getRemark() {
        return this.remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    @Column(name = "relation_table", length = 50)
    public String getRelationTable() {
        return this.relationTable;
    }
    public void setRelationTable(String relationTable) {
        this.relationTable = relationTable;
    }
    @Column(name = "relation_col_code", length = 50)
    public String getRelationColCode() {
        return this.relationColCode;
    }
    public void setRelationColCode(String relationColCode) {
        this.relationColCode = relationColCode;
    }
    @Column(name = "relation_col_value", length = 50)
    public String getRelationColValue() {
        return this.relationColValue;
    }
    public void setRelationColValue(String relationColValue) {
        this.relationColValue = relationColValue;
    }
    @Column(name = "relation_col_extend", length = 50)
    public String getRelationColExtend() {
        return this.relationColExtend;
    }
    public void setRelationColExtend(String relationColExtend) {
        this.relationColExtend = relationColExtend;
    }
}

+ 100 - 0
src/main/java/com/yihu/quota/model/dimension/Dimension.java

@ -0,0 +1,100 @@
package com.yihu.quota.model.dimension;
import javax.persistence.*;
import java.util.List;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
@Entity
@Table(name = "olap_dimension")
public class Dimension {
    private Integer id;
    /**
     *名称
     */
    private String name;
    /**
     * 编码
     */
    private String code;
    /**
     * 类型 : 1 维度 2 属性 3 指标
     */
    private Integer type;
    /**
     * 数据字典
     */
    private String dict;
    /**
     * 中间算法
     */
    private String algorithm;
    /**
     * 临时字段,存放维度成员
     */
    private List<DimensionMember> dimensionMembers;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getDict() {
        return dict;
    }
    public void setDict(String dict) {
        this.dict = dict;
    }
    public String getAlgorithm() {
        return algorithm;
    }
    public void setAlgorithm(String algorithm) {
        this.algorithm = algorithm;
    }
    @Transient
    public List<DimensionMember> getDimensionMembers() {
        return dimensionMembers;
    }
    public void setDimensionMembers(List<DimensionMember> dimensionMembers) {
        this.dimensionMembers = dimensionMembers;
    }
}

+ 90 - 0
src/main/java/com/yihu/quota/model/dimension/DimensionMember.java

@ -0,0 +1,90 @@
package com.yihu.quota.model.dimension;
import org.hibernate.annotations.Formula;
import javax.persistence.*;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
@Entity
@Table(name = "olap_dimension_member")
public class DimensionMember {
    private Integer id;
    /**
     * 名称
     */
    private String name;
    /**
     * 编码
     */
    private String code;
    /**
     * 上级维度Id
     */
    private Integer dimensionId;
    /**
     * 维度层级
     */
    private Integer level;
    /**
     * 上级维度名称
     */
    private String dimensionName;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "dimension_id")
    public Integer getDimensionId() {
        return dimensionId;
    }
    public void setDimensionId(Integer dimensionId) {
        this.dimensionId = dimensionId;
    }
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    @Formula("(SELECT odm.name FROM olap_dimension_member odm LEFT JOIN olap_dimension od ON od.id = odm.dimension_id WHERE odm.id  = id )")
    public String getDimensionName() {
        return dimensionName;
    }
    public void setDimensionName(String dimensionName) {
        this.dimensionName = dimensionName;
    }
}

+ 2 - 2
src/main/java/com/yihu/quota/model/jpa/dimension/TjDimensionMain.java

@ -1,9 +1,9 @@
package com.yihu.quota.model.jpa.dimension;// default package
package com.yihu.quota.model.dimension;// default package
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import javax.persistence.*;
import java.util.Date;
import static javax.persistence.GenerationType.IDENTITY;

+ 179 - 0
src/main/java/com/yihu/quota/model/dimension/TjDimensionSlave.java

@ -0,0 +1,179 @@
package com.yihu.quota.model.dimension;// default package
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.*;
import java.util.Date;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjDimensionSlave entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_dimension_slave")
public class TjDimensionSlave implements java.io.Serializable {
    // Fields
    private Integer id;
    private String code;
    private String name;
    private Integer status;//1: 正常 0:不可以用 -1 已删除
    private String type;//// 维度 :1 性别 2年龄
    private Date createTime;
    private String createUser;
    private String createUserName;
    private Date updateTime;
    private String updateUser;
    private String updateUserName;
    private String remark;
    // Constructors
    /**
     * default constructor
     */
    public TjDimensionSlave() {
    }
    /**
     * minimal constructor
     */
    public TjDimensionSlave(Date createTime, Date updateTime) {
        this.createTime = createTime;
        this.updateTime = updateTime;
    }
    /**
     * full constructor
     */
    public TjDimensionSlave(String code, String name,
                            Date createTime, String createUser, String createUserName,
                            Date updateTime, String updateUser, String updateUserName,
                            String remark) {
        this.code = code;
        this.name = name;
        this.createTime = createTime;
        this.createUser = createUser;
        this.createUserName = createUserName;
        this.updateTime = updateTime;
        this.updateUser = updateUser;
        this.updateUserName = updateUserName;
        this.remark = remark;
    }
    // Property accessors
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "code", length = 100)
    public String getCode() {
        return this.code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "name", length = 200)
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "create_time", nullable = false, length = 0)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateTime() {
        return this.createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "create_user", length = 100)
    public String getCreateUser() {
        return this.createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    @Column(name = "create_user_name", length = 50)
    public String getCreateUserName() {
        return this.createUserName;
    }
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "update_time", nullable = false, length = 0)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getUpdateTime() {
        return this.updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    @Column(name = "update_user", length = 100)
    public String getUpdateUser() {
        return this.updateUser;
    }
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }
    @Column(name = "update_user_name", length = 50)
    public String getUpdateUserName() {
        return this.updateUserName;
    }
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
    @Column(name = "remark", length = 1500)
    public String getRemark() {
        return this.remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}

+ 86 - 0
src/main/java/com/yihu/quota/model/dimension/TjQuotaDimensionMain.java

@ -0,0 +1,86 @@
package com.yihu.quota.model.dimension;// default package
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjQuotaDimensionMain entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_quota_dimension_main")
public class TjQuotaDimensionMain implements java.io.Serializable {
    // Fields
    private Integer id;
    private String quotaCode;
    private String mainCode;
    private String dictSql;
    private String keyVal;
    private String type;
    // Constructors
    /**
     * default constructor
     */
    public TjQuotaDimensionMain() {
    }
    // Property accessors
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "quota_code", length = 100)
    public String getQuotaCode() {
        return this.quotaCode;
    }
    public void setQuotaCode(String quotaCode) {
        this.quotaCode = quotaCode;
    }
    @Column(name = "main_code", length = 100)
    public String getMainCode() {
        return this.mainCode;
    }
    public void setMainCode(String mainCode) {
        this.mainCode = mainCode;
    }
    public String getDictSql() {
        return dictSql;
    }
    public void setDictSql(String dictSql) {
        this.dictSql = dictSql;
    }
    @Column(name = "key_val", length = 100)
    public String getKeyVal() {
        return keyVal;
    }
    public void setKeyVal(String keyVal) {
        this.keyVal = keyVal;
    }
    @Transient
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}

+ 1 - 5
src/main/java/com/yihu/quota/model/jpa/dimension/TjQuotaDimensionSlave.java

@ -1,7 +1,4 @@
package com.yihu.quota.model.jpa.dimension;// default package
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
package com.yihu.quota.model.dimension;// default package
import javax.persistence.*;
@ -25,7 +22,6 @@ public class TjQuotaDimensionSlave implements java.io.Serializable {
    private String converClass;
    // Constructors
    /**

+ 0 - 229
src/main/java/com/yihu/quota/model/jpa/TjQuota.java

@ -1,229 +0,0 @@
package com.yihu.quota.model.jpa;// default package
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.*;
import java.util.Date;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjQuota entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_quota")
public class TjQuota implements java.io.Serializable {
	// Fields
	private Integer id;
	private String code;
	private String name;
	private String cron;//quartz时间表达式
	private String execType;
	private String jobClazz; //类class
	private String dataLevel;//1 全量  2增量
	private Date createTime;
	private String createUser;
	private String createUserName;
	private Date updateTime;
	private String updateUser;
	private String updateUserName;
	private String status;//1: 正常 0:不可用  -1删除
	private String remark;
	private String resultGetType; // 指标结果获取方式 1:直接库中获取,2:二次统计获取。
	//周期指标执行状态:0未开启,1执行中
	private String jobStatus;
	// Constructors
	/** default constructor */
	public TjQuota() {
	}
	/** minimal constructor */
	public TjQuota(Date createTime, Date updateTime) {
		this.createTime = createTime;
		this.updateTime = updateTime;
	}
	/** full constructor */
	public TjQuota(String code, String name, String jobClazz,
				   Date createTime, String createUser, String createUserName,
				   Date updateTime, String updateUser, String updateUserName,
				   String status, String remark,String dataLevel ,String cron ,String execType, String jobStatus) {
		this.code = code;
		this.name = name;
		this.jobClazz = jobClazz;
		this.createTime = createTime;
		this.createUser = createUser;
		this.createUserName = createUserName;
		this.updateTime = updateTime;
		this.updateUser = updateUser;
		this.updateUserName = updateUserName;
		this.status = status;
		this.jobStatus = jobStatus;
		this.remark = remark;
		this.dataLevel = dataLevel;
		this.cron = cron;
		this.execType = execType;
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "code", length = 100)
	public String getCode() {
		return this.code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	@Column(name = "name", length = 200)
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name = "job_clazz", length = 500)
	public String getJobClazz() {
		return this.jobClazz;
	}
	public void setJobClazz(String jobClazz) {
		this.jobClazz = jobClazz;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "create_time", nullable = false, length = 0)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	public Date getCreateTime() {
		return this.createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	@Column(name = "create_user", length = 100)
	public String getCreateUser() {
		return this.createUser;
	}
	public void setCreateUser(String createUser) {
		this.createUser = createUser;
	}
	@Column(name = "create_user_name", length = 50)
	public String getCreateUserName() {
		return this.createUserName;
	}
	public void setCreateUserName(String createUserName) {
		this.createUserName = createUserName;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "update_time", nullable = false, length = 0)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	public Date getUpdateTime() {
		return this.updateTime;
	}
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	@Column(name = "update_user", length = 100)
	public String getUpdateUser() {
		return this.updateUser;
	}
	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}
	@Column(name = "update_user_name", length = 50)
	public String getUpdateUserName() {
		return this.updateUserName;
	}
	public void setUpdateUserName(String updateUserName) {
		this.updateUserName = updateUserName;
	}
	@Column(name = "status", length = 1)
	public String getStatus() {
		return this.status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	@Column(name = "remark", length = 1500)
	public String getRemark() {
		return this.remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	@Column(name = "cron", length = 100)
	public String getCron() {
		return cron;
	}
	public void setCron(String cron) {
		this.cron = cron;
	}
	@Column(name = "data_level", length = 2)
	public String getDataLevel() {
		return dataLevel;
	}
	public void setDataLevel(String dataLevel) {
		this.dataLevel = dataLevel;
	}
	@Column(name = "exec_type", length = 1)
	public String getExecType() {
		return execType;
	}
	public void setExecType(String execType) {
		this.execType = execType;
	}
	@Column(name = "result_get_type", length = 2)
	public String getResultGetType() {
		return resultGetType;
	}
	public void setResultGetType(String resultGetType) {
		this.resultGetType = resultGetType;
	}
	@Column(name = "job_status", length = 1)
	public String getJobStatus() {
		return jobStatus;
	}
	public void setJobStatus(String jobStatus) {
		this.jobStatus = jobStatus;
	}
}

+ 0 - 117
src/main/java/com/yihu/quota/model/jpa/dict/SystemDict.java

@ -1,117 +0,0 @@
package com.yihu.quota.model.jpa.dict;// default package
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
 * SystemDict entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "system_dict")
public class SystemDict implements java.io.Serializable {
	// Fields
	private Integer id;
	private String saasId;
	private String dictName;
	private String code;
	private String value;
	private String pyCode;
	private Integer sort;
	// Constructors
	/** default constructor */
	public SystemDict() {
	}
	/** minimal constructor */
	public SystemDict(String dictName, String code, String value) {
		this.dictName = dictName;
		this.code = code;
		this.value = value;
	}
	/** full constructor */
	public SystemDict(String saasId, String dictName, String code,
			String value, String pyCode, Integer sort) {
		this.saasId = saasId;
		this.dictName = dictName;
		this.code = code;
		this.value = value;
		this.pyCode = pyCode;
		this.sort = sort;
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "saas_id", length = 100)
	public String getSaasId() {
		return this.saasId;
	}
	public void setSaasId(String saasId) {
		this.saasId = saasId;
	}
	@Column(name = "dict_name", nullable = false, length = 50)
	public String getDictName() {
		return this.dictName;
	}
	public void setDictName(String dictName) {
		this.dictName = dictName;
	}
	@Column(name = "code", nullable = false, length = 50)
	public String getCode() {
		return this.code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	@Column(name = "value", nullable = false, length = 50)
	public String getValue() {
		return this.value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	@Column(name = "py_code", length = 50)
	public String getPyCode() {
		return this.pyCode;
	}
	public void setPyCode(String pyCode) {
		this.pyCode = pyCode;
	}
	@Column(name = "sort")
	public Integer getSort() {
		return this.sort;
	}
	public void setSort(Integer sort) {
		this.sort = sort;
	}
}

+ 0 - 152
src/main/java/com/yihu/quota/model/jpa/dict/SystemDictList.java

@ -1,152 +0,0 @@
package com.yihu.quota.model.jpa.dict;// default package
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
 * SystemDictList entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "system_dict_list")
public class SystemDictList implements java.io.Serializable {
	// Fields
	private Integer id;
	private String dictName;
	private String chineseName;
	private String pyCode;
	private String pid;
	private String remark;
	private String relationTable;
	private String relationColCode;
	private String relationColValue;
	private String relationColExtend;
	// Constructors
	/** default constructor */
	public SystemDictList() {
	}
	/** minimal constructor */
	public SystemDictList(Integer id, String dictName, String chineseName,
			String pid) {
		this.id = id;
		this.dictName = dictName;
		this.chineseName = chineseName;
		this.pid = pid;
	}
	/** full constructor */
	public SystemDictList(Integer id, String dictName, String chineseName,
			String pyCode, String pid, String remark, String relationTable,
			String relationColCode, String relationColValue,
			String relationColExtend) {
		this.id = id;
		this.dictName = dictName;
		this.chineseName = chineseName;
		this.pyCode = pyCode;
		this.pid = pid;
		this.remark = remark;
		this.relationTable = relationTable;
		this.relationColCode = relationColCode;
		this.relationColValue = relationColValue;
		this.relationColExtend = relationColExtend;
	}
	// Property accessors
	@Id
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "dict_name", nullable = false, length = 50)
	public String getDictName() {
		return this.dictName;
	}
	public void setDictName(String dictName) {
		this.dictName = dictName;
	}
	@Column(name = "chinese_name", nullable = false, length = 50)
	public String getChineseName() {
		return this.chineseName;
	}
	public void setChineseName(String chineseName) {
		this.chineseName = chineseName;
	}
	@Column(name = "py_code", length = 50)
	public String getPyCode() {
		return this.pyCode;
	}
	public void setPyCode(String pyCode) {
		this.pyCode = pyCode;
	}
	@Column(name = "pid", nullable = false, length = 50)
	public String getPid() {
		return this.pid;
	}
	public void setPid(String pid) {
		this.pid = pid;
	}
	@Column(name = "remark", length = 200)
	public String getRemark() {
		return this.remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	@Column(name = "relation_table", length = 50)
	public String getRelationTable() {
		return this.relationTable;
	}
	public void setRelationTable(String relationTable) {
		this.relationTable = relationTable;
	}
	@Column(name = "relation_col_code", length = 50)
	public String getRelationColCode() {
		return this.relationColCode;
	}
	public void setRelationColCode(String relationColCode) {
		this.relationColCode = relationColCode;
	}
	@Column(name = "relation_col_value", length = 50)
	public String getRelationColValue() {
		return this.relationColValue;
	}
	public void setRelationColValue(String relationColValue) {
		this.relationColValue = relationColValue;
	}
	@Column(name = "relation_col_extend", length = 50)
	public String getRelationColExtend() {
		return this.relationColExtend;
	}
	public void setRelationColExtend(String relationColExtend) {
		this.relationColExtend = relationColExtend;
	}
}

+ 0 - 172
src/main/java/com/yihu/quota/model/jpa/dimension/TjDimensionSlave.java

@ -1,172 +0,0 @@
package com.yihu.quota.model.jpa.dimension;// default package
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjDimensionSlave entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_dimension_slave")
public class TjDimensionSlave implements java.io.Serializable {
	// Fields
	private Integer id;
	private String code;
	private String name;
	private Integer status;//1: 正常 0:不可以用 -1 已删除
	private String type;//// 维度 :1 性别 2年龄
	private Date createTime;
	private String createUser;
	private String createUserName;
	private Date updateTime;
	private String updateUser;
	private String updateUserName;
	private String remark;
	// Constructors
	/** default constructor */
	public TjDimensionSlave() {
	}
	/** minimal constructor */
	public TjDimensionSlave(Date createTime, Date updateTime) {
		this.createTime = createTime;
		this.updateTime = updateTime;
	}
	/** full constructor */
	public TjDimensionSlave(String code, String name,
			Date createTime, String createUser, String createUserName,
			Date updateTime, String updateUser, String updateUserName,
			String remark) {
		this.code = code;
		this.name = name;
		this.createTime = createTime;
		this.createUser = createUser;
		this.createUserName = createUserName;
		this.updateTime = updateTime;
		this.updateUser = updateUser;
		this.updateUserName = updateUserName;
		this.remark = remark;
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "code", length = 100)
	public String getCode() {
		return this.code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	@Column(name = "name", length = 200)
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name = "status")
	public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "create_time", nullable = false, length = 0)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	public Date getCreateTime() {
		return this.createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	@Column(name = "create_user", length = 100)
	public String getCreateUser() {
		return this.createUser;
	}
	public void setCreateUser(String createUser) {
		this.createUser = createUser;
	}
	@Column(name = "create_user_name", length = 50)
	public String getCreateUserName() {
		return this.createUserName;
	}
	public void setCreateUserName(String createUserName) {
		this.createUserName = createUserName;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "update_time", nullable = false, length = 0)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	public Date getUpdateTime() {
		return this.updateTime;
	}
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	@Column(name = "update_user", length = 100)
	public String getUpdateUser() {
		return this.updateUser;
	}
	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}
	@Column(name = "update_user_name", length = 50)
	public String getUpdateUserName() {
		return this.updateUserName;
	}
	public void setUpdateUserName(String updateUserName) {
		this.updateUserName = updateUserName;
	}
	@Column(name = "remark", length = 1500)
	public String getRemark() {
		return this.remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
}

+ 0 - 84
src/main/java/com/yihu/quota/model/jpa/dimension/TjQuotaDimensionMain.java

@ -1,84 +0,0 @@
package com.yihu.quota.model.jpa.dimension;// default package
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjQuotaDimensionMain entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_quota_dimension_main")
public class TjQuotaDimensionMain implements java.io.Serializable {
	// Fields
	private Integer id;
	private String quotaCode;
	private String mainCode;
	private String dictSql;
	private String keyVal;
	private String type;
	// Constructors
	/** default constructor */
	public TjQuotaDimensionMain() {
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "quota_code", length = 100)
	public String getQuotaCode() {
		return this.quotaCode;
	}
	public void setQuotaCode(String quotaCode) {
		this.quotaCode = quotaCode;
	}
	@Column(name = "main_code", length = 100)
	public String getMainCode() {
		return this.mainCode;
	}
	public void setMainCode(String mainCode) {
		this.mainCode = mainCode;
	}
	public String getDictSql() {
		return dictSql;
	}
	public void setDictSql(String dictSql) {
		this.dictSql = dictSql;
	}
	@Column(name = "key_val", length = 100)
	public String getKeyVal() {
		return keyVal;
	}
	public void setKeyVal(String keyVal) {
		this.keyVal = keyVal;
	}
	@Transient
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
}

+ 0 - 180
src/main/java/com/yihu/quota/model/jpa/save/TjDataSave.java

@ -1,180 +0,0 @@
package com.yihu.quota.model.jpa.save;// default package
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjDataSave entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_data_save")
public class TjDataSave implements java.io.Serializable {
	public static String type_es ="1";
	public static String type_solr="2";
	public static String type_mysql ="3";
	// Fields
	private Integer id;
	private String code;
	private String name;
	private String type;//1:mysql数据库 2:redis 3ES
	private Date createTime;
	private String createUser;
	private String createUserName;
	private Date updateTime;
	private String updateUser;
	private String updateUserName;
	private String status;//1: 正常 0:不可用  -1删除
	private String remark;
	// Constructors
	/** default constructor */
	public TjDataSave() {
	}
	/** minimal constructor */
	public TjDataSave(Date createTime, Date updateTime) {
		this.createTime = createTime;
		this.updateTime = updateTime;
	}
	/** full constructor */
	public TjDataSave(String code, String name, String type,
			Date createTime, String createUser, String createUserName,
			Date updateTime, String updateUser, String updateUserName,
			String status, String remark) {
		this.code = code;
		this.name = name;
		this.type = type;
		this.createTime = createTime;
		this.createUser = createUser;
		this.createUserName = createUserName;
		this.updateTime = updateTime;
		this.updateUser = updateUser;
		this.updateUserName = updateUserName;
		this.status = status;
		this.remark = remark;
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "code", length = 100)
	public String getCode() {
		return this.code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	@Column(name = "name", length = 200)
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name = "type", length = 2)
	public String getType() {
		return this.type;
	}
	public void setType(String type) {
		this.type = type;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "create_time", nullable = false, length = 0)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	public Date getCreateTime() {
		return this.createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	@Column(name = "create_user", length = 100)
	public String getCreateUser() {
		return this.createUser;
	}
	public void setCreateUser(String createUser) {
		this.createUser = createUser;
	}
	@Column(name = "create_user_name", length = 50)
	public String getCreateUserName() {
		return this.createUserName;
	}
	public void setCreateUserName(String createUserName) {
		this.createUserName = createUserName;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "update_time", nullable = false, length = 0)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	public Date getUpdateTime() {
		return this.updateTime;
	}
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	@Column(name = "update_user", length = 100)
	public String getUpdateUser() {
		return this.updateUser;
	}
	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}
	@Column(name = "update_user_name", length = 50)
	public String getUpdateUserName() {
		return this.updateUserName;
	}
	public void setUpdateUserName(String updateUserName) {
		this.updateUserName = updateUserName;
	}
	@Column(name = "status", length = 1)
	public String getStatus() {
		return this.status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	@Column(name = "remark", length = 1500)
	public String getRemark() {
		return this.remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
}

+ 0 - 76
src/main/java/com/yihu/quota/model/jpa/save/TjQuotaDataSave.java

@ -1,76 +0,0 @@
package com.yihu.quota.model.jpa.save;// default package
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjQuotaDataSave entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_quota_data_save")
public class TjQuotaDataSave implements java.io.Serializable {
	// Fields
	private Integer id;
	private String quotaCode;
	private String saveCode;
	private String configJson;
	private String type;
	// Constructors
	/** default constructor */
	public TjQuotaDataSave() {
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "quota_code", length = 100)
	public String getQuotaCode() {
		return this.quotaCode;
	}
	public void setQuotaCode(String quotaCode) {
		this.quotaCode = quotaCode;
	}
	@Column(name = "save_code", length = 100)
	public String getSaveCode() {
		return this.saveCode;
	}
	public void setSaveCode(String saveCode) {
		this.saveCode = saveCode;
	}
	@Column(name = "config_json", length = 1500)
	public String getConfigJson() {
		return configJson;
	}
	public void setConfigJson(String configJson) {
		this.configJson = configJson;
	}
	@Transient
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
}

+ 0 - 173
src/main/java/com/yihu/quota/model/jpa/source/TjDataSource.java

@ -1,173 +0,0 @@
package com.yihu.quota.model.jpa.source;// default package
import java.util.Date;
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjDataSource entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_data_source")
public class TjDataSource implements java.io.Serializable {
	public static String type_es ="1";
	public static String type_solr ="2";
	public static String type_mysql ="3";
	// Fields
	private Integer id;
	private String code;
	private String type;// 1:mysql数据库 2:redis 3 接口
	private String name;
	private Date createTime;
	private String createUser;
	private String createUserName;
	private Date updateTime;
	private String updateUser;
	private String updateUserName;
	private String status;//1: 正常 0:不可用  -1删除
	private String remark;
	// Constructors
	/** default constructor */
	public TjDataSource() {
	}
	/** minimal constructor */
	public TjDataSource(Date createTime, Date updateTime) {
		this.createTime = createTime;
		this.updateTime = updateTime;
	}
	/** full constructor */
	public TjDataSource(String code, String type, String name,
			Date createTime, String createUser, String createUserName,
			Date updateTime, String updateUser, String updateUserName,
			String status, String remark) {
		this.code = code;
		this.type = type;
		this.name = name;
		this.createTime = createTime;
		this.createUser = createUser;
		this.createUserName = createUserName;
		this.updateTime = updateTime;
		this.updateUser = updateUser;
		this.updateUserName = updateUserName;
		this.status = status;
		this.remark = remark;
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "code", length = 100)
	public String getCode() {
		return this.code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	@Column(name = "type", length = 2)
	public String getType() {
		return this.type;
	}
	public void setType(String type) {
		this.type = type;
	}
	@Column(name = "name", length = 200)
	public String getName() {
		return this.name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "create_time", nullable = false, length = 0)
	public Date getCreateTime() {
		return this.createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	@Column(name = "create_user", length = 100)
	public String getCreateUser() {
		return this.createUser;
	}
	public void setCreateUser(String createUser) {
		this.createUser = createUser;
	}
	@Column(name = "create_user_name", length = 50)
	public String getCreateUserName() {
		return this.createUserName;
	}
	public void setCreateUserName(String createUserName) {
		this.createUserName = createUserName;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "update_time", nullable = false, length = 0)
	public Date getUpdateTime() {
		return this.updateTime;
	}
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	@Column(name = "update_user", length = 100)
	public String getUpdateUser() {
		return this.updateUser;
	}
	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}
	@Column(name = "update_user_name", length = 50)
	public String getUpdateUserName() {
		return this.updateUserName;
	}
	public void setUpdateUserName(String updateUserName) {
		this.updateUserName = updateUserName;
	}
	@Column(name = "status", length = 1)
	public String getStatus() {
		return this.status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	@Column(name = "remark", length = 1500)
	public String getRemark() {
		return this.remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
}

+ 0 - 83
src/main/java/com/yihu/quota/model/jpa/source/TjQuotaDataSource.java

@ -1,83 +0,0 @@
package com.yihu.quota.model.jpa.source;// default package
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
/**
 * TjQuotaDataSource entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tj_quota_data_source")
public class TjQuotaDataSource implements java.io.Serializable {
	// Fields
	private Integer id;
	private String quotaCode;
	private String sourceCode;
	private String configJson;
	private String code;
	// Constructors
	/** default constructor */
	public TjQuotaDataSource() {
	}
	/** full constructor */
	public TjQuotaDataSource(String quotaCode, String sourceCode,
			String configJson) {
		this.quotaCode = quotaCode;
		this.sourceCode = sourceCode;
		this.configJson = configJson;
	}
	// Property accessors
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name = "quota_code", length = 100)
	public String getQuotaCode() {
		return this.quotaCode;
	}
	public void setQuotaCode(String quotaCode) {
		this.quotaCode = quotaCode;
	}
	@Column(name = "source_code", length = 100)
	public String getSourceCode() {
		return this.sourceCode;
	}
	public void setSourceCode(String sourceCode) {
		this.sourceCode = sourceCode;
	}
	@Column(name = "config_json", length = 2000)
	public String getConfigJson() {
		return this.configJson;
	}
	public void setConfigJson(String configJson) {
		this.configJson = configJson;
	}
	@Transient
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
}

+ 0 - 47
src/main/java/com/yihu/quota/model/rest/HospitalComposeModel.java

@ -1,47 +0,0 @@
package com.yihu.quota.model.rest;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2018/1/16.
 */
public class HospitalComposeModel implements Serializable {
    private String x1;
    private String x2;
    private String name;
    private List<Map<String, Object>> children;
    public String getX1() {
        return x1;
    }
    public void setX1(String x1) {
        this.x1 = x1;
    }
    public String getX2() {
        return x2;
    }
    public void setX2(String x2) {
        this.x2 = x2;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Map<String, Object>> getChildren() {
        return children;
    }
    public void setChildren(List<Map<String, Object>> children) {
        this.children = children;
    }
}

+ 0 - 30
src/main/java/com/yihu/quota/model/rest/QuotaReport.java

@ -1,30 +0,0 @@
package com.yihu.quota.model.rest;
import com.yihu.quota.model.jpa.TjQuota;
import java.util.List;
/**
 * Created by janseny on 2017/6/30.
 */
public class QuotaReport {
    private TjQuota tjQuota;
    private List<ResultModel> reultModelList ;
    public TjQuota getTjQuota() {
        return tjQuota;
    }
    public void setTjQuota(TjQuota tjQuota) {
        this.tjQuota = tjQuota;
    }
    public List<ResultModel> getReultModelList() {
        return reultModelList;
    }
    public void setReultModelList(List<ResultModel> reultModelList) {
        this.reultModelList = reultModelList;
    }
}

+ 0 - 39
src/main/java/com/yihu/quota/model/rest/QuotaTreeModel.java

@ -1,39 +0,0 @@
package com.yihu.quota.model.rest;
import com.yihu.quota.model.jpa.TjQuota;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2017/12/19.
 */
public class QuotaTreeModel {
    private TjQuota tjQuota;
    private List<Map<String, Object>> mapList;
    private List<TjQuota> childern;
    public TjQuota getTjQuota() {
        return tjQuota;
    }
    public void setTjQuota(TjQuota tjQuota) {
        this.tjQuota = tjQuota;
    }
    public List<Map<String, Object>> getMapList() {
        return mapList;
    }
    public void setMapList(List<Map<String, Object>> mapList) {
        this.mapList = mapList;
    }
    public List<TjQuota> getChildern() {
        return childern;
    }
    public void setChildern(List<TjQuota> childern) {
        this.childern = childern;
    }
}

+ 6 - 2
src/main/java/com/yihu/quota/model/rest/ResultModel.java

@ -3,11 +3,15 @@ package com.yihu.quota.model.rest;
import java.util.List;
/**
 * Created by janseny on 2017/7/2.
 * @author janseny
 * @date 2017/7/2
 */
public class ResultModel {
    private List<String> cloumns ;//维度对应的字典项名称 如:维度为org时 值为 余干县人民医院 :维度为town时 值为 余干县
    /**
     * 维度对应的字典项名称 如:维度为org时 值为 余干县人民医院 :维度为town时 值为 余干县
     */
    private List<String> cloumns;
    private Object value;
    public List<String> getCloumns() {

+ 0 - 0
src/main/java/com/yihu/quota/model/save/TjDataSave.java


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini