Преглед на файлове

Merge branch 'master' of http://39.106.8.246:3003/persagy/persagy-dmp-server-doc

lixing преди 4 години
родител
ревизия
4eafbd5a0f
променени са 12 файла, в които са добавени 1609 реда и са изтрити 120 реда
  1. 15 4
      docs/.vuepress/config.js
  2. 38 15
      docs/dw/dw_deploy.md
  3. 1 0
      docs/dw/index.md
  4. 150 0
      docs/dw/sqoop.md
  5. 61 50
      docs/report/report_api.md
  6. 62 10
      docs/report/report_ddl_sql.md
  7. 58 12
      docs/report/report_design.md
  8. 63 29
      docs/utils/query.md
  9. 21 0
      docs/wther/index.md
  10. 774 0
      docs/wther/wther_api_2020.md
  11. 147 0
      docs/wther/wther_api_2021.md
  12. 219 0
      docs/wther/wther_prod.md

+ 15 - 4
docs/.vuepress/config.js

@@ -11,8 +11,9 @@ module.exports = {
             { text: '数据标准化', link: '/dic/' },
             { text: '任务调度', link: '/task/' },
             { text: '报警系统', link: '/alarm/' },
-            { text: '报表统计系统', link: '/report/' },
-            { text: '数据仓库', link: '/dw/' }
+//            { text: '报表统计系统', link: '/report/' },
+            { text: '数据仓库', link: '/dw/' },
+            { text: '天气服务', link: '/wther/' }
         ],
 
         sidebarDepth: 2,
@@ -29,7 +30,10 @@ module.exports = {
                 {
                     title: '数据仓库',
                     collapsable: false,
-                    children: [{ title: '配置计划', path: '/dw/dw_config' }, { title: '搭建部署', path: '/dw/dw_deploy' }]
+                    children: [
+                        { title: '配置计划', path: '/dw/dw_config' },
+                        { title: '搭建部署', path: '/dw/dw_deploy' },
+                        { title: 'sqoop部署及简介', path: '/dw/sqoop'}]
                 }
             ],
             '/report': [
@@ -87,7 +91,14 @@ module.exports = {
                     children: [{ title: '对象数据', path: '/rwd/instance_object' }, { title: '关系数据', path: '/rwd/instance_relation' }]
                 },
                 { title: 'IOT', path: '/rwd/iot' }
-            ]
+            ],
+            '/wther': [
+                {
+                    title: '天气服务',
+                    collapsable: false,
+                    children: [{ title: '服务介绍', path: '/wther/wther_prod' }, { title: '接口2021版', path: '/wther/wther_api_2021' }, { title: '接口2020版', path: '/wther/wther_api_2020' }]
+                }
+            ],
         }
     }
 }

+ 38 - 15
docs/dw/dw_deploy.md

@@ -98,25 +98,35 @@
 
 1. 解压
 
-2. 修改zookeeper中conf下的配置文件zoo.cfg
+2. 创建 /opt/module/zookeeper-3.4.10/zkData 和 /opt/module/zookeeper-3.4.10/logs 目录
 
-   ```shell
-   cp zoo_sample.cfg zoo.cfg
-   ```
+3. 修改配置文件
 
-   ```xml
-   dataDir=/opt/module/zookeeper-3.4.10/zkData
-   ZOO_LOG_DIR=/opt/module/zookeeper-3.4.10/logs
-   
-   ## 在zkData目下创建myid,内容是本机的 serverId;以下配置1、2、3就是 serverId
-   server.1=hadoop01:2888:3888
-   server.2=hadoop02:2888:3888
-   server.3=hadoop03:2888:3888
-   ```
+   1. 在zkData文件下创建myid文件(<font color="red">集群的myid必须不同</font>)
 
-   
+      ```xml
+      1(此数字与zoo.cfg的server.id对应,具体数值可以自定义)
+      ```
+
+      
+
+   2. 修改zookeeper中conf下的配置文件zoo.cfg
+
+      ```shell
+      cp zoo_sample.cfg zoo.cfg
+      ```
 
-3. 创建 /opt/module/zookeeper-3.4.10/zkData 和 /opt/module/zookeeper-3.4.10/logs 目录
+      ```xml
+      在zoo.cfg文件中添加如下配置:
+      
+      dataDir=/opt/module/zookeeper-3.4.10/zkData
+      ZOO_LOG_DIR=/opt/module/zookeeper-3.4.10/logs
+      
+      ## 内容是本机的 serverId(与zkData目下创建的myid对应);以下配置1、2、3就是 serverId
+      server.1=hadoop01:2888:3888
+      server.2=hadoop02:2888:3888
+      server.3=hadoop03:2888:3888
+      ```
 
 # Hadoop集群安装
 
@@ -564,3 +574,16 @@
 
    
 
+## flume安装
+
+1. 解压
+
+2. 修改配置文件
+   将flume / conf下的 flume-env.sh.template 复制为 flume-env.sh
+
+   ```xml
+   export JAVA_HOME=/opt/module/jdk1.8.0_121
+   ```
+
+
+

+ 1 - 0
docs/dw/index.md

@@ -4,5 +4,6 @@
 
 #### [集群配置](/dw/dw_deploy.md)
 
+#### [sqoop部署及简介](/dw/sqoop.md)
 
 

+ 150 - 0
docs/dw/sqoop.md

@@ -0,0 +1,150 @@
+# Sqoop安装与使用
+
+## 安装
+
+1. 下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
+
+2. 上传服务器,解压到指定目录(过程略)
+
+3. 修改配置文件/opt/module/sqoop-1.4.6/conf 目录下 sqoop-env.sh
+
+   ```sh
+   # 各个目录根据环境自行修改
+   export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
+   export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
+   export HIVE_HOME=/opt/module/hive
+   export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
+   export ZOOCFGDIR=/opt/module/zookeeper-3.4.10/conf
+   export HBASE_HOME=/opt/module/hbase
+   ```
+
+4. 拷贝 JDBC 驱动
+
+   ```shell
+   cp mysql-connector-java-5.1.27-bin.jar  $SQOOP_HOME/lib/
+   ```
+
+5. 验证测试
+
+   1. command 验证
+
+      ```shell
+      bin/sqoop help
+      ```
+
+   2. 测试是否可以连接数据库
+
+      ```shell
+      # 列出连接数据库的所有数据库名
+      bin/sqoop list-databases 
+      --connect jdbc:mysql://localhost2:3306/ 
+      --username root 
+      --password 000000
+      ```
+
+## 简介
+
+### 参数说明
+
+```shell
+# 数据库url
+--connect jdbc:mysql://hadoop102:3306/company \
+
+# 数据库用户名
+--username root \
+
+# 数据库密码
+--password 000000 \
+
+# 指定表名(注:从方式导入数据才会自动指定路径)
+--table staff \
+
+# 指定要导入的列
+--columns id,name
+
+# 指定要导入的列,where条件需要加 ''
+--where 'id >= 10'
+
+# 自定义 SQL, where 后面的 $CONDITIONS 是必须的
+# 与--split-by id 一起使用
+# 需要指定 --target-dir 的路径,此方式导入数据不会自动创建
+--query 'select id, name from tableName where $CONDITIONS '
+
+# 根据指定的列分区,该列为数字
+--split-by id 
+
+# 指定保存目录,不指定则默认使用数据库
+--target-dir /user/company \
+
+# 删除路径,不建议使用,不安全
+--delete-target-dir \
+
+# map的个数
+--num-mappers 1 \
+
+# 在hdfs存储格式,指定分隔符
+--fields-terminated-by "\t"
+```
+
+
+
+### 案例
+
+1. sqoop to hive
+
+   ```shell
+   bin/sqoop import \
+   --connect jdbc:mysql://host:3306/company \
+   --username root \
+   --password 000000 \
+   --table tableName \
+   --num-mappers 1 \
+   
+   # hive 导入
+   --hive-import \
+   --fields-terminated-by "\t" \
+   
+   # 覆写
+   --hive-overwrite \
+   
+   # 指定 hive 表
+   --hive-table staff_hive
+   ```
+
+2. sqoop to hbase
+   
+   <font color='red'>sqoop1.4.6只支持HBase1.0.1之前的版本的自动创建HBase表的功能</font>
+
+   ```shell
+   bin/sqoop import \
+   --connect jdbc:mysql://hadoop102:3306/company \
+   --username root \
+   --password 000000 \
+   --table company \
+   --columns "id,name,sex" \
+   
+   # 只能往一个列族导数据
+   --column-family "info" \
+   
+   # hbase 自动创建表
+   --hbase-create-table \
+   --hbase-row-key "id" \
+   --hbase-table "hbase_company" \
+   --num-mappers 1 \
+   --split-by id
+   ```
+
+3. sqoop to mysql
+   
+   <font color='red'>Mysql中如果表不存在,不会自动创建</font>
+
+   ```shell
+   bin/sqoop export \
+   --connect jdbc:mysql://hadoop102:3306/company \
+   --username root \
+   --password 000000 \
+   --table staff \
+   --num-mappers 1 \
+   --export-dir /user/hive/warehouse/staff_hive \
+   --input-fields-terminated-by "\t"
+   ```

