Bladeren bron

first commit

Qi Wang 2 jaren geleden
commit
ead7be4a63
100 gewijzigde bestanden met toevoegingen van 2358 en 0 verwijderingen
  1. 27 0
      .gitignore
  2. 14 0
      README.md
  3. BIN
      export/045f6d72-02c3-4199-9cca-a6a1ea8d8075/洗井日报 .xlsx
  4. BIN
      export/052eade0-b20b-41f6-86b4-ae9e74bb2c91/洗井日报 .xlsx
  5. BIN
      export/06f33b74-0e52-4d7d-ad88-ef93cf5a7793/洗井日报 .xlsx
  6. BIN
      export/104e2656-48d4-4ddc-8a42-2afde2104430/洗井日报.xlsx
  7. BIN
      export/14270cee-a43c-4e33-85e7-5bb0cce38a3f/洗井日报 .xlsx
  8. BIN
      export/1e8e2e04-94da-4fac-ba16-09bd389a33ba/洗井日报 .xlsx
  9. BIN
      export/2954254b-5ae5-4d8d-954c-9b77d7488890/层段合格率统计表.xlsx
  10. BIN
      export/357b820d-b5df-4c2c-b707-0bbe158e707d/欠注管理统计表 .xlsx
  11. BIN
      export/3654ff44-d7f6-483b-aed7-effbe036d395/洗井日报 .xlsx
  12. BIN
      export/38bd834d-0748-457a-8941-d4509e0d8d6a/注水井分注层段合格率月报.xlsx
  13. BIN
      export/38d497e8-1a3e-4a58-9cab-bb75be16c936/洗井日报 .xlsx
  14. BIN
      export/3d5a582d-bba0-40fa-b0ba-39a8da676193/欠注管理统计表 .xlsx
  15. BIN
      export/4784c76e-2d40-45da-97da-9169e1fb75c9/欠注管理统计表 .xlsx
  16. BIN
      export/4ac8d745-a673-4059-8582-f48031271b2c/注水井分注层段合格率月报.xlsx
  17. BIN
      export/519dc4cd-2da5-46d5-a284-697773082f3d/洗井日报 .xlsx
  18. BIN
      export/51c5d2d0-401e-4e8f-948f-ef0ca1a1e5b1/洗井日报 .xlsx
  19. BIN
      export/54f7e3a5-4aa3-4420-8f08-66e76c1ddb97/洗井日报 .xlsx
  20. BIN
      export/564ce041-5bd4-400c-a07d-ee52a9fa0bdd/洗井日报 .xlsx
  21. BIN
      export/57eda5e8-6a05-49d1-ada0-bf109f983a64/洗井日报 .xlsx
  22. BIN
      export/64428d13-1615-44b8-831f-b1a0715bd9cd/洗井日报 .xlsx
  23. BIN
      export/673fe9f8-57f9-448c-865b-de07f3fa58f4/洗井日报 .xlsx
  24. BIN
      export/698598e4-24b1-466b-b4cc-69611615d19d/洗井日报 .xlsx
  25. BIN
      export/6b90bea2-9ed4-418b-944a-09285a45649c/层段合格率统计表.xlsx
  26. BIN
      export/6bafbd7b-fd87-463d-8a1b-1e901bf2a282/洗井日报 .xlsx
  27. BIN
      export/6c054ebb-3ade-4248-a16f-3cc6c99f4cc0/洗井日报 .xlsx
  28. BIN
      export/6e5e8c99-98f6-4074-bdab-bce5ad702d8d/洗井日报 .xlsx
  29. BIN
      export/6f39bbb1-7f38-4ebd-938b-93ef992894c3/洗井日报 .xlsx
  30. BIN
      export/6fefde60-f849-47a2-bcdb-2608fee54623/洗井日报 .xlsx
  31. BIN
      export/760786af-80a1-42c7-95b2-17a1f5eb143b/洗井日报 .xlsx
  32. BIN
      export/769e547a-34a0-490e-a148-ba54f5bc38d7/洗井日报 .xlsx
  33. BIN
      export/793ad2c3-e682-404f-9575-068eb01f9022/洗井日报 .xlsx
  34. BIN
      export/7b5ef502-ff7a-403a-a5a7-357e45594107/欠注井管理.xlsx
  35. BIN
      export/81e76952-1bfd-4cb6-bdd1-4c74a5a0bdf2/洗井日报 .xlsx
  36. BIN
      export/84404694-a3cb-4b50-af0f-e08157765980/洗井日报 .xlsx
  37. BIN
      export/8b052558-c144-4727-a2df-02d3a3209394/洗井日报 .xlsx
  38. BIN
      export/8f55230f-7881-46f7-bc8f-f5a8d3030bdb/洗井日报 .xlsx
  39. BIN
      export/95da5e32-dfc1-45e3-9216-97c6fe56f7da/洗井日报 .xlsx
  40. BIN
      export/980dfd79-9cf4-404b-b3bc-3ceb45ac3bff/洗井日报 .xlsx
  41. BIN
      export/9b7362a7-a0a1-490e-830a-ed7ea87b1849/洗井日报 .xlsx
  42. BIN
      export/a17e0584-d191-4af4-8bab-d535a5e8f507/洗井日报 .xlsx
  43. BIN
      export/a3700103-8662-46db-8e4a-000ea65fcfa7/欠注管理统计表 .xlsx
  44. BIN
      export/a8b0e723-fa14-49f5-ba52-f482f674d83b/洗井日报 .xlsx
  45. BIN
      export/a8d10991-b4e4-490c-b5c9-94942b862ee5/洗井日报.xlsx
  46. BIN
      export/aea631a3-d3d6-4cd0-85ef-a663a04b1087/洗井日报 .xlsx
  47. BIN
      export/bf9ac8b5-59cf-45b2-98aa-348a35f30cbb/洗井日报 .xlsx
  48. BIN
      export/c1efa2e4-f2ca-4c1a-916c-2d0f94be077e/欠注管理统计表 .xlsx
  49. BIN
      export/c6c6c7b7-df3b-400a-848b-17854ed7bf68/洗井日报.xlsx
  50. BIN
      export/c91d9e38-16a7-45b0-87e9-6408c6c3bcc4/洗井日报 .xlsx
  51. BIN
      export/c92a9984-62d6-48c3-b4fd-7f6ca444cfe8/洗井日报 .xlsx
  52. BIN
      export/cf30fa5a-7fbd-43c1-a833-ea1f6b9267d8/洗井日报 .xlsx
  53. BIN
      export/cf4e6bd4-f8e5-4308-8a44-d67b3a57303c/洗井日报 .xlsx
  54. BIN
      export/d7906a54-5b33-45f9-9399-536384282ad4/洗井日报 .xlsx
  55. BIN
      export/dfcde071-559a-4e61-bdab-e2d933a904dc/洗井日报 .xlsx
  56. BIN
      export/e302ef02-7f60-498e-a77c-501140f4bcd5/洗井日报 .xlsx
  57. BIN
      export/f60e126d-b243-437d-bafb-98c9426e90b5/层段合格率统计表.xlsx
  58. 2 0
      lombok.config
  59. 171 0
      pom.xml
  60. 32 0
      vseaf4.4-analyze/pom.xml
  61. 6 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/constant/CstDataTypeEnum.java
  62. 9 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/constant/CstGroupType.java
  63. 16 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/constant/CstOperator.java
  64. 142 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/controller/CustomSearchController.java
  65. 160 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/dao/CustomSearchDao.java
  66. 35 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstDataSource.java
  67. 20 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstDataType.java
  68. 16 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstDictData.java
  69. 30 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstIndicator.java
  70. 26 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstQueryType.java
  71. 26 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTable.java
  72. 60 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTableIndicator.java
  73. 26 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTableRelation.java
  74. 43 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplate.java
  75. 38 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateCondition.java
  76. 44 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateIndicator.java
  77. 27 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateShare.java
  78. 14 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateShareUnit.java
  79. 26 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateTable.java
  80. 19 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/param/CstDataSourceParam.java
  81. 17 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/param/CstSearchExportParam.java
  82. 59 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/param/CstSearchParam.java
  83. 378 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/CustomSearchService.java
  84. 17 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/Condition.java
  85. 20 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/ConditionFactory.java
  86. 25 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/DateCondition.java
  87. 18 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/DictCondition.java
  88. 53 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/NumberCondition.java
  89. 41 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/VarcharCondition.java
  90. 3 0
      vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/readme.md
  91. 262 0
      vseaf4.4-analyze/src/main/resources/mapper/CustomSearchDao.xml
  92. 40 0
      vseaf4.4-analyze/src/test/java/cn/com/victorysoft/analyze/Test.java
  93. 1 0
      vseaf4.4-analyze/src/test/java/cn/com/victorysoft/redme.txt
  94. 46 0
      vseaf4.4-calc/pom.xml
  95. 196 0
      vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/controller/DataCalcController.java
  96. 46 0
      vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/controller/IndexController.java
  97. 20 0
      vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/AbnormalDataSyncDao.java
  98. 20 0
      vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/AdjustDataSyncDao.java
  99. 16 0
      vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/ConditionDataSyncDao.java
  100. 51 0
      vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/DataSyncDao.java

+ 27 - 0
.gitignore

@@ -0,0 +1,27 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+/exprot/

+ 14 - 0
README.md

@@ -0,0 +1,14 @@
+# vseaf4.4-template 模板工程
+
+## 结构
+* `vseaf4.4-template-starter`:启动模块。主要作工程启动使用,也可放入业务逻辑。
+* `vseaf4.4-template-module`:业务模块,可多个。
+
+## 开发环境启动
+* 修改配置文件后,运行`vseaf4.4-template-starter`包中启动类`BusinessRunApplication`即可。
+* `BusinessRunApplication`类名可自定义修改。
+
+## 使用规则
+* 启动类`BusinessRunApplication`必须在`cn.com.victorysoft.business.{项目名}`目录下。
+* 修改及新建package时,必须以`cn.com.victorysoft.business.{项目名}`为前缀。   
+

BIN
export/045f6d72-02c3-4199-9cca-a6a1ea8d8075/洗井日报 .xlsx


BIN
export/052eade0-b20b-41f6-86b4-ae9e74bb2c91/洗井日报 .xlsx


BIN
export/06f33b74-0e52-4d7d-ad88-ef93cf5a7793/洗井日报 .xlsx


BIN
export/104e2656-48d4-4ddc-8a42-2afde2104430/洗井日报.xlsx


BIN
export/14270cee-a43c-4e33-85e7-5bb0cce38a3f/洗井日报 .xlsx


BIN
export/1e8e2e04-94da-4fac-ba16-09bd389a33ba/洗井日报 .xlsx


BIN
export/2954254b-5ae5-4d8d-954c-9b77d7488890/层段合格率统计表.xlsx


BIN
export/357b820d-b5df-4c2c-b707-0bbe158e707d/欠注管理统计表 .xlsx


BIN
export/3654ff44-d7f6-483b-aed7-effbe036d395/洗井日报 .xlsx


BIN
export/38bd834d-0748-457a-8941-d4509e0d8d6a/注水井分注层段合格率月报.xlsx


BIN
export/38d497e8-1a3e-4a58-9cab-bb75be16c936/洗井日报 .xlsx


BIN
export/3d5a582d-bba0-40fa-b0ba-39a8da676193/欠注管理统计表 .xlsx


BIN
export/4784c76e-2d40-45da-97da-9169e1fb75c9/欠注管理统计表 .xlsx