+ 61 - 50
docs/report/report_api.md

@@ -6,23 +6,66 @@
 
 ### 查询对象报警数量
 
-请求路径:POST /report/alarm/record/query?projectId=项目Id
+请求路径:POST /report/query?projectId=Pj1101050029&groupCode=WD&dateType=SEASON
+
+参数说明:
+
+```
+projectId:项目id
+groupCode:集团编号
+dateType:日期类型
+```
+
+计算方式取值范围:
+
+```
+	/**
+	 * 求和
+	 */
+	SUM,
+	/**
+	 * 求平均
+	 */
+	AVG,
+	/**
+	 * 求最大值
+	 */
+	MAX,
+	/**
+	 * 求最小值
+	 */
+	MIN,
+	/**
+	 * 求数量
+	 */
+	COUNT
+```
 
 请求参数:
 
 ```json
 查询字段:
 {
+    "groupbyColumns": [
+        "分组字段"
+    ],
     "criteria": {
-        "itemCode": "报警条目编码,非必填",
-        "projectId": "项目Id,非必填",
-        "category": "报警类型,取值范围:Eq,Sy,非必填",
-        "objId": "对象Id,非必填",
-        "classCode": "对象类型编码,非必填",
-        "level": "严重程度,非必填",
-        "state": 2,//报警状态,非必填
-        "createTime": "报警创建时间,格式:yyyyMMdd,非必填"
-    }
+        "字段名":"字段值,每个报表的字段都不同,详情参考‘数据结构’文件"
+    },
+    "orders": [
+        {
+            "column": "排序字段",
+            "asc": false
+        }
+    ],
+    "calculatedColumns": [
+        {
+            "column": "计算列名称",
+            "function": "计算方式,参考上方‘计算方式取值范围’"
+        }
+    ],
+    "page": 1,
+    "size": 10
 }
 ```
 返回数据:
@@ -32,49 +75,17 @@
     "result": "success",
     "data": [
         {
-            "id": 1,
-            "itemCode": "1010",
-            "projectId": "Pj1101050029",
-            "category": "Eq",
-            "objId": "Eq1101050029707953e99dc146bcbe8230d46b39cb1f",
+            "calculatedColumns": [
+                {
+                    "column": "alarmRecordNum",
+                    "function": "SUM",
+                    "value": 0
+                }
+            ],
             "classCode": "ACATFC",
-            "level": "A",
-            "state": 2,
-            "createTime": "20201103",
-            "count": 75 //报警数量
+            "dateType": "YEAR"
         }
     ],
     "count": 1
 }
-```
-
-### 根据设备类型查询设备数量
-
-请求路径:POST /report/rwd/object/queryCountByClass?projectId=项目Id
-
-请求参数:
-
-```json
-查询字段:
-{
-    "classCode":"ACATAH"//设备类型,非必填
-}
-```
-
-返回数据:
-
-```json
-{
-    "result": "success",
-    "data": {
-        "data": [
-            {
-                "projectId": "Pj1101050029", //项目Id
-                "objType": "equipment", //对象分类
-                "classCode": "ACATAH",//设备类型
-                "count": 162 //设备数量
-            }
-        ]
-    }
-}
 ```

+ 62 - 10
docs/report/report_ddl_sql.md

@@ -1,18 +1,70 @@
-# 报警信息报表 report_alarm_record
+# 报表维度配置表 report_config_group
+
+```sql
+CREATE TABLE `report_config_group` (
+  `conlumn_name` varchar(100) NOT NULL COMMENT '字段名称',
+  `conlumn_desc` varchar(100) DEFAULT NULL COMMENT '字段说明',
+  `value` varchar(1000) NOT NULL COMMENT '字段取值范围',
+  `method` varchar(200) DEFAULT NULL COMMENT '映射的方法名称,value_type=2时必填',
+  `value_type` int NOT NULL COMMENT 'value字段值类型:1.实际值,2.bean名称,3.表名.列名(去重查询)',
+  PRIMARY KEY (`conlumn_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报表维度配置表';
+```
+# 报表配置表 report_config
+
+```sql
+CREATE TABLE `report_config` (
+  `calculated` varchar(100) NOT NULL COMMENT '可参与计算的字段',
+  `table_name` varchar(500) NOT NULL COMMENT '表名',
+  `mapping_name` varchar(500) NOT NULL DEFAULT '' COMMENT '映射代码中的名称',
+  `group` varchar(1000) NOT NULL DEFAULT '' COMMENT '可分组的字段',
+  `table_group` json NOT NULL COMMENT '表与表之间的分组字段(用于预生成每个维度的统计数据)',
+  PRIMARY KEY (`calculated`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报表配置表';
+```
+# 对象信息统计报表 report_rwd_object
+
+```sql
+CREATE TABLE `report_rwd_object` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `project_id` varchar(50) NOT NULL COMMENT '项目id',
+  `group_code` varchar(50) NOT NULL COMMENT '集团编码',
+  `obj_type` varchar(50) NOT NULL COMMENT '对象分类',
+  `class_code` varchar(50) NOT NULL COMMENT '对象类型编码',
+  `year` varchar(4) NOT NULL COMMENT '年',
+  `month` varchar(2) DEFAULT NULL COMMENT '月(小于10:01-09)',
+  `day` varchar(2) DEFAULT NULL COMMENT '日(小于10:01-09)',
+  `hour` varchar(2) DEFAULT NULL COMMENT '时(24小时制,小于10:01-09)',
+  `week` varchar(2) DEFAULT NULL COMMENT '周',
+  `season` varchar(1) DEFAULT NULL COMMENT '季度:1:0101-0401,2:0401-0701,3:0701-1001,4: 1001-0101  (日期前闭后开)',
+  `create_time` varchar(10) DEFAULT NULL COMMENT '创建时间  日期格式:yyyyMMddh24',
+  `rwd_object_num` int DEFAULT '0' COMMENT '对象信息统计数量',
+  `date_type` varchar(100) NOT NULL COMMENT '日期类型(年:year 月:month 日:day 时:hour 周:week  季度:season)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1461 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='对象信息统计报表';
+```
+# 报警信息统计报表 report_alarm_record
 
 ```sql
 CREATE TABLE `report_alarm_record` (
   `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
   `item_code` varchar(40) NOT NULL COMMENT '报警条目编码',
   `project_id` varchar(50) NOT NULL DEFAULT '' COMMENT '项目id',
-  `category` varchar(80) NOT NULL COMMENT '报警分类',
-  `obj_id` varchar(50) NOT NULL DEFAULT '' COMMENT '对象id',
-  `class_code` varchar(50) NOT NULL COMMENT '对象类型编码',
-  `level` varchar(10) NOT NULL COMMENT '严重程度',
-  `state` int NOT NULL COMMENT '报警状态',
-  `create_time` varchar(8) NOT NULL COMMENT '创建时间',
-  `count` int DEFAULT '0' COMMENT '数量',
+  `group_code` varchar(50) NOT NULL COMMENT '集团编码',
+  `category` varchar(80) DEFAULT NULL COMMENT '报警分类',
+  `class_code` varchar(50) DEFAULT NULL COMMENT '对象类型编码',
+  `level` varchar(10) DEFAULT NULL COMMENT '严重程度',
+  `alarm_state` varchar(2) DEFAULT NULL COMMENT '报警状态',
+  `year` varchar(4) DEFAULT NULL COMMENT '年',
+  `month` varchar(2) DEFAULT NULL COMMENT '月(小于10:01-09)',
+  `day` varchar(2) DEFAULT NULL COMMENT '日(小于10:01-09)',
+  `hour` varchar(2) DEFAULT NULL COMMENT '时(24小时制,小于10:01-09)',
+  `week` varchar(2) DEFAULT NULL COMMENT '周',
+  `season` varchar(1) DEFAULT NULL COMMENT '季度:1:0101-0401,2:0401-0701,3:0701-1001,4: 1001-0101  (日期前闭后开)',
+  `create_time` varchar(10) DEFAULT NULL COMMENT '创建时间  日期格式:yyyyMMddh24',
+  `alarm_record_num` int DEFAULT '0' COMMENT '报警信息统计数量',
+  `alarm_record_num2` int DEFAULT NULL,
+  `date_type` varchar(100) NOT NULL COMMENT '日期类型(年:year 月:month 日:day 时:hour 周:week  季度:season)',
   PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4096 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报警信息报表';
-
+) ENGINE=InnoDB AUTO_INCREMENT=2287 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报警信息统计报表';
 ```

+ 58 - 12
docs/report/report_design.md

@@ -2,17 +2,63 @@
 
 ## 数据结构
 
+### 报表维度表(report_config_group)
+
+|     字段     |                           字段说明                           |   数据类型    | 是否非空 |   备注   |
+| :----------: | :----------------------------------------------------------: | :-----------: | -------- | :------: |
+| conlumnName |                       主键(字段名称)                       | varchar(100)  | Y        | 字段名称 |
+| conlumnDesc |                             字段                             | varchar(100)  |          |          |
+|    value     |                         字段取值范围                         | varchar(1000) | Y        |          |
+|    method    |              映射的方法名称,value_type=2时必填              | varchar(200)  |          |          |
+|  valueType  | value字段值类型:1.实际值,2.bean名称,3.表名.列名(去重查询) |    int(11)    | Y        |          |
+
+### 报表配置表(report_config)
+
+|     字段     |                       字段说明                       |   数据类型    | 是否非空 |       备注       |
+| :----------: | :--------------------------------------------------: | :-----------: | -------- | :--------------: |
+|  calculated  |               主键(可参与计算的字段)               | varchar(100)  | Y        | 可参与计算的字段 |
+|  tableName  |                         表名                         | varchar(500)  | Y        |                  |
+| mappingName |                   映射代码中的名称                   | varchar(500)  | Y        |                  |
+|    group     |                     可分组的字段                     | varchar(1000) | Y        |                  |
+| tableGroup  | 表与表之间的分组字段(用于预生成每个维度的统计数据) |     json      | Y        |                  |
+
 ### 报警信息报表(report_alarm_record)
 
-|   字段    |      字段说明      |   数据类型   | 是否非空 |           备注           |
-| :-------: | :----------------: | :----------: | -------- | :----------------------: |
-|    id     | 主键(无业务含义) | int(11)  | Y        | 全局唯一,自增无实际意义 |
-|   item_code    |    报警条目编码    | varchar(80)  | Y        |                          |
-|   project_id    |    项目id    | varchar(50)  | Y        |                          |
-| category  |      报警分类      | varchar(80) |          |                          |
-|   obj_id   |      对象id      | varchar(50)  |          |                          |
-| class_code  |      对象类型编码      |   varchar(50)   | Y        |                          |
-| level |      严重程度      |     varchar(10)     |          |                          |
-|   state   |      报警状态      | int  | Y        |      1:true,0:false      |
-|  create_time   |      创建时间      | varchar(8) |          |                          |
-|  count   |      数量      | int |          |                          |
+|      字段      |                           字段说明                           |   数据类型   | 是否非空 |           备注           |
+| :------------: | :----------------------------------------------------------: | :----------: | -------- | :----------------------: |
+|       id       |                      主键(无业务含义)                      |   int(11)    | Y        | 全局唯一,自增无实际意义 |
+|   projectId   |                            项目id                            | varchar(50)  | Y        |  
+|   groupCode   |                            项目编号                            | varchar(50)  | Y        | 
+|    objType    |                           对象分类                           | varchar(50)  | Y        |                          |
+|   classCode   |                         对象类型编码                         | varchar(50)  | Y        |                          |
+|      year      |                              年                              |  varchar(4)  | Y        |                          |
+|     month      |                      月(小于10:01-09)                       |  varchar(2)  |          |                          |
+|      day       |                      日(小于10:01-09)                       |  varchar(2)  |          |                          |
+|      hour      |                 时(24小时制,小于10:01-09)                  |  varchar(2)  |          |                          |
+|      week      |                              周                              |  varchar(2)  |          |                          |
+|     season     | 季度:1:0101-0401,2:0401-0701,3:0701-1001,4: 1001-0101  (日期前闭后开) |  varchar(1)  |          |                          |
+|  createTime   |               创建时间  日期格式:yyyyMMddh24                | varchar(10)  |          |                          |
+| rwdObjectNum |                       对象信息统计数量                       |   int(11)    | 0        |                          |
+|   dateType    | 日期类型(年:year 月:month 日:day 时:hour 周:week  季度:season) | varchar(100) | Y        |                          |
+
+### 报警信息统计报表 (report_alarm_record)
+
+|       字段       |                           字段说明                           |   数据类型   | 是否非空 |           备注           |
+| :--------------: | :----------------------------------------------------------: | :----------: | -------- | :----------------------: |
+|        id        |                      主键(无业务含义)                      |   int(11)    | Y        | 全局唯一,自增无实际意义 |
+|    itemCode     |                         报警条目编码                         | varchar(40)  | Y        |                          |
+|    projectId    |                            项目id                            | varchar(50)  | Y        | 
+|   groupCode   |                            项目编号                            | varchar(50)  | Y        | 
+|     category     |                           报警分类                           | varchar(80)  | Y         |                          |
+|    classCode    |                         对象类型编码                         | varchar(50)  |   Y       |                          |
+|      level       |                           严重程度                           | varchar(10)  |  Y        |                          |
+|   alarmState    |                           报警状态                           |  varchar(2)  |   Y       |                          |
+|       year       |                              年                              |  varchar(4)  |   Y       |                          |
+|      month       |                      月(小于10:01-09)                       |  varchar(2)  |          |                          |
+|       day        |                      日(小于10:01-09)                       |  varchar(2)  |          |                          |
+|       hour       |                 时(24小时制,小于10:01-09)                  |  varchar(2)  |          |                          |
+|       week       |                              周                              |  varchar(2)  |          |                          |
+|      season      | 季度:1:0101-0401,2:0401-0701,3:0701-1001,4: 1001-0101  (日期前闭后开) |  varchar(1)  |          |                          |
+|   createTime    |               创建时间  日期格式:yyyyMMddh24                | varchar(10)  |          |                          |
+| alarmRecordNum |                       报警信息统计数量                       |              | 0        |                          |
+|    dateType     | 日期类型(年:year 月:month 日:day 时:hour 周:week  季度:season) | varchar(100) | Y        |                          |

+ 63 - 29
docs/utils/query.md

@@ -17,7 +17,7 @@
         }
     ],
     "withColumns": [ "roles" ]
-}  
+}
 ```
 
 返回格式
@@ -48,23 +48,23 @@
 
 | 字段        |          | 说明                      |
 | ----------- | -------- | ------------------------- |
-| page        |          | 分页页码,从1开始          |
+| page        |          | 分页页码,从 1 开始        |
 | size        |          | 分页大小                  |
-| onlyCount   |          | 是否只统计数量,默认false  |
+| onlyCount   |          | 是否只统计数量,默认 false |
 | criteria    |          | 查询条件                  |
 | orders      | object[] | 排序参数,支持多个字段排序 |
 |             | column   | 排序字段                  |
-|             | asc      | 是否升序,默认true         |
+|             | asc      | 是否升序,默认 true        |
 | withColumns |          | 额外返回的扩展字段清单    |
 |             |          |                           |
 
-## criteria说明
+## criteria 说明
 
 #### 符号说明
 
 | 符号                     | 说明                           |
 | ------------------------ | ------------------------------ |
-| $ne                      | dayu                           |
+| \$ne                     | dayu                           |
 | \$gt, \$gte, \$lt, \$lte | 大于, 大于等于, 小于, 小于等于 |
 | \$in                     | 范围查询                       |
 | \$like, \$notlike        | 模糊匹配 不匹配                |
@@ -72,7 +72,7 @@
 |                          |                                |
 |                          |                                |
 
-以下实例针对的实体类型user如下
+以下实例针对的实体类型 user 如下
 
 | 字段 | 类型   |
 | ---- | ------ |
@@ -82,7 +82,7 @@
 
 #### 相等
 
-查询name为zhangsan的数据
+查询 name  zhangsan 的数据
 
 ```
 {
@@ -94,7 +94,7 @@
 
 #### 不等于
 
-查询name不等于张三的数据
+查询 name 不等于张三的数据
 
 ```
 {
@@ -108,7 +108,7 @@
 
 #### 是否为空
 
-查询name不为空的数据
+查询 name 不为空的数据
 
 ```
 {
@@ -120,11 +120,9 @@
 }
 ```
 
-
-
 #### 比较大小
 
-查询age大于25小于35的数据
+查询 age 大于 25 小于 35 的数据
 
 ```
 {
@@ -137,9 +135,9 @@
 }
 ```
 
-#### in查询
+#### in 查询
 
-查询name为zhangsan、lisi的数据
+查询 name  zhangsan、lisi 的数据
 
 ```
 {
@@ -163,7 +161,7 @@
 
 #### 模糊查询
 
-查询name以zh开头的数据
+查询 name  zh 开头的数据
 
 ```
 {
@@ -175,13 +173,11 @@
 }
 ```
 
+## withColumns 说明
 
+通过 withColumns 可以控制返回的数据内容,可以一定程度上提供服务性能.
 
-## withColumns说明
-
-通过withColumns可以控制返回的数据内容,可以一定程度上提供服务性能.
-
-withColumns粒度比较粗,一般由服务提供者决定哪些字段可以通过withColumns来控制.
+withColumns 粒度比较粗,一般由服务提供者决定哪些字段可以通过 withColumns 来控制.
 
 假设数据如下
 
@@ -193,7 +189,7 @@ withColumns粒度比较粗,一般由服务提供者决定哪些字段可以通
 }
 ```
 
-将roles设计为可选字段,由withColumns来管理,如果查询参数中有withColumns并包含roles,则返回roles字段
+将 roles 设计为可选字段,由 withColumns 来管理,如果查询参数中有 withColumns 并包含 roles,则返回 roles 字段
 
 默认查询和返回的数据内容为
 
@@ -205,8 +201,6 @@ withColumns粒度比较粗,一般由服务提供者决定哪些字段可以通
 }
 ```
 
-
-
 ```
 {
     "name": "zhangsan",
@@ -214,7 +208,7 @@ withColumns粒度比较粗,一般由服务提供者决定哪些字段可以通
 }
 ```
 
-包含withColumns时的查询参数和返回的数据
+包含 withColumns 时的查询参数和返回的数据
 
 ```
 {
@@ -233,17 +227,57 @@ withColumns粒度比较粗,一般由服务提供者决定哪些字段可以通
 }
 ```
 
+## 物理世界对象信息点相关查询
 
+#### \$search
 
+特别说明:
 
+```
+1.业务含义不可靠,目前除"查询绑定了某个表号功能号的对象"这一个场景外暂时没有合理使用该查询的业务场景
+2.性能差!性能差!性能差!
+```
 
+```json
+{
+    "criteria": {
+        "$search": "关键字"
+    }
+}
+```
 
+```
+1.直接放在criteria下,只能对字符串字段进行查询
+2.支持通配符%, 如"%abc%"将返回信息点的值中包含abc的对象
+3.固定字段(id,localId,name,localName,classCode...等)无效
+4.信息点的值可能是对象,若对象的属性符合条件则该对象也将被返回
+```
 
+#### 数组查询 \$contains \$notcontains
 
+特别说明:
 
+```
+1.业务含义不可靠,使用该查询之前务必搞清楚自己的目的是什么
+2.性能差!性能差!性能差!
+```
 
+```json
+{
+    "criteria": {
+        "arr": {
+            "$contains": "1"
+        },
+        "arr2": {
+            "$contains": [1, 3, 5]
+        }
+    }
+}
+```
 
-
-
-
-
+```
+1.直只能对复数信息点进行查询
+2.只要数组包含条件对应的值即查询条件成立,如[1,2,3]对1成立, [1,2,3]对[1,2]成立, [[1,2,3], [4,5,6]]对[1]成立, [[1,2,3], [4,5,6]]对[1,2]成立,[[1,2,3], [4,5,6]]对[1,5]成立
+3.固定字段(id,localId,name,localName,classCode...等)无效
+4.$notcontains含义与$contains相反,但是首先要求查询字段有值
+```

+ 21 - 0
docs/wther/index.md

@@ -0,0 +1,21 @@
+## 天气服务
+
+### [服务介绍](/wther/wther_prod.md)
+
+### [接口文档](/wther/wther_api_2021.md)
+
+#### [2021版接口](/wther/wther_api_2021.md)
+
+#### [2020版接口](/wther/wther_api_2020.md)
+
+**说明**
+
+目前天气服务只向外提供了HTTP形式的接口服务。
+
+接口以2020年为时间线分为两个大版本:2020年版,2021年版本。
+
+这两个版本在接口功能及提供的数据上相同,只是接口风格及返回的数据结构略有差异。
+
+凡首次使用天气服务的产品,应使用2021年版本的接口,2020年版的接口将在2021年7月1日始,拒绝所有新的ip请求,且停止接口的维护。
+
+

+ 774 - 0
docs/wther/wther_api_2020.md

@@ -0,0 +1,774 @@
+# 天气服务接口2020版
+
+**强调**:2020版接口的维护将于2021.7.1日截止。自2021.7.1日始,所有首次访问天气服务2020版接口的ip请求将被拒绝。
+
+## 统一说明
+
+#### POST接口请求方式说明
+
+凡是Method为POST方式的接口,支持两种参数请求方式。
+这两种请求方式的Header参数(Content-Type)值不同。
+
+##### 方式一
+
+该类接口以接口以http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/**unifier**开头 
+
+HTTP请求的Header需设置参数如下:
+
+```
+Content-Type=application/x-www-form-urlencoded
+```
+
+body体传参为字符串,格式为jsonString={"key":"value"},其中jsonString为固定字符,后面为Json格式字符串参数。
+
+##### 方式二
+
+该类接口以接口以http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/**unifierJson**开头 
+
+HTTP请求的Header需设置参数如下:
+
+```
+Content-Type=application/json
+```
+
+body体传参为Json格式字符串,例如:{"key":"value"}。
+
+#### 统一参数说明
+
+**所有查询指定城市天气数据的接口,都需要在参数中指明是哪一个城市。**
+目前天气服务支持传入cityCode、projectId、cityName三个参数(之一)来定位城市(说明见下表)。
+
+
+| 参数key    | 说明                         |  优先级      | 举例     |
+| --------- | ---------------------------- | ---------- | -------- |
+| cityCode  | 合法数据字典城市编码,6位数字字符串 | 最高       | 110101    |
+| projectId | 合法数据字典项目ID,12位字符串    | 高         | Pj1101010001 |
+| cityName  | 城市中文名,字符串              | 低         | 北京        |
+
+
+## 接口说明
+**注意:** 
+
+1. 凡是入参涉及到传城市信息的,以下接口说明中均已cityName作为参数,实际接口调用时,可根据*统一参数说明*,使用cityCode或者projectId代替cityName参数作为入参。
+2. 凡未特别注释,示例中的接口示入参均为必需项。
+
+### 实时数据查询
+
+简介:接口返回指定城市的最新天气数据信息,数据分为两大类A和B。
+A包括以下信息:天气现象文字(晴、多云...)、天气现象编码、温度、体感温度、气压、相对湿度、能见度、风速、风向文字、风向角度、风力等级、云量(范围0~100,天空被云覆盖的百分比)。
+B包括以下信息:空气质量文字(优、良...)、首要污染物、PM2.5、PM10、so2、no2、co、o3。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/NowWeatherQuery 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海",
+    "dataType":"枚举值字符串:weather,只返回A类数据; air,只返回B类数据; all, 返回A和B类数据"
+}
+```
+
+返回结果:
+
+正确结果JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "code": "天气现象编码,示例:8", 
+            "o3": "43",
+            "visibility": "能见度示例:9.3",
+            "pm10": "50",
+            "wind_direction": "风向文字,示例:北",
+            "pressure": "气压值,示例:1017", 
+            "clouds": "云量,示例:90", 
+            "co": "0.532",
+            "feels_like": "体感温度,示例:17",
+            "quality": "空气质量文字,示例:优",
+            "no2": "45",
+            "pm25": "30",
+            "so2": "7",
+            "last_update": "2021-01-21 15:50:00",
+            "wind_scale": "风力等级,示例:0",
+            "aqi": "50",
+            "primary_pollutant": "首要污染物,示例:pm25,若无则为空串", 
+            "temperature": "17",
+            "humidity": "相对湿度,示例:82", 
+            "wind_direction_degree": "风向角,示例:0", 
+            "wind_speed": "风速,示例:0.72",
+            "text": "天气现象文字,示例:阴"
+        }
+    ]
+}
+```
+
+错误结果JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 24小时预报数据查询
+
+简介:获取未来24小时的小时天气信息。此“未来24小时”包含当前小时整点,以及未来的23个小时的23个整点,共24条天气数据。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/Hour24Forecast 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海"
+}
+```
+
+返回结果:
+
+正确结果JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "location": {
+                "id": "WX4FBXXFKE4F",
+                "name": "北京",
+                "country": "CN",
+                "path": "北京,北京,中国",
+                "timezone": "Asia/Shanghai",
+                "timezone_offset": "+08:00"
+            },
+            "hourly": [
+                {
+                    "time": "时间,str,示例:2021-01-21 17:00:00",
+                    "text": "天气现象文字,str,示例:晴",
+                    "code": "天气现象编码,str,示例:0",
+                    "temperature": "温度,str,示例4", 
+                    "humidity": "相对湿度,str,示例:41",
+                    "wind_direction": "风向文字,str,南",
+                    "wind_speed": "风速,str,示例:10"
+                },
+                {
+                    "time": "2021-01-21 18:00:00",
+                    "text": "晴",
+                    "code": "1",
+                    "temperature": "1",
+                    "humidity": "42",
+                    "wind_direction": "西南",
+                    "wind_speed": "15"
+                },
+                {
+                    "time": "2021-01-22 16:00:00",
+                    "text": "晴",
+                    "code": "0",
+                    "temperature": "4",
+                    "humidity": "62",
+                    "wind_direction": "南",
+                    "wind_speed": "10"
+                }
+            ]
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 14天日预报
+
+简介:获取今天及未来共14天的天气预报信息。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/DayForecast 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海",
+    "startDay":"非必需参数,未来14天中,某一段时间的开始日(包含),示例:2021-01-21",
+    "endDay":"非必需参数,未来14天中,某一段时间的结束日(不包含)2021-01-29,示例:2021-01-21"
+}
+```
+
+结果示例
+
+正确结果JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "date": "2021-01-21",
+            "maxTemperature": "日最高温,Str,示例:6",
+            "rainfall": "降雨量,str, 示例:0.0",
+            "codeDay": "白日气象编码,示例:0",
+            "windDirectionDegree": "风向角,str,示例:225", 
+            "textDay": "白日气象文字,str,示例:晴",
+            "codeNight": "白日气象编码,str,示例:1",
+            "minTemperature": "日最低温,str,示例:-5",
+            "textNight": "夜晚气象文字,str,示例:晴",
+            "humidity": "相对湿度,str,示例:49",
+            "windDirection": "风向文字,str,示例:西南",
+            "windSpeed": "风速,str,示例:8.4",
+            "windScale": "风力等级,str,示例:2"
+        },
+        {
+            "date": "2021-01-28",
+            "maxTemperature": "4",
+            "rainfall": "0.0",
+            "codeDay": "0",
+            "windDirectionDegree": "225",
+            "textDay": "晴",
+            "codeNight": "1",
+            "minTemperature": "-5",
+            "textNight": "晴",
+            "humidity": "44",
+            "windDirection": "西南",
+            "windSpeed": "8.4",
+            "windScale": "2"
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 小时级历史数据
+简介:根据城市信息及开始时间、结束时间,获取城市小时天气历史数据。
+
+注意:
+1. 该接口能够查询到的最新的小时数据会至少比当前时间滞后半小时,例如结束时间为当天10:10,则接口只能查到最新小时数据为9:00的小时数据;若结束时间为当天10:35则能查到的最新小时数据为10:00的数据;
+2. 目前只支持全国约1200个城市区域;
+3. 改历史历史数据最远可追溯至17年,有些城市最远开始于2020年7月;
+4. 接口最大支持查询7天的数据。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/HourHistoryData 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海",
+    "minResponse":"是否只返回部分指标数据,boolean类型",
+    "startTime":"开始时间(包含),str,示例:2021-01-01 00:00:00",
+    "endTime":"结束时间(不包含),str,示例:2021-01-03 00:00:00"
+}
+```
+
+注:参数minResponse,默认值true,表示返回所有气象指标数据;false,只返回温度、相对湿度、风速、空气质量文字、天气现象文字六项数据
+
+返回结果:
+
+正确JSON,小时历史数据示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "code": "天气现象编码,str,示例:1",
+            "visibility": "能见度,str,示例:15.3",
+            "o3": "7",
+            "pm10": "60",
+            "pressure": "气压值,str,示例:1023",
+            "clouds": "云量,str,示例:0",
+            "co": "0.608",
+            "quality": "空气质量文字,str,示例:良", 
+            "feelsLike": "体感温度,str,示例:-6",
+            "windDirectionDegree": "风向角,str,示例:0",
+            "no2": "52",
+            "hourTime": "2021-01-01 00:00:00",
+            "pm25": "22",
+            "so2": "3",
+            "temperature": "温度,str,示例:-7",
+            "aqi": "气象指标指数,str,示例:55",
+            "humidity": "相对湿度,str,示例:37",
+            "primaryPollutant": "首要污染物,str,示例:PM10",
+            "text": "天气现象文字,str,示例:晴",
+            "windDirection": "风向,str,示例:北",
+            "windSpeed": "风速,str,示例:2.16",
+            "windScale": "风力等级,str,示例:1"
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 日级历史数据
+
+简介:根据城市信息及开始时间、结束时间,获取城市日历史数据。该接口最大支持一年的数据查询。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/dataHistory 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海",
+    "startTime":"开始时间(包含),str,示例:2021-01-01 00:00:00",
+    "endTime":"结束时间(不包含),str,示例:2021-01-03 00:00:00"
+}
+```
+
+返回结果:
+
+正确JSON
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "rainfall": "降雨量,str,示例:0.0",
+            "codeDay": "白日气象编码,str,示例:0",
+            "dayTime": "2021-01-01 00:00:00",
+            "windDirectionDegree": "风向角,str,示例:225",
+            "high": "日最高温,str,示例:1",
+            "textDay": "白日天气现象文字,str,示例:晴",
+            "codeNight": "夜晚气象编码,str,示例:1",
+            "low": "日最低温,str,示例:-11",
+            "textNight": "晚间天气现象文字,str,示例:晴",
+            "humidity": "相对湿度,str,示例:24",
+            "windDirection": "降雨量,str,示例:西南",
+            "windSpeed": "风速,str,示例:8.4",
+            "windScale": "风力等级,str,示例:2"
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 日统计数据
+
+简介:获取以下气象指标【温度、相对湿度、风速、气压、能见度】的日最大/小值和日均值数据。
+
+注意:有小时天气历史数据的城市才有日统计数据记录,该记录数据在每日凌晨将昨日小时气象数据统计得出;该接口最大支持一年的数据查询。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/DayStaticData 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海",
+    "startTime":"开始时间(包含),str,示例:2021-01-01 00:00:00",
+    "endTime":"结束时间(不包含),str,示例:2021-01-03 00:00:00",
+    "dataType":"返回数据类型,字符串枚举值,示例:All"
+}
+```
+
+注:参数dataType三个可选枚举值,默认为Max,表示获取最大最小值;Avg,表示获取平均值;All,表示获取最大最小值和平均值
+
+返回结果:
+
+正确JSON
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "maxVisibility": 27.0,
+            "avgPressure": 1021.5,
+            "maxTemp": 1.0, 
+            "avgHumidity": 37.0,
+            "avgTemp": -5.4, 
+            "minHumidity": 17.0,
+            "dayTime": "2021-01-01 00:00:00",
+            "minTemp": -11.0,
+            "maxWindSpeed": 8.0,
+            "avgWindSpeed": 4.0,
+            "minVisibility": 11.0,
+            "avgVisibility": 17.0,
+            "minPressure": 1020.0,
+            "maxPressure": 1024.0,
+            "minWindSpeed": 1.0,
+            "maxHumidity": 59.0
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 灾害预警
+
+简介:取指定城市的指定时间区间的灾害预警信息。
+
+注:
+
+1.同一种灾害预警如果级别不同,则结果可能返回多条结果数据;
+2.灾害数据更新频率为15分钟/次;
+3.所查询的时间跨度最大支持一年。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/DisasterWarningQuery 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海",
+    "startTime":"开始时间(包含),str,示例:2021-01-01 00:00:00",
+    "endTime":"结束时间(不包含),str,示例:2021-01-03 00:00:00",
+    "type":"非必需,灾害类型枚举,str,示例:道路结冰",
+    "level":"非必需,预警级别枚举值,str,示例:黄色"
+}
+```
+
+正确JSON,日灾害预警示例
+
+注:
+1. 同一种灾害预警如果级别不同,则结果可能返回多条结果数据;
+2. 灾害数据更新频率为15分钟/次;
+3. 所查询的时间跨度最大支持一年。
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "insertTime": "2021-01-19 06:16:06",
+            "path": "北京,北京,中国",
+            "level": "黄色",
+            "pubTime": "2021-01-19 06:08:39",
+            "name": "北京",
+            "description": "市气象台2021年1月19日06时00分发布道路结冰黄色预警信号:预计当前至20日中午将出现道路结冰现象,请注意防范。",
+            "cityId": "WX4FBXXFKE4F",
+            "title": "北京市气象台2021年1月19日06时00分发布道路结冰黄色预警信号",
+            "type": "道路结冰"
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+
+### 日出日落时间计算
+
+简介:根据坐标或者数据字典城市编码或者包含数据字典城市编码的项目数据字典ID计算日出日落时间。
+
+提示:入参支持数据字典城市名称,数据字典城市编码,符合数据字典命名规范的项目ID,经纬度值,四项参数不能全部为空,使用优先级:经纬度值> 数据字典城市编码 > 项目ID > 城市名称。该接口支持最长一年的数据计算。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/SunRiseAndSet 
+
+请求参数: 
+
+```json
+{
+    "cityName":"城市名称,比如:上海",
+    "longitude":116.4,
+    "latitude":39.9,
+    "startDay":"开始日(含),str,示例:2021-02-14",
+    "endDay":"结束日(不含),str,示例:2021-02-15"
+}
+```
+
+返回结果:
+
+正确JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "sunSet": "日落时间,示例:2021-02-14 17:50:00",
+            "sunRise": "日出时间,示例:2021-02-14 07:06:00"
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 字典数据-天气现象编码与文字
+
+简介:取天气现象编码及文字描述信息。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/DicWeatherCodeName 
+
+请求参数: 
+
+```json
+{}
+```
+
+返回结果:
+
+正确JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        {
+            "0": "晴",
+            "1": "晴",
+            "2": "晴",
+            "3": "晴",
+            "4": "多云",
+            "5": "晴间多云",
+            "6": "晴间多云",
+            "7": "大部多云",
+            "8": "大部多云"
+        }
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 字典数据-灾害预警类型
+
+简介:取天气现象编码及文字描述信息。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/DicDisasterType 
+
+请求参数: 
+
+```json
+{}
+```
+
+返回结果:
+
+正确JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        "台风",
+        "暴雨",
+        "暴雪",
+        "寒潮",
+        "大风",
+        "沙尘暴",
+        "高温",
+        "干旱",
+        "雷电",
+        "冰雹",
+        "霜冻",
+        "大雾",
+        "道路结冰",
+        "雷雨大风"
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 字典数据-灾害预警级别
+
+简介:取天气现象编码及文字描述信息。
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/unifierJson/DicDisasterLevel 
+
+请求参数: 
+
+```json
+{}
+```
+
+返回结果:
+
+正确JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "success",
+    "reason": null,
+    "content": [
+        "白色",
+        "蓝色",
+        "黄色",
+        "橙色",
+        "红色"
+    ]
+}
+```
+
+错误JSON示例
+
+```json
+{
+    "version": "1.0",
+    "result": "failure",
+    "reason": "错误信息",
+    "content": []
+}
+```
+
+### 天气现象图标下载
+
+简介:获取天气现象编码对应的图标图片数据。
+
+Method:GET 
+
+URL:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/download/icon/weatherCode-theme-size 
+
+URL说明:
+1. 以HTTP-GET访问接口,接口参数在URL最后面;
+2. 参数格式为weatherCode-theme-size。其中weatherCode为天气现象编码,必需;theme为图片主题,非必需,支持dark、light、classic三种;size为图标大小,非必需,支持big、small两种。
+3. 接口请求示例:http://127.0.0.1:8888/EMS_Weather/Spring/MVC/entrance/download/icon/5-classic-big
+
+返回结果:数据流