BIN
export/4ac8d745-a673-4059-8582-f48031271b2c/注水井分注层段合格率月报.xlsx


BIN
export/519dc4cd-2da5-46d5-a284-697773082f3d/洗井日报 .xlsx


BIN
export/51c5d2d0-401e-4e8f-948f-ef0ca1a1e5b1/洗井日报 .xlsx


BIN
export/54f7e3a5-4aa3-4420-8f08-66e76c1ddb97/洗井日报 .xlsx


BIN
export/564ce041-5bd4-400c-a07d-ee52a9fa0bdd/洗井日报 .xlsx


BIN
export/57eda5e8-6a05-49d1-ada0-bf109f983a64/洗井日报 .xlsx


BIN
export/64428d13-1615-44b8-831f-b1a0715bd9cd/洗井日报 .xlsx


BIN
export/673fe9f8-57f9-448c-865b-de07f3fa58f4/洗井日报 .xlsx


BIN
export/698598e4-24b1-466b-b4cc-69611615d19d/洗井日报 .xlsx


BIN
export/6b90bea2-9ed4-418b-944a-09285a45649c/层段合格率统计表.xlsx


BIN
export/6bafbd7b-fd87-463d-8a1b-1e901bf2a282/洗井日报 .xlsx


BIN
export/6c054ebb-3ade-4248-a16f-3cc6c99f4cc0/洗井日报 .xlsx


BIN
export/6e5e8c99-98f6-4074-bdab-bce5ad702d8d/洗井日报 .xlsx


BIN
export/6f39bbb1-7f38-4ebd-938b-93ef992894c3/洗井日报 .xlsx


BIN
export/6fefde60-f849-47a2-bcdb-2608fee54623/洗井日报 .xlsx


BIN
export/760786af-80a1-42c7-95b2-17a1f5eb143b/洗井日报 .xlsx


BIN
export/769e547a-34a0-490e-a148-ba54f5bc38d7/洗井日报 .xlsx


BIN
export/793ad2c3-e682-404f-9575-068eb01f9022/洗井日报 .xlsx


BIN
export/7b5ef502-ff7a-403a-a5a7-357e45594107/欠注井管理.xlsx


BIN
export/81e76952-1bfd-4cb6-bdd1-4c74a5a0bdf2/洗井日报 .xlsx


BIN
export/84404694-a3cb-4b50-af0f-e08157765980/洗井日报 .xlsx


BIN
export/8b052558-c144-4727-a2df-02d3a3209394/洗井日报 .xlsx


BIN
export/8f55230f-7881-46f7-bc8f-f5a8d3030bdb/洗井日报 .xlsx


BIN
export/95da5e32-dfc1-45e3-9216-97c6fe56f7da/洗井日报 .xlsx


BIN
export/980dfd79-9cf4-404b-b3bc-3ceb45ac3bff/洗井日报 .xlsx


BIN
export/9b7362a7-a0a1-490e-830a-ed7ea87b1849/洗井日报 .xlsx


BIN
export/a17e0584-d191-4af4-8bab-d535a5e8f507/洗井日报 .xlsx


BIN
export/a3700103-8662-46db-8e4a-000ea65fcfa7/欠注管理统计表 .xlsx


BIN
export/a8b0e723-fa14-49f5-ba52-f482f674d83b/洗井日报 .xlsx


BIN
export/a8d10991-b4e4-490c-b5c9-94942b862ee5/洗井日报.xlsx


BIN
export/aea631a3-d3d6-4cd0-85ef-a663a04b1087/洗井日报 .xlsx


BIN
export/bf9ac8b5-59cf-45b2-98aa-348a35f30cbb/洗井日报 .xlsx


BIN
export/c1efa2e4-f2ca-4c1a-916c-2d0f94be077e/欠注管理统计表 .xlsx


BIN
export/c6c6c7b7-df3b-400a-848b-17854ed7bf68/洗井日报.xlsx


BIN
export/c91d9e38-16a7-45b0-87e9-6408c6c3bcc4/洗井日报 .xlsx


BIN
export/c92a9984-62d6-48c3-b4fd-7f6ca444cfe8/洗井日报 .xlsx


BIN
export/cf30fa5a-7fbd-43c1-a833-ea1f6b9267d8/洗井日报 .xlsx


BIN
export/cf4e6bd4-f8e5-4308-8a44-d67b3a57303c/洗井日报 .xlsx


BIN
export/d7906a54-5b33-45f9-9399-536384282ad4/洗井日报 .xlsx


BIN
export/dfcde071-559a-4e61-bdab-e2d933a904dc/洗井日报 .xlsx


BIN
export/e302ef02-7f60-498e-a77c-501140f4bcd5/洗井日报 .xlsx


BIN
export/f60e126d-b243-437d-bafb-98c9426e90b5/层段合格率统计表.xlsx


+ 2 - 0
lombok.config

@@ -0,0 +1,2 @@
+config.stopBubbling=true
+lombok.equalsAndHashCode.callSuper=call

+ 171 - 0
pom.xml

@@ -0,0 +1,171 @@
+<?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>cn.com.victorysoft</groupId>
+	<artifactId>vseaf-service-template</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.1.1.RELEASE</version>
+		<relativePath/>
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+		<vseaf.template.version>1.0.0-SNAPSHOT</vseaf.template.version>
+		<druid.version>1.1.18</druid.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>cn.com.victorysoft</groupId>
+			<artifactId>vseaf-spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.mybatis</groupId>
+			<artifactId>mybatis</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.github.pagehelper</groupId>
+			<artifactId>pagehelper-spring-boot-starter</artifactId>
+			<version>1.3.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>1.18.4</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
+			<version>1.9.4</version>
+		</dependency>
+		<dependency>
+			<groupId>net.sf.json-lib</groupId>
+			<artifactId>json-lib</artifactId>
+			<version>2.4</version>
+			<classifier>jdk15</classifier>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>4.1.2</version>
+		</dependency>
+		<!-- jwt -->
+		<dependency>
+			<groupId>com.auth0</groupId>
+			<artifactId>java-jwt</artifactId>
+			<version>3.7.0</version>
+		</dependency>
+
+		<!-- 打war包时加入此项, 告诉spring-boot tomcat相关jar包用外部的,不要打进去 -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-tomcat</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<!-- springboot自带的tomcat并没有携带tomcat-embed-jasper的依赖,如果不引入tomcat-embed-jasper依赖,使用SPringboot启动项目则会无法成功-->
+		<dependency>
+			<groupId>org.apache.tomcat.embed</groupId>
+			<artifactId>tomcat-embed-jasper</artifactId>
+		</dependency>
+	</dependencies>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>cn.com.victorysoft</groupId>
+				<artifactId>vseaf-spring-boot-dependencies</artifactId>
+				<version>4.4.1</version>
+				<scope>import</scope>
+				<type>pom</type>
+			</dependency>
+
+			<dependency>
+				<groupId>com.alibaba</groupId>
+				<artifactId>druid-spring-boot-starter</artifactId>
+				<version>${druid.version}</version>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<modules>
+		<module>vseaf4.4-sys</module>
+		<module>vseaf4.4-indicator</module>
+		<module>vseaf4.4-condition</module>
+		<module>vseaf4.4-cyyzs</module>
+		<module>vseaf4.4-technology</module>
+		<module>vseaf4.4-calc</module>
+		<module>vseaf4.4-analyze</module>
+		<module>vseaf4.4-template-starter</module>
+		<module>vseaf4.4-template-starter-dev</module>
+	</modules>
+
+	<build>
+		<resources>
+			<resource>
+				<directory>src/main/resources</directory>
+			</resource>
+			<resource>
+				<directory>src/main/webapp</directory>
+				<targetPath>META-INF/resources</targetPath>
+				<includes>
+					<include>**/**</include>
+				</includes>
+			</resource>
+			<resource>
+				<directory>src/main/webapp</directory>
+				<targetPath>BOOT-INF/lib/</targetPath>
+				<includes>
+					<include>**/*.jar</include>
+				</includes>
+			</resource>
+		</resources>
+		<plugins>
+			<plugin>
+				<groupId>com.spotify</groupId>
+				<artifactId>dockerfile-maven-plugin</artifactId>
+				<version>1.3.6</version>
+				<configuration>
+					<repository>${project.artifactId}</repository>
+					<buildArgs>
+						<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+						<JAR_FILE_NAME>${project.artifactId}</JAR_FILE_NAME>
+						<JAR_VERSION>${project.version}</JAR_VERSION>
+					</buildArgs>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<repositories>
+		<repository>
+			<id>vseaf-repository</id>
+			<name>Victorysoft Nexus Repository</name>
+			<url>http://10.68.7.181:8081/repository/maven-public/</url>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	</repositories>
+
+<!--	<repositories>-->
+<!--		<repository>-->
+<!--			<id>public</id>-->
+<!--			<name>aliyun nexus</name>-->
+<!--			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>-->
+<!--			<releases>-->
+<!--				<enabled>true</enabled>-->
+<!--			</releases>-->
+<!--		</repository>-->
+<!--	</repositories>-->
+
+</project>

+ 32 - 0
vseaf4.4-analyze/pom.xml

@@ -0,0 +1,32 @@
+<?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>cn.com.victorysoft</groupId>
+	<artifactId>vseaf4.4-analyze</artifactId>
+	<packaging>jar</packaging>
+
+	<parent>
+		<groupId>cn.com.victorysoft</groupId>
+		<artifactId>vseaf-service-template</artifactId>
+		<version>1.0.0-SNAPSHOT</version>
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>cn.com.victorysoft</groupId>
+			<artifactId>vseaf4.4-sys</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
+
+</project>

+ 6 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/constant/CstDataTypeEnum.java

@@ -0,0 +1,6 @@
+package cn.com.victorysoft.business.analyze.constant;
+
+public enum CstDataTypeEnum {
+
+    VARCHAR, DATE, NUMBER, DICT;
+}

+ 9 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/constant/CstGroupType.java

@@ -0,0 +1,9 @@
+package cn.com.victorysoft.business.analyze.constant;
+
+public class CstGroupType {
+
+    public final static String SUM = "sum";
+    public final static String AVG = "avg";
+    public final static String MAX = "max";
+    public final static String MIN = "min";
+}

+ 16 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/constant/CstOperator.java

@@ -0,0 +1,16 @@
+package cn.com.victorysoft.business.analyze.constant;
+
+public class CstOperator {
+
+    public final static String EQUAL = "equal";
+    public final static String NOT_EQUAL = "not_equal";
+    public final static String LIKE = "like";
+    public final static String NOT_LIKE = "not_like";
+    public final static String NULL = "null";
+    public final static String NOT_NULL = "not_null";
+    public final static String LT = "lt";
+    public final static String LTE = "lte";
+    public final static String GT = "gt";
+    public final static String GTE = "gte";
+    public final static String BETWEEN = "between";
+}

+ 142 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/controller/CustomSearchController.java

@@ -0,0 +1,142 @@
+package cn.com.victorysoft.business.analyze.controller;
+
+import cn.com.victorysoft.business.analyze.entity.*;
+import cn.com.victorysoft.business.analyze.param.CstDataSourceParam;
+import cn.com.victorysoft.business.analyze.param.CstSearchExportParam;
+import cn.com.victorysoft.business.analyze.param.CstSearchParam;
+import cn.com.victorysoft.business.analyze.service.CustomSearchService;
+import cn.com.victorysoft.business.sys.entity.ExportResult;
+import cn.com.victorysoft.business.util.ExcelUtils;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "自定义查询")
+@RestController
+@RequestMapping("analyze/custom")
+public class CustomSearchController {
+
+    @Resource
+    private CustomSearchService customSearchService;
+
+    @GetMapping("/dict")
+    @ApiOperation(value = "查询附录数据", notes = "默认只返回前50条,前端做成使用searchText搜索")
+    public List<CstDictData> dict(CstDataSourceParam param) {
+        return customSearchService.selectDictData(param);
+    }
+
+    @GetMapping("/templates")
+    @ApiOperation("查询模板列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "unitcode", value = "单位代码", paramType = "query", required = true)
+    })
+    public List<CstTemplate> templates(String unitcode) {
+        return customSearchService.selectTemplates(unitcode);
+    }
+
+    @GetMapping("/template/{id}")
+    @ApiOperation("查询模板对象")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "模板ID", paramType = "path", required = true)
+    })
+    public CstTemplate getTemplate(@PathVariable("id") String id) {
+        return customSearchService.selectTemplate(id);
+    }
+
+    @DeleteMapping("/template/{id}")
+    @ApiOperation("删除模板")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "模板ID", paramType = "path", required = true)
+    })
+    public void deleteTemplate(@PathVariable("id") String id) {
+        customSearchService.deleteTemplate(id);
+    }
+
+    @PostMapping("/template")
+    @ApiOperation("新增模板")
+    public void insertTemplate(@RequestBody CstTemplate template) {
+        customSearchService.insertTemplate(template);
+    }
+
+    @PutMapping("/template")
+    @ApiOperation("更新模板")
+    public void updateTemplate(@RequestBody CstTemplate template) {
+        customSearchService.updateTemplate(template);
+    }
+
+    @PostMapping("/template/share/{id}")
+    @ApiOperation("分享模板")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "模板ID", paramType = "path", required = true),
+            @ApiImplicitParam(name = "unitcodes", value = "单位代码数组", paramType = "array", required = true),
+    })
+    public void shareTemplate(@PathVariable("id") String id, String[] unitcodes) {
+        customSearchService.shareTemplate(id, unitcodes);
+    }
+
+    @GetMapping("/template/share/{id}")
+    @ApiOperation("查询模板分享单位")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "模板ID", paramType = "path", required = true)
+    })
+    public CstTemplateShareUnit getShareUnits(@PathVariable("id") String id) {
+        return customSearchService.selectShareUnits(id);
+    }
+
+    @GetMapping("/tables")
+    @ApiOperation("查询数据表")
+    public List<CstTable> tables() {
+        return customSearchService.selectTables();
+    }
+
+    @GetMapping("/table/relation/{id}")
+    @ApiOperation("查询关联表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "数据表ID", paramType = "path", required = true),
+    })
+    public List<CstTable> relateTables(@PathVariable("id") String id) {
+        return customSearchService.selectRelateTables(id);
+    }
+
+    @GetMapping("/table/indicator/{id}")
+    @ApiOperation("查询数据表指标")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "数据表ID", paramType = "path", required = true),
+    })
+    public List<CstTableIndicator> tableIndicators(@PathVariable("id") String id) {
+        return customSearchService.selectTableIndicators(id);
+    }
+
+    @GetMapping("/indicator/{tableType}")
+    @ApiOperation("根据表类型查询指标")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "tableType", value = "表类型", paramType = "path", required = true),
+            @ApiImplicitParam(name = "pageNum", value = "页码", paramType = "query", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "每页条数", paramType = "query", required = true),
+            @ApiImplicitParam(name = "searchField", value = "查询文本", paramType = "query", required = false),
+    })
+    public PageInfo<CstIndicator> indicators(@PathVariable("tableType") String tableType, Integer pageNum, Integer pageSize, String searchField) {
+        return customSearchService.selectIndicators(tableType, pageNum, pageSize, searchField);
+    }
+
+    @PostMapping("/search")
+    @ApiOperation(value = "查询数据结果")
+    public PageInfo<Map<String, Object>> search(@RequestBody CstSearchParam param) {
+        return customSearchService.search(param);
+    }
+
+    @PostMapping("/export")
+    @ApiOperation(value = "导出数据结果")
+    public ExportResult export(@RequestBody CstSearchExportParam param) {
+        List<Map<String, Object>> list = customSearchService.searchList(param, false);
+        return ExcelUtils.exportMap(param.getColumnConfig(), list, param.getFileName());
+    }
+
+}

+ 160 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/dao/CustomSearchDao.java

@@ -0,0 +1,160 @@
+package cn.com.victorysoft.business.analyze.dao;
+
+import cn.com.victorysoft.business.analyze.entity.*;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface CustomSearchDao {
+
+    /**
+     * 根据ID查询数据源
+     */
+    CstDataSource selectDataSourceById(String dataSourceId);
+
+    /**
+     * 查询附录数据
+     */
+    List<CstDictData> selectDictData(@Param("dataSource") CstDataSource dataSource, @Param("searchText") String searchText);
+
+    /**
+     * 查询单位的模板列表
+     */
+    List<CstTemplate> selectTemplates(String unitcode);
+
+    /**
+     * 查询模板对象
+     */
+    CstTemplate selectTemplate(String id);
+
+    /**
+     * 删除模板指标
+     */
+    int deleteTemplate(String id);
+
+    /**
+     * 插入模板指标
+     */
+    void insertTemplate(CstTemplate template);
+
+    /**
+     * 更新模板指标
+     */
+    void updateTemplate(CstTemplate template);
+
+    /**
+     * 查询模板数据表
+     */
+    List<CstTemplateTable> selectTemplateTables(String templateId);
+
+    /**
+     * 删除模板数据表
+     */
+    int deleteTemplateTables(String templateId);
+
+    /**
+     * 插入模板数据表
+     */
+    void insertTemplateTables(List<CstTemplateTable> indicators);
+
+    /**
+     * 查询模板指标
+     */
+    List<CstTemplateIndicator> selectTemplateIndicators(String templateId);
+
+    /**
+     * 删除模板指标
+     */
+    int deleteTemplateIndicators(String templateId);
+
+    /**
+     * 插入模板指标
+     */
+    void insertTemplateIndicators(List<CstTemplateIndicator> indicators);
+
+    /**
+     * 查询模板条件列表
+     */
+    List<CstTemplateCondition> selectTemplateConditions(String templateId);
+
+    /**
+     * 查询模板条件
+     */
+    CstTemplateCondition selectTemplateCondition(@Param("templateId") String templateId, @Param("indicatorId") String indicatorId);
+
+    /**
+     * 删除模板条件
+     */
+    int deleteTemplateConditions(String templateId);
+
+    /**
+     * 插入模板条件
+     */
+    void insertTemplateConditions(List<CstTemplateCondition> conditions);
+
+    /**
+     * 查询模板共享
+     */
+    List<CstTemplateShare> selectTemplateShares(String templateId);
+
+    /**
+     * 删除模板共享
+     */
+    int deleteTemplateShares(String templateId);
+
+    /**
+     * 插入模板共享
+     */
+    void insertTemplateShares(List<CstTemplateShare> shares);
+
+    /**
+     * 查询数据表
+     */
+    List<CstTable> selectTables();
+
+    /**
+     * 查询数据表对象
+     */
+    CstTable selectTable(String tableId);
+
+    /**
+     * 查询关联表
+     */
+    List<CstTable> selectRelateTables(String tableId);
+
+    /**
+     * 查询数据表指标列表
+     */
+    List<CstTableIndicator> selectTableIndicators(String tableId);
+
+    /**
+     * 查询数据表指标
+     */
+    CstTableIndicator selectTableIndicator(String id);
+
+    /**
+     * 查询查询类型
+     */
+    List<CstQueryType> selectQueryTypes();
+
+    /**
+     * 查询数据表关联
+     */
+    List<CstTableRelation> selectTableRelations(List<String> mainTableIds);
+
+    /**
+     * 查询数据表关联
+     */
+    List<Map<String, Object>> search(String sql);
+
+    /**
+     * 根据报表类型查询指标
+     */
+    List<CstTableIndicator> selectByIndicators(@Param("tableType") String tableType, @Param("indicators") List<CstIndicator> indicators);
+
+    List<CstIndicator> selectIndicators(@Param("tableType") String tableType, @Param("searchField") String searchField);
+
+}

+ 35 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstDataSource.java

@@ -0,0 +1,35 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("附录数据源")
+@Data
+public class CstDataSource implements Serializable {
+
+    @ApiModelProperty("数据源ID")
+    private String id;
+
+    @ApiModelProperty("数据源名称")
+    private String name;
+
+    @ApiModelProperty("附录表")
+    private String tableName;
+
+    @ApiModelProperty("值字段")
+    private String valueColumn;
+
+    @ApiModelProperty("显示字段")
+    private String labelColumn;
+
+    @ApiModelProperty("排序字段")
+    private String orderColumn;
+
+    @ApiModelProperty("过滤sql")
+    private String filterSql;
+
+    private static final long serialVersionUID = 1L;
+}

+ 20 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstDataType.java

@@ -0,0 +1,20 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("数据类型")
+@Data
+public class CstDataType implements Serializable {
+
+    @ApiModelProperty("类型ID")
+    private String id;
+
+    @ApiModelProperty("类型名称")
+    private String name;
+
+    private static final long serialVersionUID = 1L;
+}

+ 16 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstDictData.java

@@ -0,0 +1,16 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("附录数据")
+@Data
+public class CstDictData {
+
+    @ApiModelProperty("值")
+    private String value;
+
+    @ApiModelProperty("显示文本")
+    private String label;
+}

+ 30 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstIndicator.java

@@ -0,0 +1,30 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@ApiModel("数据指标")
+@Data
+public class CstIndicator implements Serializable {
+
+    @ApiModelProperty("指标ID")
+    private String id;
+
+    @ApiModelProperty("指标名称")
+    private String name;
+
+    @ApiModelProperty("计量单位")
+    private String unit;
+
+    @ApiModelProperty("选中的数据表指标ID")
+    private String tableIndicatorId;
+
+    @ApiModelProperty("数据表指标")
+    private List<CstTableIndicator> tableIndicators;
+
+    private static final long serialVersionUID = 1L;
+}

+ 26 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstQueryType.java