+ 147 - 0
docs/wther/wther_api_2021.md

@@ -0,0 +1,147 @@
+# 天气服务接口2021版
+
+## 统一说明
+
+#### 统一参数说明
+
+**所有查询指定城市天气数据的接口,都需要在参数中指明是哪一个城市。**
+目前天气服务支持传入cityCode、projectId、cityName三个参数(之一)来定位城市(说明见下表)。
+
+
+| 参数key    | 说明                         |  优先级      | 举例     |
+| --------- | ---------------------------- | ---------- | -------- |
+| cityCode  | 合法数据字典城市编码,6位数字字符串 | 最高       | 110101    |
+| projectId | 合法数据字典项目ID,12位字符串    | 高         | Pj1101010001 |
+| cityName  | 城市中文名,字符串              | 低         | 北京        |
+
+
+## 接口说明
+
+>
+> **注意:** 如未特殊说明,城市信息、dataType、time为必须传值。
+> 以下接口示例中,城市信息参数使用cityName作为参数,实际接口调用时,可根据*统一参数说明*,使用cityCode或者projectId代替cityName参数作为入参。
+> dataType的值为[服务介绍](/wther/wther_prod.md)中**数据类型**的类型码。
+> time参数为区间值,格式为时间戳。
+>
+> 接口所有入参及返回结果,时间字段的值均为时间戳格式,其余字段值为字符串格式。
+>
+> **除特殊说明外,所有的查询接口入参规则,请参照[通用查询](/utils/query.md),本文档的查询入参只包含通用查询的criteria部分,查询条件目前只支持:等于,和基于time参数的比较大小**
+>
+
+
+### 气象数据通用查询接口
+
+简介:支持[服务介绍](/wther/wther_prod.md)中所规定**数据类型**的相关气象指标数据查询
+
+Method:POST 
+
+Header参数:Content-Type=application/json 
+
+URL:http://127.0.0.1:8888/persagy-weather/Spring/MVC/unifier/dataQuery/{dataType}
+
+> dataType,数据类型码,有效值见服务介绍文档-数据类型
+>
+请求参数: 
+
+```json5
+{
+    "cityName":"上海", // 该参数可用cityCode或projectId代替
+    "time": {
+        "$gte": 1602434380000,
+        "$lt": 1602474380000
+    }
+}
+```
+
+返回结果:
+
+错误JSON示例
+
+```json
+{
+    "result": "fail",
+    "message": "错误信息"
+}
+```
+
+dataType=present,正确结果JSON示例
+
+```json5
+{
+    "result": "success",
+    "message": null,
+    "data": {
+        "temperature": "17",
+        "code": "天气现象编码,示例:8", 
+        "o3": "43",
+        "visibility": "能见度示例:9.3",
+        "...": "..." // 其余返回项见服务介绍文档-支持数据
+    }
+}
+```
+
+dataType=predictHour,正确结果JSON示例
+
+```json5
+{
+    "result": "success",
+    "message": null,
+    "data": [
+        {
+            "time": 1602434380000,
+            "text": "天气现象文字,str,示例:晴",
+            "code": "天气现象编码,str,示例:0",
+            "temperature": "温度,str,示例4", 
+            "...": "..." // 其余返回项见服务介绍文档-支持数据
+        }
+    ]
+}
+```
+
+dataType=disaster,正确结果JSON示例
+
+```json5
+{
+    "result": "success",
+    "message": null,
+    "data": [
+        {
+            "level": "黄色",
+            "pubTime": "2021-01-19 06:08:39",
+            "description": "市气象台2021年1月19日06时00分发布道路结冰黄色预警信号:预计当前至20日中午将出现道路结冰现象,请注意防范。",
+            "title": "北京市气象台2021年1月19日06时00分发布道路结冰黄色预警信号",
+            "type": "道路结冰"
+        }
+    ]
+}
+```
+
+所有dataType(类型码)对应结果说明
+
+| 类型名        | 类型码         | 入参说明       | 结果说明       |
+| ------------ | ------------ | ------------ | ------------ |
+| 实时数据     | present       | time参数无效   | 见上文示例      |
+| 小时预报数据   | predictHour  |              | 见上文示例      |
+| 日预报数据    | predictDay    |              | 格式同predictHour |
+| 小时历史数据   | historyHour  | time跨度<=31天  | 格式同predictHour |
+| 日历史数据    | historyDay    | time跨度<3年  | 格式同predictHour |
+| 日统计数据    | statisticDay  | time跨度<3年  | 格式同predictHour |
+| 灾害预警数据    | disaster    | time跨度<366天  | 见上文示例      |
+| 日出日落数据    | sunRiseSet  | time跨度<366天  | 格式同predictHour |
+
+说明:若dataType=sunRiseSet,城市信息可以使用经纬度坐标参数代替(参数:longitude、latitude,值为小数数值)
+
+### 天气现象图标下载
+
+简介:获取天气现象编码对应的图标图片数据。
+
+Method:GET 
+
+URL:http://127.0.0.1:8888/persagy-weather/Spring/MVC/entrance/download/icon/weatherCode-theme-size 
+
+URL说明:
+1. 以HTTP-GET访问接口,接口参数在URL最后面;
+2. 参数格式为weatherCode-theme-size。其中weatherCode为天气现象编码,必需;theme为图片主题,非必需,支持dark、light、classic三种;size为图标大小,非必需,支持big、small两种。
+3. 接口请求示例:http://127.0.0.1:8888/persagy-weather/Spring/MVC/entrance/download/icon/5-classic-big
+
+返回结果:数据流