@@ -0,0 +1,26 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("查询方式")
+@Data
+public class CstQueryType implements Serializable {
+
+    @ApiModelProperty("查询方式ID")
+    private String id;
+
+    @ApiModelProperty("查询方式名称")
+    private String name;
+
+    @ApiModelProperty("排序")
+    private Short orderNo;
+
+    @ApiModelProperty("数据类型ID")
+    private String dataTypeId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 26 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTable.java

@@ -0,0 +1,26 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("数据表")
+@Data
+public class CstTable implements Serializable {
+
+    @ApiModelProperty("表代码")
+    private String id;
+
+    @ApiModelProperty("表名称")
+    private String name;
+
+    @ApiModelProperty("表类型(STATIC/DAILY/MONTH)")
+    private String tableType;
+
+    @ApiModelProperty("单位查询条件")
+    private String unitCondition;
+
+    private static final long serialVersionUID = 1L;
+}

+ 60 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTableIndicator.java

@@ -0,0 +1,60 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("数据表指标")
+@Data
+public class CstTableIndicator implements Serializable {
+
+    @ApiModelProperty("ID")
+    private String id;
+
+    @ApiModelProperty("指标ID")
+    private String indicatorId;
+
+    @ApiModelProperty("指标名称")
+    private String name;
+
+    @ApiModelProperty("表代码")
+    private String tableId;
+
+    @ApiModelProperty("表名称")
+    private String tableName;
+
+    @ApiModelProperty("显示字段")
+    private String labelColumn;
+
+    @ApiModelProperty("数据类型ID")
+    private String dataTypeId;
+
+    @ApiModelProperty("公式")
+    private String formula;
+
+    @ApiModelProperty("计量单位")
+    private String unit;
+
+    @ApiModelProperty("附录数据源ID")
+    private String dataSourceId;
+
+    @ApiModelProperty("值字段")
+    private String valueColumn;
+
+    @ApiModelProperty("排序")
+    private Short orderNo;
+
+    @ApiModelProperty("查询类型")
+    private String queryTypeId;
+
+    @ApiModelProperty("是否默认指标")
+    private String defaultIndicator;
+
+    @ApiModelProperty("可选查询类型")
+    private List<CstQueryType> queryTypes;
+
+    private static final long serialVersionUID = 1L;
+}

+ 26 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTableRelation.java

@@ -0,0 +1,26 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel("数据表关联")
+@Data
+public class CstTableRelation implements Serializable {
+
+    @ApiModelProperty("主表ID")
+    private String mainTableId;
+
+    @ApiModelProperty("关联表ID")
+    private String relationTableId;
+
+    @ApiModelProperty("主表字段")
+    private String mainTableColumn;
+
+    @ApiModelProperty("关联表字段")
+    private String relationTableColumn;
+
+    private static final long serialVersionUID = 1L;
+}

+ 43 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplate.java

@@ -0,0 +1,43 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("模板")
+@Data
+public class CstTemplate implements Serializable {
+
+    @ApiModelProperty("ID")
+    private String id;
+
+    @ApiModelProperty("模板名称")
+    private String name;
+
+    @ApiModelProperty("单位代码")
+    private String unitcode;
+
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty("是否使用统计信息")
+    private boolean useGroup;
+
+    @ApiModelProperty("表类型")
+    private String tableType;
+
+    @ApiModelProperty("模板数据表")
+    private List<CstTemplateTable> tables;
+
+    @ApiModelProperty("数据指标")
+    private List<CstTemplateIndicator> indicators;
+
+    @ApiModelProperty("查询条件")
+    private List<CstTemplateCondition> conditions;
+
+    private static final long serialVersionUID = 1L;
+}

+ 38 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateCondition.java

@@ -0,0 +1,38 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("模板查询条件")
+@Data
+public class CstTemplateCondition implements Serializable {
+
+    @ApiModelProperty("模板ID")
+    private String templateId;
+
+    @ApiModelProperty("指标ID")
+    private String indicatorId;
+
+    @ApiModelProperty("全局指标ID")
+    private String globalIndicatorId;
+
+    @ApiModelProperty("查询方式ID")
+    private String queryTypeId;
+
+    @ApiModelProperty("排序")
+    private Short orderNo;
+
+    @ApiModelProperty("指标名称")
+    private String indicatorName;
+
+    @ApiModelProperty("数据类型ID")
+    private String dataTypeId;
+
+    @ApiModelProperty("附录数据源ID")
+    private String dataSourceId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 44 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateIndicator.java

@@ -0,0 +1,44 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("模板指标")
+@Data
+public class CstTemplateIndicator implements Serializable {
+
+    @ApiModelProperty("ID")
+    private String id;
+
+    @ApiModelProperty("模板ID")
+    private String templateId;
+
+    @ApiModelProperty("指标ID")
+    private String indicatorId;
+
+    @ApiModelProperty("排序")
+    private Short orderNo;
+
+    @ApiModelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("公式")
+    private String formula;
+
+    @ApiModelProperty("公式文本")
+    private String formulaText;
+
+    @ApiModelProperty("计量单位")
+    private String unit;
+
+    @ApiModelProperty("统计方式")
+    private String groupType;
+
+    @ApiModelProperty("指标名称")
+    private CstTableIndicator indicator;
+
+    private static final long serialVersionUID = 1L;
+}

+ 27 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateShare.java

@@ -0,0 +1,27 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("模板共享")
+@Data
+public class CstTemplateShare implements Serializable {
+
+    public CstTemplateShare() {}
+
+    public CstTemplateShare(String templateId, String unitcode) {
+        this.templateId = templateId;
+        this.unitcode = unitcode;
+    }
+
+    @ApiModelProperty("模板ID")
+    private String templateId;
+
+    @ApiModelProperty("单位代码")
+    private String unitcode;
+
+    private static final long serialVersionUID = 1L;
+}

+ 14 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateShareUnit.java

@@ -0,0 +1,14 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import cn.com.victorysoft.business.sys.entity.SysUnitinfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("模板共享单位")
+@Data
+public class CstTemplateShareUnit extends SysUnitinfo {
+
+    @ApiModelProperty("是否共享")
+    private boolean shared;
+}

+ 26 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/entity/CstTemplateTable.java

@@ -0,0 +1,26 @@
+package cn.com.victorysoft.business.analyze.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel("模板数据表")
+@Data
+public class CstTemplateTable implements Serializable {
+
+    @ApiModelProperty("模板ID")
+    private String templateId;
+
+    @ApiModelProperty("数据表ID")
+    private String tableId;
+
+    @ApiModelProperty("排序")
+    private Short orderNo;
+
+    @ApiModelProperty("数据表")
+    private CstTable table;
+
+    private static final long serialVersionUID = 1L;
+}

+ 19 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/param/CstDataSourceParam.java

@@ -0,0 +1,19 @@
+package cn.com.victorysoft.business.analyze.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("自定义查询数据源参数")
+@Data
+public class CstDataSourceParam {
+
+    @ApiModelProperty("数据源ID")
+    private String dataSourceId;
+
+    @ApiModelProperty("单位代码")
+    private String unitcode;
+
+    @ApiModelProperty("模糊搜索文本")
+    private String searchText;
+}

+ 17 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/param/CstSearchExportParam.java

@@ -0,0 +1,17 @@
+package cn.com.victorysoft.business.analyze.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import net.sf.json.JSONArray;
+
+@ApiModel("自定义查询参数")
+@Data
+public class CstSearchExportParam extends CstSearchParam {
+
+    @ApiModelProperty("文件名称")
+    private String fileName = "导出文件";
+
+    @ApiModelProperty("导出表头")
+    private JSONArray columnConfig;
+}

+ 59 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/param/CstSearchParam.java

@@ -0,0 +1,59 @@
+package cn.com.victorysoft.business.analyze.param;
+
+import cn.com.victorysoft.business.sys.param.PageParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel("自定义查询参数")
+@Data
+public class CstSearchParam extends PageParam {
+
+    @ApiModelProperty("单位代码")
+    private String unitcode;
+
+    @ApiModelProperty("模板ID")
+    private String templateId;
+
+    @ApiModelProperty("是否统计")
+    private boolean useGroup;
+
+    @ApiModelProperty("查询条件")
+    private List<CstConditionValue> values;
+
+    @ApiModelProperty("统计方式")
+    private List<CstGroupSetting> groupSettings;
+
+    @ApiModel("查询条件值")
+    @Data
+    public static class CstConditionValue {
+
+        @ApiModelProperty("查询条件指标ID")
+        private String indicatorId;
+
+        @ApiModelProperty("操作符")
+        private String operator;
+
+        @ApiModelProperty("数据类型")
+        private String dataTypeId;
+
+        @ApiModelProperty(value = "查询条件值1", notes = "日期和数字转为字符串,日期格式传yyyy-MM-dd")
+        private String value1;
+
+        @ApiModelProperty(value = "查询条件值2", notes = "日期和数字转为字符串,日期格式传yyyy-MM-dd")
+        private String value2;
+    }
+
+    @ApiModel("统计设置")
+    @Data
+    public static class CstGroupSetting {
+
+        @ApiModelProperty("指标ID")
+        private String id;
+
+        @ApiModelProperty("统计方式")
+        private String groupType;
+    }
+}

+ 378 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/CustomSearchService.java

@@ -0,0 +1,378 @@
+package cn.com.victorysoft.business.analyze.service;
+
+import cn.com.victorysoft.business.analyze.constant.CstDataTypeEnum;
+import cn.com.victorysoft.business.analyze.constant.CstGroupType;
+import cn.com.victorysoft.business.analyze.dao.CustomSearchDao;
+import cn.com.victorysoft.business.analyze.entity.*;
+import cn.com.victorysoft.business.analyze.param.CstDataSourceParam;
+import cn.com.victorysoft.business.analyze.param.CstSearchExportParam;
+import cn.com.victorysoft.business.analyze.param.CstSearchParam;
+import cn.com.victorysoft.business.analyze.service.condition.Condition;
+import cn.com.victorysoft.business.analyze.service.condition.ConditionFactory;
+import cn.com.victorysoft.business.constant.UnitLevel;
+import cn.com.victorysoft.business.sys.entity.SysUnitinfo;
+import cn.com.victorysoft.business.sys.service.SysBaseService;
+import cn.com.victorysoft.business.util.BeanUtils;
+import cn.com.victorysoft.business.util.PageUtils;
+import cn.com.victorysoft.business.util.StringUtils;
+import cn.com.victorysoft.vseaf.core.util.IDUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.DigestUtils;
+
+import javax.annotation.Resource;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigInteger;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class CustomSearchService {
+
+    @Resource
+    private CustomSearchDao customSearchDao;
+
+    @Resource
+    private SysBaseService sysBaseService;
+
+    /**
+     * 查询附录数据
+     */
+    public List<CstDictData> selectDictData(CstDataSourceParam param) {
+        CstDataSource dataSource = customSearchDao.selectDataSourceById(param.getDataSourceId());
+        if (dataSource == null) return null;
+        if (StringUtils.isNotEmpty(dataSource.getFilterSql())) {
+            dataSource.setFilterSql(dataSource.getFilterSql().replaceAll("#\\{unitcode}", "'" + param.getUnitcode() + "'"));
+        }
+        PageHelper.startPage(1, 50);
+        return customSearchDao.selectDictData(dataSource, param.getSearchText());
+    }
+
+    /**
+     * 查询单位的模板列表
+     */
+    public List<CstTemplate> selectTemplates(String unitcode){
+        return customSearchDao.selectTemplates(unitcode);
+    }
+
+    /**
+     * 查询模板对象
+     */
+    public CstTemplate selectTemplate(String id){
+        CstTemplate template = customSearchDao.selectTemplate(id);
+        List<CstTemplateTable> tables = customSearchDao.selectTemplateTables(id);
+        List<CstTemplateIndicator> indicators = customSearchDao.selectTemplateIndicators(id);
+        List<CstTemplateCondition> conditions = customSearchDao.selectTemplateConditions(id);
+        template.setTables(tables);
+        template.setIndicators(indicators);
+        template.setConditions(conditions);
+        return template;
+    }
+
+    /**
+     * 新增模板对象
+     */
+    @Transactional
+    public void insertTemplate(CstTemplate template){
+        template.setId(IDUtils.getUUID32());
+        template.setUpdateTime(new Date());
+        customSearchDao.insertTemplate(template);
+        this.insertTemplateData(template);
+    }
+
+    /**
+     * 更新模板对象
+     */
+    @Transactional
+    public void updateTemplate(CstTemplate template){
+        customSearchDao.updateTemplate(template);
+        customSearchDao.deleteTemplateTables(template.getId());
+        customSearchDao.deleteTemplateIndicators(template.getId());
+        customSearchDao.deleteTemplateConditions(template.getId());
+        this.insertTemplateData(template);
+    }
+
+    /**
+     * 插入模板数据
+     */
+    @Transactional
+    public void insertTemplateData(CstTemplate template) {
+        template.getTables().forEach(item -> item.setTemplateId(template.getId()));
+        customSearchDao.insertTemplateTables(template.getTables());
+        template.getIndicators().forEach(item -> {
+            item.setTemplateId(template.getId());
+            item.setId(this.generateId());
+        });
+        customSearchDao.insertTemplateIndicators(template.getIndicators());
+        if (template.getConditions().size() > 0) {
+            template.getConditions().forEach(item -> item.setTemplateId(template.getId()));
+            customSearchDao.insertTemplateConditions(template.getConditions());
+        }
+    }
+
+    /**
+     * 生成模板指标的ID,查询时作为查询字段名,因为Oracle限制字段名最大长度为30,所以将16进制转为32进制,较短
+     */
+    private String generateId() {
+        BigInteger i = new BigInteger(IDUtils.getUUID32(), 16);
+        return "A" + i.toString(32).toUpperCase();
+    }
+
+    /**
+     * 删除模板对象
+     */
+    @Transactional
+    public void deleteTemplate(String templateId){
+        customSearchDao.deleteTemplateTables(templateId);
+        customSearchDao.deleteTemplateIndicators(templateId);
+        customSearchDao.deleteTemplateConditions(templateId);
+        customSearchDao.deleteTemplateShares(templateId);
+        customSearchDao.deleteTemplate(templateId);
+    }
+
+    /**
+     * 共享模板对象
+     */
+    @Transactional
+    public void shareTemplate(String templateId, String[] unitcodes){
+        customSearchDao.deleteTemplateShares(templateId);
+        List<CstTemplateShare> shares = Arrays.stream(unitcodes).map(item -> new CstTemplateShare(templateId, item))
+                .collect(Collectors.toList());
+        customSearchDao.insertTemplateShares(shares);
+    }
+
+    /**
+     * 查询共享单位
+     */
+    public CstTemplateShareUnit selectShareUnits(String templateId){
+        CstTemplate template = customSearchDao.selectTemplate(templateId);
+        if (template == null) return null;
+        String unitcode = template.getUnitcode();
+        SysUnitinfo unitinfo = sysBaseService.selectUnitByCode(unitcode);
+        int level = unitinfo.getUnitlevel().intValue();
+        String rootUnitCode = unitcode;
+        // 管理区用户可共享到厂
+        if (UnitLevel.AREA_LEVEL == level) {
+            rootUnitCode = unitinfo.getPUnitcode();
+        }
+        List<SysUnitinfo> unitList = null;
+        if (UnitLevel.COMPANY_LEVEL == level || UnitLevel.AREA_LEVEL == level) {
+            unitList = sysBaseService.selectUnitNodeListLevel3(rootUnitCode);
+        }else if (UnitLevel.GROUP_LEVEL == level) {
+            unitList = sysBaseService.selectUnitNodeListLevel2(rootUnitCode);
+        }
+        if (unitList == null) return null;
+        // 查询模板共享单位
+        List<CstTemplateShare> shares = customSearchDao.selectTemplateShares(templateId);
+        Set<String> unitCodeSet = shares.stream().map(CstTemplateShare::getUnitcode).collect(Collectors.toSet());
+        List<CstTemplateShareUnit> shareUnits = unitList.stream().map(item -> {
+            CstTemplateShareUnit shareUnit = new CstTemplateShareUnit();
+            try {
+                BeanUtils.copyProperties(shareUnit, item);
+                shareUnit.setShared(unitCodeSet.contains(item.getUnitcode()));
+            } catch (IllegalAccessException | InvocationTargetException e) {
+                e.printStackTrace();
+            }
+            return shareUnit;
+        }).collect(Collectors.toList());
+        return (CstTemplateShareUnit) sysBaseService.buildUnitTree(shareUnits);
+    }
+
+    /**
+     * 查询数据表
+     */
+    public List<CstTable> selectTables() {
+        return customSearchDao.selectTables();
+    }
+
+    /**
+     * 查询关联表
+     */
+    public List<CstTable> selectRelateTables(String tableId) {
+        return customSearchDao.selectRelateTables(tableId);
+    }
+
+    /**
+     * 查询数据表指标
+     */
+    public List<CstTableIndicator> selectTableIndicators(String tableId) {
+        // 查询查询类型
+        List<CstQueryType> queryTypes = customSearchDao.selectQueryTypes();
+        Map<String, List<CstQueryType>> queryTypeMap = queryTypes.stream().collect(Collectors.groupingBy(CstQueryType::getDataTypeId));
+        // 查询指标
+        List<CstTableIndicator> indicators = customSearchDao.selectTableIndicators(tableId);
+        // 设置指标的查询方式列表
+        indicators.forEach(item -> {
+            item.setQueryTypes(queryTypeMap.get(item.getDataTypeId()));
+            if (StringUtils.isEmpty(item.getQueryTypeId()) && item.getQueryTypes() != null) {
+                item.setQueryTypeId(item.getQueryTypes().get(0).getDataTypeId());
+            }
+        });
+        return indicators;
+    }
+
+    /**
+     * 根据报表类型查询指标
+     */
+    public PageInfo<CstIndicator> selectIndicators(String tableType, Integer pageNum, Integer pageSize, String searchField) {
+        PageHelper.startPage(pageNum, pageSize);
+        // 根据tableType查询CstIndicator
+        List<CstIndicator> result = customSearchDao.selectIndicators(tableType, searchField);
+        // 有对应数据表时才去查询指标
+        if (result.size() > 0) {
+            // 根据result查询CstTableIndicator
+            List<CstTableIndicator> tableIndicators = customSearchDao.selectByIndicators(tableType, result);
+
+            for (CstTableIndicator tableIndicator : tableIndicators) {
+                CstIndicator indicator = null;
+                for (CstIndicator ci : result) {
+                    if (ci.getId().equals(tableIndicator.getIndicatorId())) {
+                        indicator = ci;
+                        break;
+                    }
+                }
+                if (indicator == null) {
+                    indicator = new CstIndicator();
+                    indicator.setId(tableIndicator.getIndicatorId());
+                    indicator.setName(tableIndicator.getName());
+                    indicator.setUnit(tableIndicator.getUnit());
+                    indicator.setTableIndicatorId(tableIndicator.getId());
+                    indicator.setTableIndicators(new ArrayList<>());
+                    result.add(indicator);
+                }else if (indicator.getTableIndicators() == null) {
+                    indicator.setTableIndicatorId(tableIndicator.getId());
+                    indicator.setTableIndicators(new ArrayList<>());
+                }
+                indicator.getTableIndicators().add(tableIndicator);
+            }
+        }
+
+        return new PageInfo<>(result);
+    }
+
+    /**
+     * 查询数据
+     */
+    public List<Map<String, Object>> searchList(CstSearchParam param, boolean page) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("with unitcodes as (select unitcode from sys_unitinfo start with unitcode = '");
+        sb.append(param.getUnitcode());
+        sb.append("' connect by prior unitcode = p_unitcode) ");
+        sb.append("select ");
+        String templateId = param.getTemplateId();
+        // 查询模板数据表
+        List<CstTemplateTable> templateTables = customSearchDao.selectTemplateTables(templateId);
+        // 查询模板字段
+        List<CstTemplateIndicator> templateIndicators = customSearchDao.selectTemplateIndicators(templateId);
+        // 拼接查询字段
+        for (int i = 0; i < templateIndicators.size(); i++) {
+            CstTemplateIndicator templateIndicator = templateIndicators.get(i);
+            if (i != 0) {
+                sb.append(",");
+            }
+            // 自定义参数
+            if (StringUtils.isEmpty(templateIndicator.getIndicatorId())) {
+                sb.append(templateIndicator.getFormula());
+            }
+            // 数据表参数
+            else {
+                CstTableIndicator indicator = templateIndicator.getIndicator();
+                if (StringUtils.isNotEmpty(indicator.getFormula())) {
+                    sb.append(indicator.getFormula());
+                }else {
+                    sb.append(indicator.getTableId()).append(".").append(indicator.getLabelColumn());
+                }
+            }
+
+            // ID作为别名
+            sb.append(" as ").append(templateIndicator.getId());
+        }
+        sb.append(" from ");
+        List<String> tableIds = templateTables.stream().map(CstTemplateTable::getTableId).collect(Collectors.toList());
+        sb.append(String.join(",", tableIds)).append(" where 1 = 1 ");
+        // 拼接关联表的单位代码条件
+        if (!"30200000".equals(param.getUnitcode())) {
+            for (CstTemplateTable templateTable : templateTables) {
+                CstTable table = templateTable.getTable();
+                if (StringUtils.isNotEmpty(table.getUnitCondition())) {
+                    sb.append(" and ").append(table.getId()).append(".");
+                    sb.append(table.getUnitCondition());
+                }
+            }
+        }
+        // 拼接关联SQL
+        List<CstTableRelation> tableRelations = customSearchDao.selectTableRelations(tableIds);
+        for (CstTableRelation relation : tableRelations) {
+            sb.append(" and ").append(relation.getMainTableId()).append(".").append(relation.getMainTableColumn())
+                    .append(" = ").append(relation.getRelationTableId()).append(".").append(relation.getRelationTableColumn());
+        }
+        // 拼接查询条件
+        List<CstSearchParam.CstConditionValue> values = param.getValues();
+        if (values != null && values.size() > 0) {
+            for (CstSearchParam.CstConditionValue value : values) {
+                // 查询指标
+                CstTableIndicator indicator = customSearchDao.selectTableIndicator(value.getIndicatorId());
+                Condition con = ConditionFactory.get(CstDataTypeEnum.valueOf(indicator.getDataTypeId()), value.getOperator());
+                if (con != null) {
+                    String sql = con.buildSql(indicator, value.getValue1(), value.getValue2());
+                    if (StringUtils.isNotEmpty(sql)) {
+                        sb.append(sql);
+                    }
+                }
+            }
+        }
+        String sql = sb.toString();
+        log.info("自定义查询SQL:{}", sql);
+        if (page) {
+            PageUtils.startPage(param);
+        }
+        List<Map<String, Object>> result = customSearchDao.search(sql);
+        for (int i = 0; i < result.size(); i++) {
+            result.get(i).put("index", (param.getPageNum() - 1) * param.getPageSize() + i + 1);
+        }
+
+        // 使用统计信息
+        if (param.isUseGroup() && param.getPageNum() == 1) {
+            boolean haveGroupType = false;
+            sb = new StringBuilder("select ");
+            for (CstSearchParam.CstGroupSetting groupSetting : param.getGroupSettings()) {
+                String groupType = groupSetting.getGroupType();
+                boolean isNumber = CstGroupType.SUM.equals(groupType) || CstGroupType.AVG.equals(groupType);
+                if (StringUtils.isNotEmpty(groupType)) {
+                    haveGroupType = true;
+                    if (isNumber) sb.append("round(");
+                    sb.append(groupType).append("(t.").append(groupSetting.getId()).append(")");
+                    if (isNumber) sb.append(",2)");
+                    sb.append(" as ").append(groupSetting.getId()).append(",");
+                }
+            }
+            if (haveGroupType) {
+                sb.deleteCharAt(sb.length() - 1);
+                sb.append(" from (").append(sql).append(") t");
+            }
+            sql = sb.toString();
+            List<Map<String, Object>> groupResults = customSearchDao.search(sql);
+            if (groupResults.size() > 0) {
+                Map<String, Object> groupResult = groupResults.get(0);
+                if (groupResult != null) {
+                    groupResult.put("index", "统计");
+                    result.add(0, groupResult);
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 查询数据
+     */
+    public PageInfo<Map<String, Object>> search(CstSearchParam param) {
+        List<Map<String, Object>> result = this.searchList(param, true);
+        return new PageInfo<>(result);
+    }
+
+}

+ 17 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/Condition.java

@@ -0,0 +1,17 @@
+package cn.com.victorysoft.business.analyze.service.condition;
+
+import cn.com.victorysoft.business.analyze.entity.CstTableIndicator;
+
+/**
+ * 条件接口
+ */
+public interface Condition {
+
+    /**
+     * 构建SQL
+     * @param indicator 指标
+     * @param value 查询值,最多有2个
+     * @return 查询条件SQL
+     */
+    String buildSql(CstTableIndicator indicator, String... value);
+}

+ 20 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/ConditionFactory.java

@@ -0,0 +1,20 @@
+package cn.com.victorysoft.business.analyze.service.condition;
+
+import cn.com.victorysoft.business.analyze.constant.CstDataTypeEnum;
+
+public class ConditionFactory {
+
+    public static Condition get(CstDataTypeEnum dataType, String operator) {
+        if (dataType == CstDataTypeEnum.DATE) {
+            return new DateCondition();
+        }else if (dataType == CstDataTypeEnum.DICT) {
+            return new DictCondition();
+        }else if (dataType == CstDataTypeEnum.NUMBER) {
+            return new NumberCondition(operator);
+        }else if (dataType == CstDataTypeEnum.VARCHAR) {
+            return new VarcharCondition(operator);
+        }else {
+            return null;
+        }
+    }
+}

+ 25 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/DateCondition.java

@@ -0,0 +1,25 @@
+package cn.com.victorysoft.business.analyze.service.condition;
+
+import cn.com.victorysoft.business.analyze.entity.CstTableIndicator;
+import cn.com.victorysoft.business.util.StringUtils;
+
+/**
+ * 日期-范围选择类型
+ */
+public class DateCondition implements Condition {
+    @Override
+    public String buildSql(CstTableIndicator indicator, String... value) {
+        String value1 = value[0];
+        String value2 = value[1];
+        String sql = "";
+        if (StringUtils.isNotEmpty(value1)) {
+            String column = indicator.getLabelColumn();
+            sql += " and " + indicator.getTableId() + "." + column + " >= to_date('" + value1 + "', 'yyyy-mm-dd')";
+        }
+        if (StringUtils.isNotEmpty(value2)) {
+            String column = indicator.getLabelColumn();
+            sql += " and " + indicator.getTableId() + "." + column + " < to_date('" + value2 + "', 'yyyy-mm-dd') + 1";
+        }
+        return "".equals(sql) ? null : sql;
+    }
+}

+ 18 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/DictCondition.java

@@ -0,0 +1,18 @@
+package cn.com.victorysoft.business.analyze.service.condition;
+
+import cn.com.victorysoft.business.analyze.entity.CstTableIndicator;
+import cn.com.victorysoft.business.util.StringUtils;
+
+/**
+ * 字典-下拉选择类型
+ */
+public class DictCondition implements Condition {
+    @Override
+    public String buildSql(CstTableIndicator indicator, String... value) {
+        String value1 = value[0];
+        if (StringUtils.isNotEmpty(value1)) {
+            return " and " + indicator.getTableId() + "." + indicator.getValueColumn() + " = '" + value[0] + "'";
+        }
+        return null;
+    }
+}

+ 53 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/NumberCondition.java

@@ -0,0 +1,53 @@
+package cn.com.victorysoft.business.analyze.service.condition;
+
+import cn.com.victorysoft.business.analyze.constant.CstOperator;
+import cn.com.victorysoft.business.analyze.entity.CstTableIndicator;
+import cn.com.victorysoft.business.util.StringUtils;
+
+/**
+ * 数字-范围录入类型
+ */
+public class NumberCondition implements Condition {
+    private String operator;
+    public NumberCondition(String operator) {
+        this.operator = operator;
+    }
+    @Override
+    public String buildSql(CstTableIndicator indicator, String... value) {
+        if (StringUtils.isEmpty(operator)) return null;
+        String value1 = value[0];
+        String value2 = value[1];
+        String sql = "";
+        String column = indicator.getLabelColumn();
+        if (operator.equals(CstOperator.EQUAL) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " = to_number('" + value1 + "')";
+        }
+        if (operator.equals(CstOperator.NOT_EQUAL) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " != to_number('" + value1 + "')";
+        }
+        if (operator.equals(CstOperator.LT) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " < to_number('" + value1 + "')";
+        }
+        if (operator.equals(CstOperator.LTE) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " <= to_number('" + value1 + "')";
+        }
+        if (operator.equals(CstOperator.GT) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " > to_number('" + value1 + "')";
+        }
+        if (operator.equals(CstOperator.GTE) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " >= to_number('" + value1 + "')";
+        }
+        if (operator.equals(CstOperator.BETWEEN) && StringUtils.isNotEmpty(value1) && StringUtils.isNotEmpty(value2)) {
+            sql += " and " + indicator.getTableId() + "." + column + " >= to_number('" + value1 + "')";
+            sql += " and " + indicator.getTableId() + "." + column + " <= to_number('" + value2 + "')";
+        }
+        if (operator.equals(CstOperator.NULL)) {
+            sql += " and " + indicator.getTableId() + "." + column + " is null";
+        }
+        if (operator.equals(CstOperator.NOT_NULL)) {
+            sql += " and " + indicator.getTableId() + "." + column + " is not null";
+        }
+
+        return "".equals(sql) ? null : sql;
+    }
+}

+ 41 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/analyze/service/condition/VarcharCondition.java

@@ -0,0 +1,41 @@
+package cn.com.victorysoft.business.analyze.service.condition;
+
+import cn.com.victorysoft.business.analyze.constant.CstOperator;
+import cn.com.victorysoft.business.analyze.entity.CstTableIndicator;
+import cn.com.victorysoft.business.util.StringUtils;
+
+/**
+ * 字符-模糊匹配类型
+ */
+public class VarcharCondition implements Condition {
+    private String operator;
+    public VarcharCondition(String operator) {
+        this.operator = operator;
+    }
+    @Override
+    public String buildSql(CstTableIndicator indicator, String... value) {
+        if (StringUtils.isEmpty(operator)) return null;
+        String value1 = value[0];
+        String sql = "";
+        String column = indicator.getLabelColumn();
+        if (operator.equals(CstOperator.EQUAL) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " = '" + value1 + "'";
+        }
+        if (operator.equals(CstOperator.NOT_EQUAL) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " != '" + value1 + "'";
+        }
+        if (operator.equals(CstOperator.LIKE) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " like '%" + value1 + "%'";
+        }
+        if (operator.equals(CstOperator.NOT_LIKE) && StringUtils.isNotEmpty(value1)) {
+            sql += " and " + indicator.getTableId() + "." + column + " not like '%" + value1 + "%'";
+        }
+        if (operator.equals(CstOperator.NULL)) {
+            sql += " and " + indicator.getTableId() + "." + column + " is null";
+        }
+        if (operator.equals(CstOperator.NOT_NULL)) {
+            sql += " and " + indicator.getTableId() + "." + column + " is not null";
+        }
+        return "".equals(sql) ? null : sql;
+    }
+}

+ 3 - 0
vseaf4.4-analyze/src/main/java/cn/com/victorysoft/business/readme.md

@@ -0,0 +1,3 @@
+# vseaf4.4-analyze 综合分析优化
+
+* 修改及新建package时,必须以`cn.com.victorysoft.business.{项目名}`为前缀。

+ 262 - 0
vseaf4.4-analyze/src/main/resources/mapper/CustomSearchDao.xml

@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.victorysoft.business.analyze.dao.CustomSearchDao">
+  <select id="selectDataSourceById" parameterType="String" resultType="CstDataSource">
+    select id, name, table_name, value_column, label_column, order_column, filter_sql
+    from cst_data_source
+    where id = #{value}
+  </select>
+
+  <select id="selectDictData" parameterType="CstDataSource" resultType="CstDictData">
+    select ${dataSource.valueColumn} as "value",
+      ${dataSource.labelColumn} as label
+    from ${dataSource.tableName}
+    where 1 = 1
+    <if test="searchText != null and searchText != ''">
+      and ${dataSource.labelColumn} like '%'||#{searchText}||'%'
+    </if>
+    <if test="dataSource.filterSql != null and dataSource.filterSql != ''">
+      and ${dataSource.filterSql}
+    </if>
+    <if test="dataSource.orderColumn != null and dataSource.orderColumn != ''">
+      order by ${dataSource.orderColumn}
+    </if>
+  </select>
+
+  <select id="selectTemplates" parameterType="String" resultType="CstTemplate">
+    select id, name, unitcode, update_time, use_group, table_type
+    from cst_template
+    where unitcode = #{value}
+    or id in (select template_id from cst_template_share where unitcode = #{value})
+    order by name
+  </select>
+
+  <select id="selectTemplate" parameterType="String" resultType="CstTemplate">
+    select id, name, unitcode, update_time, use_group, table_type
+    from cst_template
+    where id = #{value}
+  </select>
+
+  <delete id="deleteTemplate" parameterType="String">
+    delete from cst_template where id = #{value}
+  </delete>
+
+  <insert id="insertTemplate" parameterType="CstTemplate">
+    insert into cst_template
+      (id, name, unitcode, update_time, use_group, table_type)
+    values
+      (#{id}, #{name}, #{unitcode}, sysdate, #{useGroup}, #{tableType})
+  </insert>
+
+  <update id="updateTemplate" parameterType="CstTemplate">
+    update cst_template
+     set name = #{name},
+         unitcode = #{unitcode},
+         use_group = #{useGroup},
+         table_type = #{tableType},
+         update_time = sysdate
+    where id = #{id}
+  </update>
+
+  <select id="selectTemplateTables" parameterType="String" resultType="CstTemplateTable">
+    select ctt.template_id, ctt.table_id, ctt.order_no,
+    ct.id "table.id", ct.name "table.name", ct.table_type "table.table_type", ct.unit_condition "table.unit_condition"
+    from cst_template_table ctt, cst_table ct
+    where ctt.table_id = ct.id
+    and ctt.template_id = #{value}
+    order by order_no
+  </select>
+
+  <delete id="deleteTemplateTables" parameterType="String">
+    delete from cst_template_table where template_id = #{value}
+  </delete>
+
+  <insert id="insertTemplateTables" parameterType="java.util.List">
+    insert into cst_template_table (template_id, table_id, order_no)
+    <foreach collection="list" item="item" separator="UNION ALL">
+      SELECT #{item.templateId}, #{item.tableId}, #{item.orderNo}
+      FROM dual
+    </foreach>
+  </insert>
+
+  <select id="selectTemplateIndicators" parameterType="String" resultType="CstTemplateIndicator">
+    select cti.id,
+           cti.name,
+           cti.template_id,
+           cti.indicator_id,
+           cti.formula,
+           cti.formula_text,
+           cti.unit,
+           cti.order_no,
+           cti.group_type,
+           ci.id "indicator.id",
+           ci.name "indicator.name",
+           ci.table_id "indicator.table_id",
+           ci.label_column "indicator.label_column",
+           ci.data_type_id "indicator.data_type_id",
+           ci.formula "indicator.formula",
+           ci.unit "indicator.unit",
+           ci.data_source_id "indicator.data_source_id",
+           ci.value_column "indicator.value_column",
+           ci.order_no "indicator.order_no",
+           ci.query_type_id "indicator.query_type_id",
+           ci.indicator_id "indicator.indicator_id"
+      from cst_template_indicator cti, cst_table_indicator ci
+     where cti.indicator_id = ci.id(+)
+       and cti.template_id = #{value}
+     order by cti.order_no
+  </select>
+
+  <delete id="deleteTemplateIndicators" parameterType="String">
+    delete from cst_template_indicator where template_id = #{value}
+  </delete>
+
+  <insert id="insertTemplateIndicators" parameterType="java.util.List">
+    insert into cst_template_indicator (template_id, indicator_id, order_no, id, name, formula, formula_text, unit, group_type)
+    <foreach collection="list" item="item" separator="UNION ALL">
+      SELECT #{item.templateId}, #{item.indicatorId,jdbcType=VARCHAR}, #{item.orderNo}, #{item.id}, #{item.name,jdbcType=VARCHAR},
+       #{item.formula,jdbcType=VARCHAR}, #{item.formulaText,jdbcType=VARCHAR}, #{item.unit,jdbcType=VARCHAR}, #{item.groupType,jdbcType=VARCHAR}
+      FROM dual
+    </foreach>
+  </insert>
+
+  <select id="selectTemplateConditions" parameterType="String" resultType="CstTemplateCondition">
+    select ctc.template_id, ctc.indicator_id, ctc.query_type_id, ctc.order_no,
+      ci.name indicatorName, cti.data_type_id, cti.data_source_id, ci.id global_indicator_id
+    from cst_template_condition ctc, cst_table_indicator cti, cst_indicator ci
+    where  ctc.indicator_id = cti.id
+    and cti.indicator_id = ci.id
+    and template_id = #{value}
+    order by ctc.order_no
+  </select>
+
+  <select id="selectTemplateCondition" resultType="CstTemplateCondition">
+    select ctc.template_id, ctc.indicator_id, ctc.query_type_id, ctc.order_no,
+      ci.name indicatorName, cti.data_type_id, cti.data_source_id, ci.id global_indicator_id
+    from cst_template_condition ctc, cst_table_indicator cti, cst_indicator ci
+    where  ctc.indicator_id = cti.id
+    and cti.indicator_id = ci.id
+    and template_id = #{templateId}
+    and ctc.indicator_id = #{indicatorId}
+  </select>
+
+  <delete id="deleteTemplateConditions" parameterType="String">
+    delete from cst_template_condition where template_id = #{value}
+  </delete>
+
+  <insert id="insertTemplateConditions" parameterType="java.util.List">
+    insert into cst_template_condition (template_id, indicator_id, query_type_id, order_no)
+    <foreach collection="list" item="item" separator="UNION ALL">
+      SELECT #{item.templateId}, #{item.indicatorId}, #{item.queryTypeId,jdbcType=VARCHAR}, #{item.orderNo}
+      FROM dual
+    </foreach>
+  </insert>
+
+  <select id="selectTemplateShares" parameterType="String" resultType="CstTemplateShare">
+    select template_id, unitcode
+    from cst_template_share
+    where template_id = #{value}
+  </select>
+
+  <delete id="deleteTemplateShares" parameterType="String">
+    delete from cst_template_share where template_id = #{value}
+  </delete>
+
+  <insert id="insertTemplateShares" parameterType="java.util.List">
+    insert into cst_template_share  (template_id, unitcode)
+    <foreach collection="list" item="item" separator="UNION ALL">
+      SELECT #{item.templateId}, #{item.unitcode}
+      FROM dual
+    </foreach>
+  </insert>
+
+  <select id="selectTables" resultType="CstTable">
+    select id, name, table_type, unit_condition
+    from cst_table
+    order by name
+  </select>
+
+  <select id="selectTable" parameterType="String" resultType="CstTable">
+    select id, name, table_type, unit_condition
+    from cst_table
+    where id = #{value}
+  </select>
+
+  <select id="selectRelateTables" parameterType="String" resultType="CstTable">
+    select id, name, table_type, unit_condition
+    from cst_table
+    where id in
+    (select relation_table_id from cst_table_relation where main_table_id = #{value})
+    order by name
+  </select>
+
+  <select id="selectTableIndicators" parameterType="String" resultType="CstTableIndicator">
+    select id, name, table_id, label_column, data_type_id, formula, unit, data_source_id, value_column,
+    order_no, query_type_id, default_indicator, indicator_id
+    from cst_table_indicator
+    where table_id = #{value}
+    order by order_no
+  </select>
+
+  <select id="selectTableIndicator" parameterType="String" resultType="CstTableIndicator">
+    select id, name, table_id, label_column, data_type_id, formula, unit, data_source_id, value_column,
+    order_no, query_type_id, default_indicator, indicator_id
+    from cst_table_indicator
+    where id = #{value}
+  </select>
+
+  <select id="selectQueryTypes" resultType="CstQueryType">
+    select cdt.id data_type_id, cqt.id, cqt.name, cdtqt.order_no
+      from cst_data_type            cdt,
+           cst_data_type_query_type cdtqt,
+           cst_query_type           cqt
+    where cdt.id = cdtqt.data_type_id
+      and cqt.id = cdtqt.query_type_id
+    order by cdt.id, cdtqt.order_no
+  </select>
+
+  <select id="selectTableRelations" parameterType="java.util.List" resultType="CstTableRelation">
+    select main_table_id, relation_table_id, main_table_column, relation_table_column
+      from cst_table_relation
+    where main_table_id in
+    <foreach collection="list" item = "code" open="(" separator="," close=")" index="index">
+      #{code}
+    </foreach>
+    and relation_table_id in
+    <foreach collection="list" item = "code" open="(" separator="," close=")" index="index">
+      #{code}
+    </foreach>
+  </select>
+
+  <select id="search" parameterType="String" resultType="Map">
+    ${value}
+  </select>
+
+  <select id="selectIndicators" resultType="CstIndicator">
+    select distinct ci.*
+    from cst_table_indicator cti, cst_table ct, cst_indicator ci
+    where cti.table_id = ct.id and cti.indicator_id = ci.id
+    and (ct.table_type = #{tableType} or ct.table_type = 'STATIC')
+    <if test="searchField != null and searchField != ''">
+      and ci.name like '%'||#{searchField}||'%'
+    </if>
+    order by
+    <if test="searchField != null and searchField != ''">
+      length(replace(ci.name, #{searchField}, '')) nulls first,
+    </if>
+    nlssort(ci.name, 'NLS_SORT=SCHINESE_PINYIN_M')
+  </select>
+
+  <select id="selectByIndicators" resultType="CstTableIndicator">
+    select cti.id, ci.name, table_id, label_column, data_type_id, formula, ci.unit, data_source_id,
+    value_column, order_no, query_type_id, default_indicator, indicator_id, ct.name table_name
+    from cst_table_indicator cti, cst_table ct, cst_indicator ci
+    where cti.table_id = ct.id and cti.indicator_id = ci.id
+    and (ct.table_type = #{tableType} or ct.table_type = 'STATIC')
+    and ci.id in
+    <foreach collection="indicators" item = "item" open="(" separator="," close=")" index="index">
+      #{item.id}
+    </foreach>
+    order by nlssort(ci.name, 'NLS_SORT=SCHINESE_PINYIN_M'), cti.default_indicator desc nulls last
+  </select>
+</mapper>

+ 40 - 0
vseaf4.4-analyze/src/test/java/cn/com/victorysoft/analyze/Test.java

@@ -0,0 +1,40 @@
+package cn.com.victorysoft.analyze;
+
+import cn.com.victorysoft.business.analyze.constant.CstDataTypeEnum;
+
+import java.math.BigInteger;
+
+public class Test {
+    public static void main(String[] args) {
+        String[] ary = {"B0D4B6C7E1EE1354E053040011AC417F",
+                "B0D4B6C7E1D81354E053040011AC417F",
+                "B0D4B6C7E1D91354E053040011AC417F",
+                "B0D4B6C7E1DA1354E053040011AC417F",
+                "B0D4B6C7E1DB1354E053040011AC417F",
+                "B0D4B6C7E1DC1354E053040011AC417F",
+                "B0D4B6C7E1DD1354E053040011AC417F",
+                "B0D4B6C7E1DE1354E053040011AC417F",
+                "B0D4B6C7E1DF1354E053040011AC417F",
+                "B0D4B6C7E1E01354E053040011AC417F",
+                "B0D4B6C7E1E11354E053040011AC417F",
+                "B0D4B6C7E1E21354E053040011AC417F",
+                "B0D4B6C7E1E31354E053040011AC417F",
+                "B0D4B6C7E1E41354E053040011AC417F",
+                "B0D4B6C7E1E51354E053040011AC417F",
+                "B0D4B6C7E1E61354E053040011AC417F",
+                "B0D4B6C7E1E71354E053040011AC417F",
+                "B0D4B6C7E1E81354E053040011AC417F",
+                "B0D4B6C7E1E91354E053040011AC417F",
+                "B0D4B6C7E1EA1354E053040011AC417F",
+                "B0D4B6C7E1EB1354E053040011AC417F",
+                "B0D4B6C7E1EC1354E053040011AC417F",
+                "B0D4B6C7E1ED1354E053040011AC417F",
+                "B0D4B6C7E1E91354E053040011AC1823"};
+        for (String s : ary) {
+            BigInteger i = new BigInteger(s, 16);
+            System.out.println("A" + i.toString(32).toUpperCase());
+        }
+
+        System.out.println(CstDataTypeEnum.valueOf(""));
+    }
+}

+ 1 - 0
vseaf4.4-analyze/src/test/java/cn/com/victorysoft/redme.txt

@@ -0,0 +1 @@
+单元测试

+ 46 - 0
vseaf4.4-calc/pom.xml

@@ -0,0 +1,46 @@
+<?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>cn.com.victorysoft</groupId>
+	<artifactId>vseaf4.4-calc</artifactId>
+	<packaging>jar</packaging>
+
+	<parent>
+		<groupId>cn.com.victorysoft</groupId>
+		<artifactId>vseaf-service-template</artifactId>
+		<version>1.0.0-SNAPSHOT</version>
+	</parent>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>cn.com.victorysoft</groupId>
+			<artifactId>vseaf4.4-sys</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.com.victorysoft</groupId>
+			<artifactId>vseaf4.4-indicator</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.com.victorysoft</groupId>
+			<artifactId>vseaf4.4-condition</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.com.victorysoft</groupId>
+			<artifactId>vseaf4.4-technology</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
+
+</project>

+ 196 - 0
vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/controller/DataCalcController.java

@@ -0,0 +1,196 @@
+package cn.com.victorysoft.business.calc.controller;
+
+import cn.com.victorysoft.business.calc.service.*;
+import cn.com.victorysoft.business.calc.task.DataSyncTask;
+import cn.com.victorysoft.business.indicator.entity.WellSectionMonth;
+import cn.com.victorysoft.business.indicator.param.SectionRateWellExportParam;
+import cn.com.victorysoft.business.indicator.param.WellSectionMonthParam;
+import cn.com.victorysoft.business.indicator.service.LessSummaryService;
+import cn.com.victorysoft.business.indicator.service.MoreSummaryService;
+import cn.com.victorysoft.business.indicator.service.SectionRateSummaryService;
+import cn.com.victorysoft.business.sys.entity.DateRange;
+import cn.com.victorysoft.business.sys.entity.ExportResult;
+import cn.com.victorysoft.business.sys.param.UnitDateRangeParam;
+import cn.com.victorysoft.business.util.DateUtils;
+import cn.com.victorysoft.business.util.ExcelUtils;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+@Api(tags = "计算服务")
+@Slf4j
+@RestController
+@RequestMapping("calc")
+public class DataCalcController {
+    @Resource
+    private DataSyncService dataSyncService;
+    @Resource
+    private QualityDataSyncService qualityDataSyncService;
+    @Resource
+    private FlushDataSyncService flushDataSyncService;
+    @Resource
+    private AdjustDataSyncService adjustDataSyncService;
+    @Resource
+    private AbnormalDataSyncService abnormalDataSyncService;
+    @Resource
+    private ConditionDataSyncService conditionDataSyncService;
+    @Resource
+    private RealtimeService realtimeService;
+    @Resource
+    private SectionRateSummaryService sectionRateSummaryService;
+    @Resource
+    private LessSummaryService lessSummaryService;
+    @Resource
+    private MoreSummaryService moreSummaryService;
+    @Resource
+    private WellToolDataSyncService wellToolDataSyncService;
+    @Resource
+    private WellTubeDataSyncService wellTubeDataSyncService;
+
+    @PostMapping("/static")
+    @ApiOperation("静态数据")
+    public void syncStaticData(){
+        dataSyncService.syncStaticData();
+    }
+
+    @PostMapping("/daily")
+    @ApiOperation("日度数据")
+    public void daily(Date date){
+        dataSyncService.syncWellSectionDaily(date, date);
+    }
+
+    @PostMapping("/dailyRange")
+    @ApiOperation("日度阶段数据")
+    public void dailyRange(Date startDate, Date endDate) {
+        dataSyncService.syncWellSectionDaily(startDate, endDate);
+    }
+
+    @GetMapping("/wellSectionDaily")
+    @ApiOperation("计算日度时间段的层段数据")
+    public List<WellSectionMonth> wellSectionDaily(WellSectionMonthParam param){
+        return dataSyncService.calcWellSectionDaily(param);
+    }
+
+    @PostMapping("/wellSectionDaily/export")
+    @ApiOperation("导出日度时间段的层段数据")
+    public ExportResult wellSectionDailyExport(@RequestBody SectionRateWellExportParam param){
+        List<WellSectionMonth> list = dataSyncService.calcWellSectionDaily(param);
+        return ExcelUtils.export(param.getColumnConfig(), list, param.getFileName());
+    }
+
+    @PostMapping("/dailyRangeInjectType")
+    @ApiOperation("更新阶段注水方式数据")
+    public void dailyRangeInjectType(Date startDate, Date endDate) {
+        dataSyncService.updateInjectType(startDate, endDate);
+    }
+
+    @PostMapping("/summary")
+    @ApiOperation("汇总层段合格率")
+    public void summary(@RequestParam(required = false) String month) {
+        // 默认上月
+        if (month == null || "".equals(month)) {
+            DateRange dateRange = DateUtils.getLastMonth(new Date());
+            month = dateRange.getName();
+        }
+        // 汇总月度
+        dataSyncService.summaryWellSectionMonth(month);
+        // 计算层段合格率
+        sectionRateSummaryService.summary(month);
+        // 汇总超欠注 暂停,没有原因和措施,不能汇总
+//        lessSummaryService.summary(month);
+//        lessSummaryService.summaryMeasure(month);
+//        moreSummaryService.summary(month);
+//        moreSummaryService.summaryMeasure(month);
+    }
+
+    @PostMapping("/quality")
+    @ApiOperation("水质检测数据")
+    public void quality(Date startDate, Date endDate){
+        qualityDataSyncService.syncQualityData(startDate, endDate);
+    }
+
+    @PostMapping("/flush")
+    @ApiOperation("洗井数据")
+    public void flush(Date startDate, Date endDate){
+        flushDataSyncService.syncFlushRecord(startDate, endDate);
+    }
+
+    @PostMapping("/adjust")
+    @ApiOperation("测调数据")
+    public void adjust(Date date){
+        adjustDataSyncService.generateAdjustPlan(date);
+    }
+
+    @PostMapping("/finishAdjust")
+    @ApiOperation("完成测调数据")
+    public void finishAdjust(){
+        adjustDataSyncService.finishAdjustPlan();
+    }
+
+    @PostMapping("/abnormal")
+    @ApiOperation("异常井数据")
+    public void abnormal(Date date){
+        abnormalDataSyncService.syncAbnormalWell(date);
+        abnormalDataSyncService.summaryAbnormalUnit(date);
+    }
+
+    @PostMapping("/condition")
+    @ApiOperation("工况数据")
+    public void condition(Date date){
+        conditionDataSyncService.summary(date);
+    }
+
+    @PostMapping("/pump")
+    @ApiOperation("注水泵数据")
+    public void pump(){
+        realtimeService.syncPumpDeviceList();
+    }
+
+    @PostMapping("/wellTool")
+    @ApiOperation("井下工具数据")
+    public void wellTool(Date startDate, Date endDate){
+        wellToolDataSyncService.sync(startDate, endDate);
+    }
+
+    @PostMapping("/wellTube")
+    @ApiOperation("在井管柱数据")
+    public void wellTube(Date startDate, Date endDate){
+        wellTubeDataSyncService.sync(startDate, endDate);
+    }
+
+    @PostMapping("/summaryMonth")
+    @ApiOperation("汇总月度数据")
+    public void summaryMonth(String month){
+        dataSyncService.summaryMonth(month);
+    }
+
+    @PostMapping("/daily-all")
+    @ApiOperation("水质、洗井、异常井、单位工况")
+    public void dailyAll(Date date){
+        log.info("水质监测数据同步任务开始");
+        // 30天前
+//            qualityDataSyncService.syncQualityData(DateUtils.addDays(date, -30), date);
+        qualityDataSyncService.xchyfxSzjcsj(DateUtils.addDays(date, -30), date);
+        log.info("水质监测同步任务结束");
+
+        log.info("洗井数据同步任务开始");
+        // 2天前
+        flushDataSyncService.syncFlushRecord(DateUtils.addDays(date, -30), date);
+        log.info("洗井数据同步任务结束");
+
+        log.info("异常井数据同步任务开始");
+        abnormalDataSyncService.syncAbnormalWell(date);
+        abnormalDataSyncService.summaryAbnormalUnit(date);
+        log.info("异常井数据同步任务结束");
+
+        log.info("单位工况数据汇总任务开始");
+        conditionDataSyncService.summary(date);
+        log.info("单位工况数据汇总任务结束");
+    }
+}

+ 46 - 0
vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/controller/IndexController.java

@@ -0,0 +1,46 @@
+package cn.com.victorysoft.business.calc.controller;
+
+import cn.com.victorysoft.business.calc.dto.IndexUnitMonthDto;
+import cn.com.victorysoft.business.calc.entity.UnitDaily;
+import cn.com.victorysoft.business.calc.service.*;
+import cn.com.victorysoft.business.indicator.dto.UnitMonthDto;
+import cn.com.victorysoft.business.indicator.entity.WellSectionMonth;
+import cn.com.victorysoft.business.indicator.param.SectionRateWellExportParam;
+import cn.com.victorysoft.business.indicator.param.WellSectionMonthParam;
+import cn.com.victorysoft.business.indicator.service.LessSummaryService;
+import cn.com.victorysoft.business.indicator.service.MoreSummaryService;
+import cn.com.victorysoft.business.indicator.service.SectionRateSummaryService;
+import cn.com.victorysoft.business.sys.entity.DateRange;
+import cn.com.victorysoft.business.sys.entity.ExportResult;
+import cn.com.victorysoft.business.sys.param.UnitDateParam;
+import cn.com.victorysoft.business.sys.param.UnitMonthParam;
+import cn.com.victorysoft.business.util.DateUtils;
+import cn.com.victorysoft.business.util.ExcelUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+@Api(tags = "系统首页")
+@RestController
+@RequestMapping("index")
+public class IndexController {
+    @Resource
+    private IndexService indexService;
+
+    @GetMapping("/daily")
+    @ApiOperation("查询单位日度数据")
+    public UnitDaily selectUnitDaily(UnitDateParam param){
+        return indexService.selectUnitDaily(param);
+    }
+
+    @GetMapping("/month")
+    @ApiOperation("查询单位月度数据")
+    public IndexUnitMonthDto selectUnitDaily(UnitMonthParam param){
+        return indexService.selectUnitMonth(param);
+    }
+
+}

+ 20 - 0
vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/AbnormalDataSyncDao.java

@@ -0,0 +1,20 @@
+package cn.com.victorysoft.business.calc.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+
+@Mapper
+public interface AbnormalDataSyncDao {
+    /**
+     * 同步异常井数据
+     */
+    void syncAbnormalWell(Date date);
+
+    /**
+     * 汇总异常井单位数据
+     */
+    void summaryAbnormalUnit(@Param("date") Date date, @Param("unitColumn") String unitColumn);
+
+}

+ 20 - 0
vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/AdjustDataSyncDao.java

@@ -0,0 +1,20 @@
+package cn.com.victorysoft.business.calc.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+
+@Mapper
+public interface AdjustDataSyncDao {
+    /**
+     * 生成测调计划数据
+     */
+    void generateAdjustPlan(Date date);
+
+    /**
+     * 每天更新测调完成数据
+     */
+    void finishAdjustPlan();
+
+}

+ 16 - 0
vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/ConditionDataSyncDao.java

@@ -0,0 +1,16 @@
+package cn.com.victorysoft.business.calc.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+
+@Mapper
+public interface ConditionDataSyncDao {
+
+    /**
+     * 汇总单位数据
+     */
+    void summary(@Param("date") Date date);
+
+}

+ 51 - 0
vseaf4.4-calc/src/main/java/cn/com/victorysoft/business/calc/dao/DataSyncDao.java

@@ -0,0 +1,51 @@
+package cn.com.victorysoft.business.calc.dao;
+
+import cn.com.victorysoft.business.calc.entity.SysInjectTechnology;
+import cn.com.victorysoft.business.indicator.entity.WellSectionMonth;
+import cn.com.victorysoft.business.sys.entity.DateRange;
+import cn.com.victorysoft.business.sys.entity.WellSectionDaily;
+import cn.com.victorysoft.business.sys.param.UnitDateParam;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+@Mapper
+public interface DataSyncDao {
+    /**
+     * 同步水井基础数据
+     */
+    void syncWaterWell();
+    /**
+     * 同步单注井层段日数据
+     */
+    void syncSingleWellDaily(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("injectCodes") List<String> injectCodes);
+    /**
+     * 同步分注井层段日数据
+     */
+    void syncWellSectionDaily(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("injectCodes") List<String> injectCodes);
+
+    /**
+     * 水井层段月数据-基础数据
+     */
+    List<WellSectionMonth> selectWellSectionMonthBasic(String unitcode, DateRange dateRange);
+
+    /**
+     * 水井层段月数据-按照井统计
+     */
+    List<WellSectionMonth> summaryByWell(String unitcode, DateRange dateRange);
+
+    /**
+     * 水井层段月数据-按照注水工艺、配注变化统计
+     * 注水工艺有变化,按照变化后的数据统计
+     * 改配注井按照时长判断,不按照整月判断
+     */
+    List<WellSectionMonth> summaryWellSectionMonth(String unitcode, DateRange dateRange);
+
+    /**
+     * 查询注水工艺
+     */
+    List<SysInjectTechnology> selectInjectTechnology();
+
+}

Some files were not shown because too many files changed in this diff