+ 219 - 0
docs/wther/wther_prod.md

@@ -0,0 +1,219 @@
+# 天气服务介绍
+
+## 简介
+
+本天气服务通过定时访问第三方天气服务商的服务,将得到的指定城市的天气数据存入本地,并向外提供了可获取天气数据的HTTP接口,供各产品线业务系统查询使用。
+
+## 支持数据
+
+本服务支持以下气象指标和服务数据的查询
+
+#### 气象指标全集
+
+| 指标名        | 英文标识       | 单位及其他说明              |
+| ------------ | ------------ | ------------------------- |
+| 气温实时值     | temperature  | c,摄氏度                  |
+| 体感温度       | feelsLike   | c,摄氏度                   | 
+| 日最高温度     | temperatureHigh   | c,摄氏度              | 
+| 日最低温度     | temperatureLow   | c,摄氏度              | 
+| 统计温度最大值     | temperatureMax   | c,摄氏度              | 
+| 统计温度最小值     | temperatureMin   | c,摄氏度              | 
+| 统计温度均值     | temperatureAvg   | c,摄氏度              | 
+| 相对湿度       | humidity     | 数值范围0~100,是百分比值 |
+| 统计相对湿度最大值     | humidityMax     | 数值范围0~100,是百分比值 |
+| 统计相对湿度最小值     | humidityMin     | 数值范围0~100,是百分比值 | 
+| 统计相对湿度均值       | humidityAvg     | 数值范围0~100,是百分比值 |
+| 气压          | pressure     | 单位mbar,百帕              |
+| 统计气压最大值   | pressureMax     | 单位mbar,百帕              |
+| 统计气压最小值   | pressureMin     | 单位mbar,百帕              |
+| 统计气压均值     | pressureAvg     | 单位mbar,百帕              |
+| 能见度        | visibility   | km,千米                    |
+| 统计能见度最大值     | visibilityMax   | km,千米                    |
+| 统计能见度最小值     | visibilityMin   | km,千米                    |
+| 统计能见度均值       | visibilityAvg   | km,千米                    |
+| 风速          | windSpeed   | km/h,千米每小时             |
+| 统计风速最大值       | windSpeedMax   | km/h,千米每小时             |
+| 统计风速最小值       | windSpeedMin   | km/h,千米每小时             |
+| 统计风速均值         | windSpeedAvg   | km/h,千米每小时             |
+| 风力等级       | windScale   | 数值,>=0,无单位            |
+| 风向文字       | windDirection   | 无单位,描述信息,如:西南          | 
+| 风向角度       | windDirectionDegree   | 角度数值,0~360,0为正北,90为正东,180为正南 |
+| 降水量         | rainfall    | mm,毫米                     | 
+| 首要污染物      | primaryPollutant   | 无单位,字符描述            | 
+| 气象文字描述    | text      | 阴、晴、雨、雪...,无单位        | 
+| 白日气象文字描述    | textDay      | 阴、晴、雨、雪...,无单位        | 
+| 夜晚气象文字描述    | textNight      | 阴、晴、雨、雪...,无单位        | 
+| 气象编码       | code      | 无单位                        | 
+| 白日气象编码    | codeDay      | 无单位                  | 
+| 夜晚气象编码    | codeNight      | 无单位                  | 
+| 空气质量文字    | quality      | 优、良、轻度污染...,无单位     | 
+| 云量           | clouds      | 数值,0~100,无单位          | 
+| pm25          | pm25       | 1小时平均值。单位:μg/m³        |
+| pm10          | pm10       | 1小时平均值。单位:μg/m³        |
+| so2           | so2        | 1小时平均值。单位:μg/m³        |
+| no2           | no2        | 1小时平均值。单位:μg/m³        |
+| co           | co          | 1小时平均值。单位:μg/m³        |
+| o3           | o3          | 1小时平均值。单位:μg/m³        |
+| aqi          | aqi         | 数值,无单位                   |
+
+
+#### 日出日落信息
+
+| 指标名        | 英文标识       | 单位及其他说明              |
+| ------------ | ------------ | ------------------------- |
+| 日出时间          | sunRise        | 时间戳                   |
+| 日落时间          | sunSet         | 时间戳                   | 
+
+
+#### 灾害预警信息
+
+| 指标名        | 英文标识       | 单位及其他说明              |
+| ------------ | ------------ | ------------------------- |
+| 灾害预警级别    | level  |                   |
+| 预警发布时间    | pubTime   |  时间戳           | 
+| 预警描述信息    | description   |              | 
+| 灾害预警标题   | title   |             | 
+| 灾害预警类型   | type   |             | 
+
+
+## 枚举值
+
+#### 空气质量类别
+
+```json
+["优", "良", "轻度污染", "中度污染", "重度污染", "严重污染"]
+```
+
+#### 气象编码与气象文字描述
+
+```json
+{
+    "0": "晴",
+    "1": "晴",
+    "2": "晴",
+    "3": "晴",
+    "4": "多云",
+    "5": "晴间多云",
+    "6": "晴间多云",
+    "7": "大部多云",
+    "8": "大部多云",
+    "9": "阴",
+    "10": "阵雨",
+    "11": "雷阵雨",
+    "12": "雷阵雨伴有冰雹",
+    "13": "小雨",
+    "14": "中雨",
+    "15": "大雨",
+    "16": "暴雨",
+    "17": "大暴雨",
+    "18": "特大暴雨",
+    "19": "冻雨",
+    "20": "雨夹雪",
+    "21": "阵雪",
+    "22": "小雪",
+    "23": "中雪",
+    "24": "大雪",
+    "25": "暴雪",
+    "26": "浮尘",
+    "27": "扬沙",
+    "28": "沙尘暴",
+    "29": "强沙尘暴",
+    "30": "雾",
+    "31": "霾",
+    "32": "风",
+    "33": "大风",
+    "34": "飓风",
+    "35": "热带风暴",
+    "36": "龙卷风",
+    "37": "冷",
+    "38": "热",
+    "99": "未知"
+}
+```
+
+#### 灾害预警类型
+
+```json
+["台风", "暴雨", "暴雪", "寒潮", "大风", "沙尘暴", "高温", "干旱", "雷电", "冰雹", "霜冻", "大雾", "道路结冰", "雷雨大风"]
+```
+
+#### 灾害级别
+
+```json
+["白色", "蓝色", "黄色", "橙色", "红色"]
+```
+
+
+## 气象数据类型
+按时间和功能划分,支持以下类型数据查询: 
+
+| 类型名        | 类型码       | 
+| ------------ | ------------ | 
+| 实时数据     | present  | 
+| 小时预报数据   | predictHour | 
+| 日预报数据    | predictDay  | 
+| 小时历史数据   | historyHour | 
+| 日历史数据    | historyDay  |
+| 日统计数据    | statisticDay  |
+| 灾害预警数据    | disaster  |
+| 日出日落数据    | sunRiseSet  |
+
+* **实时数据** 
+
+获取某城市当前气象数据信息。支持的气象指标有:气温实时值, 体感温度, 相对湿度, 气压, 能见度, 风速, 风力等级, 风向文字, 风向角度, 首要污染物, 气象文字描述, 气象编码, 空气质量文字, 云量, pm25, pm10, so2, no2, co, o3, aqi。
+
+
+* **小时预报数据** 
+
+可获取包含当前小时及未来23小时的预报数据。支持气象指标:气温实时值, 相对湿度, 风速, 风向文字, 气象文字描述, 气象编码。
+
+
+* **日预报数据** 
+
+可获取包含当天及未来14日的预报数据。支持气象指标:日最高温度, 日最低温度, 相对湿度, 风速, 风力等级, 风向文字, 风向角度, 降水量, 白日气象文字描述, 夜晚气象文字描述, 白日气象编码, 夜晚气象编码。
+
+
+* **小时历史数据** 
+
+最早可获取到2017年1月1日数据。支持气象指标: 气温实时值, 相对湿度, 气象文字, 气压, 能见度, 风速, 风力等级, 风向文字, 风向角度,(2020.7.1之前不支持以下类型)体感温度, 首要污染物, 气象文字描述, 气象编码, 空气质量文字, 云量, pm25, pm10, so2, no2, co, o3, aqi;
+
+
+* **日历史数据** 
+
+最早可获取到2017年1月1日数据。支持气象指标: 日最高温度, 日最低温度, 相对湿度, 白日气象文字描述, 夜晚气象文字描述, 风速, 风向角, (2020.7.1之前不支持以下类型)风力等级, 风向文字, 白日气象编码, 夜晚气象编码, 降雨量。
+
+
+* **日统计数据** 
+
+凡具有小时历史数据的城市,均有日统计数据。最早可获取到2017年1月1日数据。 支持气象指标: [温度, 相对湿度, 风速, 气压, 能见度] 的日最大值、最小值、均值。
+
+
+* **灾害预警数据** 
+
+支持以下灾害类型的预警信息查询: ["台风", "暴雨", "暴雪", "寒潮", "大风", "沙尘暴", "高温", "干旱", "雷电", "冰雹", "霜冻", "大雾", "道路结冰", "雷雨大风"]
+
+
+* **日出日落数据** 
+
+支持根据经纬度坐标,或者数据字典城市编码,或者包含数据字典城市编码的项目数据字典ID,来计算日出时间和日落时间。
+
+
+* **天气现象图标** 
+
+支持天气现象(即阴晴雨雪...)对应图标下载。
+
+
+## 数据来源
+
+本天气服务中所有天气相关数据来源于服务提供商——心知天气(https://www.seniverse.com/)。
+
+## 支持城市
+* 小时预报,日预报,日历史天气数据和灾害预警数据支持3000+个城市地区(几乎涵盖全国所有地区)
+* 天气实况数据,小时历史数据和统计数据支持约1200个城市地区(几乎涵盖全国所有一、二、三、四、五线城市的市级,部分涵盖区级)
+
+## 产品更新记录
+
+* 2020年8月15日,对整个底层代码逻辑行了重构,重新设计了表结构及存储方式,优化了定时任务,升级了数据字典城市编码与第三方城市码的匹配算法。新增若干接口,支持约1200个城市的小时天气数据查询和日天气数据统计查询,支持3000多个城市区域的日天气数据查询,支持日出日落数据数据查询,支持天气气象图标下载;
+* 2019年6月,新增若干接口,支持约300个城市小时天气数据查询和日数据统计查询,约1000个城市地区的日天气数据查询,并增加了灾害预警数据查询、月级别统计数据的计算;
+* 2018年10月,健全了项目的说明文档,接口文档,并对项目的定时任务逻辑进行了简单重构;
+* 2017年4月,作为一个定制项目被创建,提供了4个HTTP服务接口,支持约100个城市的日天气数据查询;